如何在进化算法中表示百分比?

时间:2015-02-20 09:02:41

标签: algorithm genetic-algorithm evolutionary-algorithm

考虑到我有4条染色体(gi,i = 1到4})代表4%不同的东西,所以4%的总和等于100.我如何有效地表示这一点?

我知道可以通过:g1 /(g1 + g2 + g3 + g4)。但是,这效率不高。考虑所有gi = 0.2或所有gi = 0.1将代表这两种情况中的25%。有可能产生许多不同基因呈现相同百分比的情况。还有其他有效的方法,其中独特的基因组合提供了独特的百分比组合。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为你混淆了基因和染色体。染色体编码您的问题的候选解决方案。基因是染色体的一部分。

在此设置下,您为什么要在染色体上进行约束?听起来你想要它在染色体的基因上

为了做到这一点,你可以做很多事情:让每个基因在[0, 100]中编码一个整数。如果基因最终没有添加到100,则会惩罚那些染色体的适应性。

另一种可能使交叉算子更自然地应用的方法是让每个基因存储100位。如果设置了x位,则表示该基因将编码x%

另一种方法是让整个染色体编码100设置位。然后每个基因将保留一个值x,表示一个区间。两个分裂点之间的设定位数是与该基因相关的百分比。例如:

1 2 3 4 5 6 7 8 ... 100
1 1 1 1 1 1 1 1 ... 1
|      |     | |    |
   g1    g2  g3  g4

这可以通过生成5个随机数<= 100,对它们进行排序并消除它们之间的差异来完成。

答案 1 :(得分:0)

X 单位分配给 N 的可能性的一种方法是存储 X *(N-1)位。每个单位都被赋予(N-1)位,如果(N-1)位的 k 被设置,则该单位被分配给的ķ

这很容易使用,因为没有无效的解决方案,也不需要惩罚/修理。这使得健身评估,交叉和变异更容易实现。

例如,问题是将5个单位(X)分配给4(N)种可能之一。每个人都是(4-1)x5 = 15位。

位串:010 100 000 011 111将前2个单元分配给可能性1,因为两个组都设置了1位。没有设置位的第三个单元被分配给0.第四个单元被分配给2,第五个单元被分配给3。

partition   units
0           1
1           2
2           1
3           1