我想实现一个遗传算法(我还不确定语言/框架,可能是Watchmaker)来优化某些流体的混合比。
每个混合物由多达5种成分组成,我将其建模为具有变化值的基因。由于染色体代表混合比,因此(至少)还有两个附加条件:
(1) a + b + c + d + e = 1
(2) a, b, c, d, e >= 0
我还在计划我的项目的阶段,因此我不能给出任何示例代码,但是我想知道这些条件是否以及如何在遗传算法框架中实现,比如Watchmaker。
[编辑]
因为这似乎不是直接的澄清:
问题在于条件(1)-如果每个基因a、b、c、d、e
是随机独立选择的,则发生这种情况的概率约为0。因此,我需要以一种方式来实现变异,其中,a,b,c,d,e
是根据彼此选择的(参见添加到100的随机数:Matlab作为示例)。
然而,我不知道这是否可能,也不知道这是否符合一般的进化算法。
第一个条件(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