【发布时间】:2012-04-26 11:26:58
【问题描述】:
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方法不适合。
【问题讨论】:
-
遗传算法优化参数以最大化或最小化适应值。你能写一个包含所有数据的适应度函数吗?在 TSP 中,它将是总距离的计算。
-
在我看来,如果你以
b,c,d,a为例,总的概率应该最大化。您可以计算适应度f(b,c,d,a) = p(b>c) * p(c>d) * p(d>a).. 但是p(d>a)是什么?如果你计算出来,剩下的就很容易了。 -
我知道如何计算适应度函数,例如对于给定的数据:
a>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)的概率不是需要。 -
你的方法不正确。你不计算
a和c的排名。在您的公式中,您正在计算p(a>b)和p(c>b),但这并不意味着p(a>c)。如果知道a大于b且c大于b,则不知道a是否大于、小于或等于c。
标签: optimization genetic-algorithm ranking mathematical-optimization traveling-salesman