遗传算法编码



我正在尝试创建一个算法,我认为它类似于背包问题。问题是要找到某些中间产品的配方/物料清单。中间产品的配方有不同的替代品。例如,产品X可以由25%的原料A+75%的原料B组成,或者由50%的原料A加50%的原料B等组成。每个配方有1到100种不同的替代品。

我的问题是,如何最好地对不同的食谱进行编码(和/或在互联网上哪里可以找到类似的问题)。我想我必须使用值编码(为配方的每个备选方案指定一个值)。我有合理的、不同的选择吗?

谢谢&关于的种类

您可以用数字染色体对问题进行编码。如果您的产品含有N成分,那么您的数字染色体的长度为N:X={x1,x2,..,xN}。染色体的每个数字xi代表成分i的部分。这不是必须的,数字加起来就是一。例如,X={23,5,0}意味着,您需要23份成分1、5份成分2和0份成分3。

通过这种编码,交叉不会使染色体失效。

您可以使用100维变量来呈现个人,就像下面一样

X={x1,x2,x3,...,x100} xi∈[0,1] ∑(xi)=1.0

交叉操作很难使用。因此,我建议通过突变操作可以产生后代。

对亲本个体"X"的突变操作:

(1)randly choose two dimention 'xi' and 'xj' from 'X';
(2)p=rand(0,1);
(3)xj=xj+(1-p)*xi;
(4)xi=xi*p;

最新更新