在做遗传算法,遇到一点小问题。。
python3吧
全部回复
仅看楼主
level 1
我用矩阵做的种群。想从矩阵中无放回的抽取好进行交叉,所以。。无放回从矩阵抽取怎么写。。想不通了
2021年01月25日 10点01分 1
level 1
附上一个自己弄的,感觉不对,这样只是第一个和第二个交叉,第二个再和第三个
def crossover(M,crossover_rate):
for i in range(len(M)-1):
if(random.random()<0.5):
k1=random.randint(0,len(M[0])-2)#为保证k2一定大于k1,让k2直接从k1之后取
k2=random.randint(k1+1,len(M[0]))#这样就是多点交叉,若k2取了k1,则为单点
temp1=[]#若k1取道最后一位,那k2?
temp2=[]
temp1.extend(M[i][0:k1])
temp1.extend(M[i+1][k1:k2])
temp1.extend(M[i][k2:len(M[i])])
temp2.extend(M[i+1][0:k1])
temp2.extend(M[i][k1:k2])
temp2.extend(M[i+1][k2:len(M[i])])
M[i]=temp1[:]
M[i+1]=temp2[:]
2021年01月25日 11点01分 2
level 11
代码太长,你举个例子?输入输出
2021年01月25日 11点01分 3
啊这,听不太懂,做程序的第15天,能说的再大白话一点不
2021年01月25日 11点01分
哥,别走,救救孩子
2021年01月25日 11点01分
level 11
M,crossover_rate是什么样的数据??crossover_rate你只定义了但代码里没用到。还有想输出什么样的数据
2021年01月25日 14点01分 4
M是一个前面输出的矩阵,这个不是完整的,crossover-rate就是那个0.5.这个地方我改一下。crossover_rate交叉概率,我的本意使想说,先从M二进制矩阵中抽出两行,然后随机一个数,若小于交叉概率,这两行二进制进行多点交叉,之后放在一个暂存文件里,再拿出两行进行判定,直到把整个矩阵拿完无放回
2021年01月26日 05点01分
level 4
我猜你想,假设一组数据,随机拿走两个数据,原来数据就少两个,然后再拿走两个数,原来数据再减少,这个意思?
2021年01月25日 17点01分 5
啊对对对,拿两个出去繁殖
2021年01月26日 05点01分
@Limit无穷小 实现这个就比较简单啊…
2021年01月26日 06点01分
这个,,,我刚开始学,导师要求学,基础很差
2021年01月26日 06点01分
a = random.choice(list) list.remove(a) print(a, list)
2021年01月26日 06点01分
level 1
我在网上找到的无放回的一些方法都是有限几个项,拿一个就remove一个,没有广义性。。就不像个算法样。。。
2021年01月26日 05点01分 6
想出来了没
2021年01月26日 15点01分
哎哎,想出来了,这几天老师催的紧,忘记上来告诉你了,谢谢谢谢
2021年01月30日 13点01分
@啥都会一点😷 私聊你了兄弟
2021年01月31日 05点01分
@Limit无穷小 午觉睡的😂
2021年01月31日 09点01分
1