我想实现遗传算法(我还不确定语言/框架,可能是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作为示例)。
但是,我不知道这是否可行,如果这样做,那将符合一般的进化算法。
答案 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
),您可以在 之前为新的后代染色体(由突变和/或交叉生成)添加批准阶段将它们扔进基因库(并允许它们繁殖),并拒绝那些不满足条件的人。