考虑到我有4条染色体(gi,i = 1到4})代表4%不同的东西,所以4%的总和等于100.我如何有效地表示这一点?
我知道可以通过:g1 /(g1 + g2 + g3 + g4)。但是,这效率不高。考虑所有gi = 0.2或所有gi = 0.1将代表这两种情况中的25%。有可能产生许多不同基因呈现相同百分比的情况。还有其他有效的方法,其中独特的基因组合提供了独特的百分比组合。
提前致谢。
答案 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