Encoding 遗传算法编码

Encoding 遗传算法编码,encoding,genetic-algorithm,knapsack-problem,Encoding,Genetic Algorithm,Knapsack Problem,我正在尝试创建一个算法,我相信它类似于背包问题。问题在于找到某些中间产品的配方/材料清单。中间产品的配方有不同的选择。例如,产品X可以包含25%的原料A+75%的原料B,或者50%的原料A+50%的原料B,等等。每个配方有1到100种不同的替代品 我的问题是,如何最好地编码不同的配方选择(和/或在互联网上找到类似的问题)。我想我必须使用值编码(为配方的每个备选方案指定一个值)。我有合理的、不同的选择吗 感谢与问候您可以使用100维变量来表示个人,如下所示 X={x1,x2,x3,...,x100

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

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


感谢与问候

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

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

你可以用一个数字编码这个问题。如果你的产品含有N种成分,那么你的编号染色体的长度为N:X={x1,x2,…,xN}。染色体的每一个数席代表成分I的部分。不要求数字总和为1。 例如,X={23,5,0}表示您需要23份成分1、5份成分2和0份成分3


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

您可以用一个数字染色体对问题进行编码。如果你的产品含有N种成分,那么你的编号染色体的长度为N:X={x1,x2,…,xN}。染色体的每一个数席代表成分I的部分。不要求数字总和为1。 例如,X={23,5,0}表示您需要23份成分1、5份成分2和0份成分3


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

我没有完全描述这个问题,但您仍然理解它。谢谢你们两位。我没有完全描述这个问题,但你们仍然理解它。谢谢你们两位。