BIG版后的问题:
我需要使用遗传算法建立一个排名,我有这样的数据:
P(a>b)=0.9
P(b>c)=0.7
P(c>d)=0.8
P(b>d)=0.3
现在,让我们解释a,b,c,d
为足球队的名称,并且P(x>y)
是x
获胜的概率y
。我们想要建立团队排名,我们缺乏一些观察P(a>d)
,P(a>c)
由于缺乏 a vs d 和 a vs c 之间的匹配而丢失。目标是找到最能描述这四支球队联赛现状的球队名称排序。
如果我们只有 4 个团队而不是简单的解决方案,首先我们计算4!=24
四个团队的所有排序的概率,同时忽略我们拥有的缺失值:
P(abcd)=P(a>b)P(b>c)P(c>d)P(b>d)
P(abdc)=P(a>b)P(b>c)(1-P(c>d))P(b>d)
...
P(dcba)=(1-P(a>b))(1-P(b>c))(1-P(c>d))(1-P(b>d))
我们选择概率最高的排名。我不想使用任何其他健身功能。
我的问题 :
由于 n 元素的排列数量n!
对于大 n (我的 n 约为 40)不可能计算所有排序的概率。我想使用遗传算法来解决这个问题。
变异算子是两个(或更多)排名元素位置的简单切换。
但是如何使两个排序交叉?
可以P(abcd)
解释为不对称 TSP 问题中路径“abcd”的成本函数,但从 x 到 y 的旅行成本与从 y 到 x 的旅行成本不同,P(x>y)=1-P(y<x)
?TSP问题的交叉算子有很多,但我想我必须设计自己的交叉算子,因为我的问题与TSP略有不同。您对概念分析的解决方案或框架有什么想法吗?
在概念和实现级别上,最简单的方法是使用交叉运算符,它可以在两个解决方案之间交换子排序:
CrossOver(ABcD,AcDB) = AcBD
对于元素的随机子集(在本例中为大写字母的“a,b,d”),我们将第一个子排序 - 元素“a,b,d”的序列复制并粘贴到第二个排序。
版本:不对称 TSP 可以变成对称 TSP,但有禁止的子排序,这使得 GA 方法不适合。