我正在尝试创建一个我认为类似于背包问题的算法。问题是找到某些中间产品的配方/物料清单。中间产品的配方有不同的替代品。例如,产品X可以由25%的原料A + 75%的原料B,或50%的原料A + 50%的原料B等组成。每种配方有1到100种不同的替代品。
我的问题是,如何最好地编码不同的食谱替代品(和/或在互联网上找到类似问题的位置)。我想我必须使用值编码,即为配方的每个替代品分配一个值。我有合理的,不同的选择吗?
谢谢&亲切的问候
答案 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.
使用此编码,交叉不会使染色体无效。