#python #multidimensional-array #pyevolve
#python #многомерный массив #pyevolve
Вопрос:
Я новичок в pyevolve и GA в Python.
Я пытаюсь создать 2D двоичный массив, представляющий совпадения. Что-то вроде этого:
A B C
1 1 0 0
2 0 1 0
3 1 0 0
4 0 0 1
Моя цель — иметь только один «1» в каждой строке, а «1» в массиве должно быть равно количеству строк. Одно число может быть сопоставлено только с одной буквой, но буква может быть сопоставлена с несколькими числами.
Я написал этот код в функции вычисления
def eval_func(chromosome):
score = 0.0
num_of_rows = chromosome.getHeight()
num_of_cols = chromosome.getWidth()
# create 2 lists. One with the sums of each row and one
# with the sums of each column
row_sums = [sum(chromosome[i]) for i in xrange(num_of_rows)]
col_sums = [sum(x) for x in zip(*chromosome)]
# if the sum of "1"s in a row is > 1 then a number (1,2,3,4) is matched with
# more than one letter. We want to avoid that.
for row_sum in row_sums:
if row_sum <= 1:
score = 0.5
else:
score -= 1.0
# col_sum is actually the number of "1"s in the array
col_sum = sum(col_sums)
# if all the numbers are matched we increase the score
if col_sum == num_of_rows:
score = 0.5
if score < 0:
score = 0.0
return score
Кажется, работает, но когда я добавляю некоторые другие проверки, например, если 1
находится в A
, 2
не может быть в C
, происходит сбой.
как это может стать возможным? (много проверок)
Заранее спасибо.