Encoding 遗传算法编码
我正在尝试创建一个算法,我相信它类似于背包问题。问题在于找到某些中间产品的配方/材料清单。中间产品的配方有不同的选择。例如,产品X可以包含25%的原料A+75%的原料B,或者50%的原料A+50%的原料B,等等。每个配方有1到100种不同的替代品 我的问题是,如何最好地编码不同的配方选择(和/或在互联网上找到类似的问题)。我想我必须使用值编码(为配方的每个备选方案指定一个值)。我有合理的、不同的选择吗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
感谢与问候您可以使用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
通过这种编码,交叉不会使染色体失效。我没有完全描述这个问题,但您仍然理解它。谢谢你们两位。我没有完全描述这个问题,但你们仍然理解它。谢谢你们两位。