我在python 3中解决了遗传算法的问题。我还没有完成完整的代码。每当我完成它时,我会测试一部分代码。
目前我遇到了错误的说法:
TypeError:'<' 'part'和'part'实例之间不支持
有趣的是这个错误并不总是显示出来。有时代码运行平稳并显示所需的输出,但有时会显示此错误。
这是什么原因?请帮我。我附加代码和错误消息。我正在使用PyCharm。
import random
class part():
def __init__(self, number):
self.number = number
self.machine_sequence = []
def add_volume(self, volume):
self.volume = volume
def add_machine(self, machine_numbers):
self.machine_sequence.append(machine_numbers)
def create_initial_population():
part_family = []
for i in range(8):
part_family.append(part(i))
part_population = []
for i in range(6):
part_population.append(random.sample(part_family, len(part_family)))
for i in part_population:
for j in i:
j.add_volume(random.randrange(100, 200))
return part_population
def fitness(part_family):
sum_of_boundary = []
for i in range(0, 8, 2):
sum_of_boundary.append(sum(j.volume for j in part_family[i:i + 2]))
fitness_value = 0
for i in range(len(sum_of_boundary) - 1):
for j in range(i + 1, len(sum_of_boundary)):
fitness_value = fitness_value + abs(sum_of_boundary[i] - sum_of_boundary[j])
return fitness_value
def sort_population_by_fitness(population):
pre_sorted = [[fitness(x),x] for x in population]
sort = [x[1] for x in sorted(pre_sorted)]
for i in sort:
for j in i:
print(j.volume, end = ' ')
print()
return sort
def evolve(population):
population = sort_population_by_fitness(population)
return population
population = create_initial_population()
population = evolve(population)
错误消息:
输出是(每次随机化):
答案 0 :(得分:14)
鉴于class NeuralNetwork():
def __init__(self, inputs, hidden1, hidden2, hidden3, outputs, alpha,it_1,it_2,it_3,it_4,it_5):
....
self.distance1 = [alpha,hidden1,it_1,'train',0,0,0,0,0]
self.distance2 = [alpha,hidden1,it_1,'test',0,0,0,0,0]
self.distance3 = [alpha,hidden1,it_1,'dist',0,0,0,0,0]
self.distance4 = [alpha,hidden1,it_2,'train',0,0,0,0,0]
self.distance5 = [alpha,hidden1,it_2,'test',0,0,0,0,0]
self.distance6 = [alpha,hidden1,it_2,'dist',0,0,0,0,0]
self.distance7 = [alpha,hidden1,it_3,'train',0,0,0,0,0]
self.distance8 = [alpha,hidden1,it_3,'test',0,0,0,0,0]
self.distance9 = [alpha,hidden1,it_3,'dist',0,0,0,0,0]
self.distance10 = [alpha,hidden1,it_4,'train',0,0,0,0,0]
self.distance11 = [alpha,hidden1,it_4,'test',0,0,0,0,0]
self.distance12 = [alpha,hidden1,it_4,'dist',0,0,0,0,0]
self.distance13 = [alpha,hidden1,it_5,'train',0,0,0,0,0]
self.distance14 = [alpha,hidden1,it_5,'test',0,0,0,0,0]
self.distance15 = [alpha,hidden1,it_5,'dist',0,0,0,0,0]
是包含商品pre_sorted
的列表列表,只要将两个子列表与相同的[fitness, part]
进行比较,就会出现这种情况。
Python按字典顺序列出排序,并按元素从左到右进行比较,直到找到不匹配的元素。在您的情况下,仅当两个部分的适合度相同时才访问第二个元素(fitness
)。
part
=&gt;不会比较[0, part0] < [1, part1]
和part0
,因为适应性已经不同了。part1
=&gt; 确实比较[0, part0] < [0, part1]
和part0
,因为健康状况相同。建议1:
仅按健身排序:part1
建议2:阅读functools.total_ordering
给予sorted(pre_sorted, key=operator.itemgetter(0))
总订单的文档:
part
是的,排序列表列表似乎是错误的。内部元素可能更好地是元组,因此您不会意外地修改内容。
答案 1 :(得分:2)
所以pre_sorted
是一个包含[int, part]
元素的列表。当您对此列表进行排序并且具有两个具有相同整数值的元素时,它会比较part
值以尝试确定哪个先行。但是,有些人没有确定零件是否小于零件的功能,因此会抛出该错误。
尝试添加功能__le__(self, other)
以订购部件。