遗传算法:基因值应总计为1

时间:2013-09-12 07:32:34

标签: java genetic-algorithm evolutionary-algorithm watchmaker

我想实现遗传算法(我还不确定语言/框架,可能是Watchmaker)来优化某些流体的混合比。

每种混合物由最多5种成分a, b, c, d, e组成,我将其模型化为具有不断变化的值的基因。由于染色体代表混合比,因此存在(至少)两个附加条件:

(1) a + b + c + d + e = 1
(2)    a, b, c, d, e >= 0

我仍然处于规划项目的阶段,因此我不能提供示例代码,但是我想知道这些条件是否以及如何在具有像Watchmaker这样的框架的遗传算法中实现。

[编辑]
由于这似乎不是直截了当的一些澄清:

问题是条件(1) - 如果每个基因a, b, c, d, e是随机且独立选择的,那么这种情况发生的概率大约是0.因此,我需要以{{1}的方式实现突变根据彼此选择(参见Random numbers that add to 100: Matlab作为示例)。

但是,我不知道这是否可行,如果这样做,那将符合一般的进化算法。

1 个答案:

答案 0 :(得分:2)

第一个条件(a+b+c+d+e=1)可以通过较短的染色体来满足,只有a,b,c,d。然后可以e表示e:=1-a-b-c-d值(在适应度函数中或供以后使用)。

修改
满足第一个条件的另一种方法是规范化值:

sum:= a+b+c+d+e
a:= a/sum;
b:= b/sum;
c:= c/sum;
d:= d/sum;
e:= e/sum;

新的金额将为1。

对于第二个条件(a,b,c,d,e>=0),您可以在 之前为新的后代染色体(由突变和/或交叉生成)添加批准阶段将它们扔进基因库(并允许它们繁殖),并拒绝那些不满足条件的人。