【问题标题】:Genetic-algorithm encoding遗传算法编码
【发布时间】:2016-08-01 11:26:45
【问题描述】:
我正在尝试创建一个我认为类似于背包问题的算法。问题是找到某些中间产品的配方/材料清单。中间产品有不同的配方可供选择。例如,产品 X 可以由 25% 的原料 A + 75% 的原料 B,或 50% 的原料 A + 50% 的原料 B 组成,等等。每个配方有 1 到 100 种不同的替代品。
我的问题是,如何最好地编码不同的食谱替代品(和/或在互联网上哪里可以找到类似的问题)。我想我必须使用值编码,即为配方的每个替代项分配一个值。我有合理的不同选择吗?
感谢和问候
【问题讨论】:
标签:
encoding
genetic-algorithm
knapsack-problem
【解决方案1】:
您可以用数字染色体对问题进行编码。如果您的产品有 N 种成分,那么您的编号染色体的长度为 N:X={x1,x2,..,xN}。染色体的每个数字 xi 代表成分 i 的部分。数字总和为一不是必需的。
例如。 X={23,5,0} 表示,您需要 23 份成分 1、5 份成分 2 和 0 份成分 3。
使用这种编码,交叉不会使染色体无效。
【解决方案2】:
您可以使用 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;