python - 基于统一顺序的交叉实现
问题描述
我正在尝试实现基于统一顺序的交叉,它应该使用随机播放逻辑,例如:
最初的:
a =[5, 1, 4, 6, 7, 8, 2, 3]
b =[6, 7, 5, 2, 8, 3, 4, 1]
随机选择不再变化的位置。剩余的位置用缺失的元素填充,这些元素按照它们在另一个父元素中出现的顺序复制
a' =[ , 7, , 2, 8, , , 1]
b' =[ , 1, , 6, 7, , , 3]
从第二个交叉站点开始,在来自替代父代(其值在初始阶段被后代复制的父代除外)的后代中尚不存在的值按它们出现的顺序输出:
a = [5, 7, 4, 2, 8, 6, 3, 1]
b = [5, 1, 2, 6, 7, 8, 4, 3]
我试图实现这一点,但我的代码无法保存固定索引。
交叉.py
import random
def uniformCrossover(indA, indB):
"""
Your Uniform Crossover Implementation
"""
crossprob = 0.1
size = min(len(indA), len(indB))
for i in range(size):
if random.random() < crossprob:
indA[i], indB[i] = indB[i], indA[i]
return indA, indB
a,b = uniformCrossover([5, 1, 4, 6, 7, 8, 2, 3], [6, 7, 5, 2, 8, 3, 4, 1])
解决方案
推荐阅读
- haskell - QuickCheck 生成器未终止
- vue.js - 如何使用将 Vue 2 $on、$emit 事件总线迁移到 Vue3?
- mysql - 获取最大连续零个数 SQL
- php - 检查日期是否在每个用户的日期范围内
- video - 如何播放应用程序/八进制流视频文件?
- javascript - 要求在 wordpress 中没有定义
- node.js - Docusign 不作废信封
- reactjs - 在完整的 Spring 应用程序中导入 SockJS
- azure - 无法使用 Microsoft Graph API 获取服务主体的登录信息
- oracle - ORA-01722:无效编号 ORA-06512:在“SYS.DBMS_SQL”,第 1721 行 oracle 错误