2016-08-01 120 views
0

我想创建一个我认为类似于背包问题的算法。问题是为某些中间产品找到配方/物料清单。中间产品配方有不同的选择。例如,产品X可以由25%的原材料A + 75%的原材料B或50%的原材料A + 50%的原材料B等组成。对于每种配方,有1到100种不同的替代品。遗传算法编码

我的问题是,如何最好地编码不同的配方替代品(和/或在哪里可以找到类似的问题在互联网上)。我想我必须使用值编码,即为每个配方的替代选项分配一个值。我有合理的,不同的选择吗?

感谢&亲切的问候

回答

1

您可以编码与一些染色体的问题。如果您的产品具有N成分,那么您的数字染色体长度为N:X = {x1,x2,...,xN}。染色体的每个数字xi代表成分的部分我。这不是必须的,数字总和为1。 例如X = {23,5,0}表示需要23份成分1,5份成分2和0份成分3.

使用此编码,交叉不会使染色体失效。

+0

我没有完全描述这个问题,但你仍然理解它是正确的。感谢你们俩。 –

1

您可以使用100个dimentions变量提出一个单独的,就像下面

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

很难operation.So我建议后代可以只生产使用交叉通过变异手术。

突变对父代个体“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;