遗传算法编码

Posted

技术标签:

【中文标题】遗传算法编码【英文标题】:Genetic-algorithm encoding 【发布时间】:2016-08-01 11:26:45 【问题描述】:

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

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

感谢和问候

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于遗传算法编码的主要内容,如果未能解决你的问题,请参考以下文章

遗传算法的中心思想

MATLAB遗传算法

matlab基于多层编码遗传算法的车间调度算法matlab优化算法十九

matlab基于多层编码遗传算法的车间调度算法matlab优化算法十九

c语言实现*/遗传算法改进BP神经网络原理和算法实现怎么弄

python(deap库)实现GEAP 遗传算法/遗传编程 genetic programming +