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
的概率。我们想要建立团队排名,由于缺乏a与d
和a与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。虽然有许多TSP问题的交叉算子,但我认为我必须设计自己的交叉算子,因为我的问题与TSP略有不同。您是否有任何解决方案或概念分析框架的想法?
在随机选择的元素子集(在此示例中为大写字母'a,b,d')上,我们将第一个子序列 - 元素序列'a,b,d'复制并粘贴到第二个排序中,以实现交叉操作:
CrossOver(ABcD,AcDB) = AcBD
编辑:非对称TSP可以变为带有禁止的子序列的对称TSP,这使得GA方法不适用。
b,c,d,a
为例,总概率应该被最大化。你可以计算适应度函数f(b,c,d,a) = p(b>c) * p(c>d) * p(d>a)
。但是p(d>a)
是什么呢?如果你计算出它,剩下的就很容易了。 - Stephana>b, 0.9
,b>c, 0.7
,f(abc)=p(a>b)*p(b>c)
,而对于f(acb)=p(a>b)*(1-p(b>c))
,它非常简单,不需要考虑p(a>c)
的概率。 - Qbika
和c
的排名。在你的公式中,你计算了p(a>b)
和p(c>b)
,但这并不意味着p(a>c)
。如果你知道a
大于b
且c
大于b
,你并不知道a
是否大于、小于或等于c
。 - Stephan