2D двоичная строка pyevolve

#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 , происходит сбой.
как это может стать возможным? (много проверок)

Заранее спасибо.