首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Numpy的MultiPoint交叉

基于Numpy的MultiPoint交叉
EN

Stack Overflow用户
提问于 2018-11-20 17:06:10
回答 1查看 959关注 0票数 1

我试着用numpy对遗传算法进行交叉。我用父母1和父母2分割了人口。

代码语言:javascript
复制
population = np.random.randint(2, size=(4,8))
p1 = population[::2]
p2 = population[1::2]

但我无法找出任何蓝精灵或矮胖的命令来做一个多点交叉的父母。其概念是将ith row of p1随机地与ith row of p2交换一些位。

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 19:10:55

我认为你想从p1和p2中随机选择,逐个细胞。

为了更容易理解,我将p1更改为10到15,p2更改为20至25。在这些范围内随机生成p1和p2。

代码语言:javascript
复制
p1
Out[66]: 
array([[15, 15, 13, 14, 12, 13, 12, 12],
       [14, 11, 11, 10, 12, 12, 10, 12],
       [12, 11, 14, 15, 14, 10, 13, 10],
       [11, 12, 10, 13, 14, 13, 12, 13]])

In [67]: p2
Out[67]: 
array([[23, 25, 24, 21, 24, 20, 24, 25],
       [21, 21, 20, 20, 25, 22, 24, 22],
       [24, 22, 25, 20, 21, 22, 21, 22],
       [22, 20, 21, 22, 25, 23, 22, 21]])

In [68]: sieve=np.random.randint(2, size=(4,8))
In [69]: sieve
Out[69]: 
array([[0, 1, 0, 1, 1, 0, 1, 0],
       [1, 1, 1, 0, 0, 1, 1, 1],
       [0, 1, 1, 0, 0, 1, 1, 0],
       [0, 0, 0, 1, 1, 1, 1, 1]])
In [70]: not_sieve=sieve^1  # Complement of sieve

In [71]: pn = p1*sieve + p2*not_sieve

In [72]: pn
Out[72]:
array([[23, 15, 24, 14, 12, 20, 12, 25],
       [14, 11, 11, 20, 25, 12, 10, 12],
       [24, 11, 14, 20, 21, 10, 13, 22],
       [22, 20, 21, 13, 14, 13, 12, 13]])

当筛子为1时,青少年的数字来自p1;当筛子为0时,20岁的数字来自p2

这也许可以使效率更高,但这是您期望的输出吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53398027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档