遗传算法中39位编码染色体交叉操作方案咨询(救护车选址)
救护车选址遗传算法交叉操作的可行优质方案
针对你的二进制编码(39位,恰好3个1)的交叉需求,核心要保证交叉后子代仍满足恰好3个1的约束,同时尽可能保留父代的有效信息,以下是几种可行的优质方案:
1. 基于「选中位置集合」的交叉(推荐)
因为你的编码本质是选中位置的集合,直接对位置索引操作更高效:
- 提取父代1的选中位置:{1,2,3},父代2的选中位置:{37,38,39}
- 采用部分匹配交叉(PMX)变种:随机从两个父代中选取若干位置交换,比如选1个位置交换,得到子代如{1,2,37}、{3,38,39};或者选2个位置交换,得到{1,38,39}、{37,2,3}
- 优势:完全符合约束,且能混合两个父代的选址区域,避免陷入局部最优
2. 带约束修复的单点/多点交叉
如果坚持对二进制串操作:
- 执行常规单点交叉,比如在第19位和20位之间交叉,得到两个初始子代:
- 子代1:
111000000000000000000000000000000000111(6个1,违反约束) - 子代2:
000000000000000000000000000000000000000(0个1,违反约束)
- 子代1:
- 修复步骤:对多1的子代,优先保留父代各一半的1(比如保留父代1的2个1+父代2的1个1),得到
110000000000000000000000000000000000100(选中1、2、37);对少1的子代,随机补充来自两个父代区域的1,保证子代兼具两边特征
3. 均匀交叉的约束适配
- 随机遍历每一位,以50%概率取父代1或父代2的位,统计子代中1的数量
- 若数量≠3则微调:多于3个时删除随机多余的1;少于3个时在0的位置随机补1,优先保留来自两个父代的1,确保子代混合两边的选址策略
最优方案选择
优先选择基于位置集合的交叉,它无需修复就能直接满足约束,还能精准混合父代的选址逻辑,更适配救护车选址场景——既不会破坏「选3个点」的硬约束,又能有效探索不同区域的组合可能性。
内容的提问来源于stack exchange,提问作者user13373167
相关产品推荐
相关产品推荐

