2017-07-13 78 views
0

我无法弄清楚如何重复这段代码。该代码适用于我正在开发的初始遗传算法函数。我是一个极端的代码业余爱好者,所以如果它是愚蠢的,对不起。 :)如何让遗传算法的这些实现重复?

我觉得我很接近,我有三种代码的变体,这两种变体都不是那里的,但是比较接近(......也许......)。

这里是变化1我的代码

population_size = int(raw_input('Enter a population size:')) 

def make_organism(length): 
    from random import randint 

length = int(raw_input('Enter an organism length:')) 
org = [] 
for i in range(length): 
     var = randint(0, 1) 
     org.append(var) 

new_org = [] 
for length in range(population_size): 
    var_2 = randint(0, 1) 
    new_org.append(var_2) 
    print new_org 

此代码返回正确的人口,但不正确的长度。

例:

Enter a population size: 3 
Enter an organism length: 4 
[0] 
[0, 0] 
[0, 0, 0] 

变化2我的代码:

population_size = int(raw_input('Enter a population size:')) 

def make_organism(length): 
    from random import randint 

length = int(raw_input('Enter an organism length:')) 
org = [] 
for i in range(length): 
     var = randint(0, 1) 
     org.append(var) 

new_org = [] 
for length in range(population_size): 
    var = randint(0, 1) 
    org.append(length) 
    print new_org 

此代码返回正确的人口,但不返回括号任何东西。打印new_org的次数与population_size相同。

例:

Enter a population size: 3 
Enter an organism length: 4 
[] 
[] 
[] 

变化3:

population_size = int(raw_input('Enter a population size:')) 

def make_organism(length): 
    from random import randint 

length = int(raw_input('Enter an organism length:')) 
org = [] 
for i in range(length): 
     var = randint(0, 1) 
     org.append(var) 
print org 

此代码将返回正确长度的代码而不是人口规模是正确的。

例:

Enter a population size: 3 
Enter an organism length: 4 
[0, 1, 0, 1] 

orgs是表示为空列表的生物体。该代码根据位长度生成0和1的随机数字模式,并且应该返回与用户输入群体大小一样多的随机列表。

+1

我认为你的代码的格式是错误的。添加空格以使其正确。 –

+0

空白是正确的,代码工作只是返回错误的输出。如果空白不正确,我会收到语法错误。 – tony

+0

将您在问题中编写的内容复制到编辑器中并编译它会在第一个randint中引发错误。我确定你有什么作品,但是当你复制你的问题时,你并没有保持格式。另外,你在哪里打电话make_organism? –

回答

0

如果这是您所期望

[0, 0, 0, 0] 
[1, 1, 1, 0] 
[0, 0, 0, 1] 

那么我想下面这个简单的代码应该工作,但它可能会重复列出虽然

import random as rd 

pop_size=int(raw_input()) 
org_len=int(raw_input()) 

for i in range(pop_size): 
    org=[] 
    for j in range(org_len): 
     org.append(rd.randint(0,1)) 
    print(org) 

希望这有助于:)

的输出中
0

您可能想要多读一点python,因为看起来您并不知道自己在做什么。但是,你想要做的事很容易。这是我会怎么做的。

from random import randint 

population_size = int(raw_input('Enter a population size:')) 
length = int(raw_input('Enter an organism length:')) 
org = [[randint(0,1) for _ in range(length)] for _ in range(population_size)] 
print "\n".join(map(str, org)) 

通过此行,行

from random import randint 

去进口库随机函数randint。你把它放在你没有调用的函数中,所以我不确定你的代码是如何工作的,但通常这是在文件顶部完成的。

你知道接下来的两行是做什么的,因为我抄袭了你。

org = [[randint(0,1) for _ in range(length)] for _ in range(population_size)] 

这是一个嵌套列表理解。里面的部分生成一个列表,填充所需长度的随机选择的0和1,然后外部部分为人口规模中的每个列表生成该列表。现在你有一些看起来像,长度为4和人口规模3,这样的:

[[1, 0, 0, 1], [0, 0, 0, 0], [0, 1, 1, 1]] 

最后一行只是格式化它打印在单独一行上每个生物体。