我的项目需要帮助。以下是示例数据。
populations = [[1 1]
[1 1]
[1 0]
[1 1]]
score = [0, 4, 0, 6]
avail_res = [4, 4]
代码如下:
chromosome = []
for num in score:
if num <= avail_res[0] and num != 0:
chromosome = populations[score.index(num)]
print(chromosome)
if len(chromosome) > 1:
k = random.choice(chromosome)
chromosome_best = [k[1]]
print(chromosome_best)
else:
chromosome_best = [chromosome]
print(chromosome_best)
目标是在所选染色体中找到最佳染色体。对于上面的示例,由于只有4
(得分索引1)满足代码中的条件,因此应从总体中得出chromosome best = [1 1]
。如果满足条件的得分超过一个,则代码应随机选择best_chromosome。例如,score = [4, 2, 2, 6]
。我的得分中有三个元素满足条件(4、2、2)。现在,在选择总体中的best_chromosome时,代码可以选择更高的一个,即4,并给出相应的总体值。
问题在于,无论何时我尝试为所选的chromosome_best = [1 0]
(仅作为示例)运行代码,我得到的长度都是2
,它对应于1和0。但是我的目的是仅获得length = 1 for [1 0]
和3
,如果染色体是[1 0] [1 1] [1 0]
。这样,我可以使用上面的代码并随机选择。
任何帮助/建议将不胜感激!谢谢!
答案 0 :(得分:0)
我建议将chromosome
设置为列表列表,并可能将其重命名为chromosomes
,以使内容更清楚。
使用chromosome = populations[score.index(num)]
代替chromosomes.append(populations[score.index(num)])
。
这是完整的代码片段:
chromosomes = []
for num in score:
if num <= avail_res[0] and num != 0:
chromosomes.append(populations[score.index(num)])
print(chromosomes)
if len(chromosomes) > 1:
k = random.choice(chromosomes)
chromosome_best = k[1]
print(chromosome_best)
else:
chromosome_best = chromosomes
print(chromosome_best)