Encoding 此场景中使用的遗传算法编码技术
该问题是利用遗传算法在多个仓库中寻找总成本最小的最优数量 假设有Encoding 此场景中使用的遗传算法编码技术,encoding,genetic-algorithm,Encoding,Genetic Algorithm,该问题是利用遗传算法在多个仓库中寻找总成本最小的最优数量 假设有n仓库。与每个仓库相关的有几个因素: LCosti:仓库i的装载成本 HCosti:仓库i的持有成本 TCosti:仓库i的运输成本 OCosti:仓库i的订购成本 每个仓库都有与其关联的数量Qi,必须满足以下4个标准: 装载约束:Qi*LCosti>=仓库i的Ai 持有约束:Qi*HCosti>=仓库i的Bi 运输限制:Qi*TCosti>=仓库i的Ci 订购约束:Qi*OCosti>=仓库i的Di 其中A、B、C和D是每
n
仓库。与每个仓库相关的有几个因素:
- LCosti:仓库i的装载成本
- HCosti:仓库i的持有成本
- TCosti:仓库i的运输成本
- OCosti:仓库i的订购成本
- 装载约束:Qi*LCosti>=仓库i的Ai
- 持有约束:Qi*HCosti>=仓库i的Bi
- 运输限制:Qi*TCosti>=仓库i的Ci
- 订购约束:Qi*OCosti>=仓库i的Di
- 地>=气
如何为这个问题编码染色体?我的想法是,结合四个约束中的一个,给出Qi的最小允许值和最后一个约束,我可以得到Qi的范围。然后我可以为初始总体随机生成该范围内的值。但在上述场景中,我如何执行交叉和变异?如何对染色体进行编码?一般来说,在约束问题中,基本上有三种可能的方法(关于进化算法): 1.将约束违反合并到适应度中 您可以将您的健身设计为实际目标和违反约束的惩罚的总和。最极端的情况是“死刑”,即任何以任何方式违反任何约束的个人都可能受到最坏的惩罚 这种方法通常很容易实现,但有一个很大的缺点:它通常会惩罚具有良好构建块但过度违反约束的解决方案 2.校正运算符,抗编码 如果您的问题有可能解决,您可以实现“更正运算符”(correction operators)——将违反约束的解决方案转换为另一个不违反约束的解决方案的运算符,从而尽可能保留原始解决方案的结构。类似的事情是使用这样一种编码来保证解决方案总是可行的,也就是说,你有这样一种解码算法,它总是产生有效的解决方案 如果可能,这可能是您可以采取的最佳方法。但是,如果不对解决方案进行重大更改,则通常很难实现,或者不可能实现,因为这些更改会大大降低搜索速度,甚至使搜索变得无用 3.多目标方法 使用一些多目标(MO)算法,例如NSGA-II,并将违反约束的度量转化为目标,同时优化所有目标。MO算法通常提供解的帕累托前沿——位于目标冲突权衡空间前沿的一组解。使用此方法,可以保持相同的表示形式,并避免双重转换(整数->二进制,二进制->整数) 突变操作是:
V(g+1, i) = X(g, r1) + F ⋅ (X(g, r2) − X(g, r3))
其中:
、i
、r1
、r2
都是对总体中向量的引用,没有一个向量与另一个向量相等r3
- F是[0,1.5]范围内的随机常数
V
(突变载体)与目标载体(X(g,i)
)的元素重组以构建试验载体u(g+1,i)
。选择过程从试验向量和目标向量中选择更好的候选者(有关更多详细信息,请参阅下面的参考文献)
这种方法的有趣之处在于:
- 你不必重新设计代码。你需要一个不同的变异/重组算子,并且(也许)你必须将一些实数转换成整数,但它简单而快速李>
- 对于约束管理,您可以采用答案中描述的技术李>
- DE已被证明对大量优化问题有效,并且似乎适合您的问题
参考资料:
- 和一个老的(由肯尼斯·普莱斯和雷纳·斯托恩)作为介绍李>
- 有关更多详细信息和许多代码示例
[173,23,49,85]
是4个仓库的Qi,我将其视为一条染色体。交叉从一个这样的染色体到另一个这样的染色体的一些子列表。在变异时,我将整数转换成二进制,然后翻转一些位,再转换回整数。啊,你认为变异和交叉只发生在位级别。没必要。例如,变异算子可以是Qi->Qi+rand(-10,10)或Qi->Qi*exp(rand(-1,1))。另外,我认为你的气应该是漂浮的。最后,交叉可以(应该?)在向量索引级别完成。一个新的色氨酮只是从一个母体或另一个母体中选择的Q的混合物。