遗传算法编码

时间:2016-08-01 11:26:45

标签: encoding genetic-algorithm knapsack-problem

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

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

谢谢&亲切的问候

2 个答案:

答案 0 :(得分:1)

您可以使用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;

答案 1 :(得分:1)

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

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