Я начал работать над python для Ai, и у меня возникли некоторые проблемы:
У меня проблема с n-Queens Вот подробное объяснение проблемы
Фитнес-функция получает массив в виде:
decoded = [3, 1, 2, 5 ... n]
, где элемент соответствует координате X, а индекс соответствует координате Y, т.е. берет координаты из приведенного выше примера:
# [X, Y]
pairCoords = [[3,0], [1, 1], [2, 2], [5, 1], ... [n, z]]
, поэтому у меня есть функция пригодности, которая получает массив, аналогичный первому примеру. Запись var начинается с максимального числа столкновений n * (n-1) и уменьшается с каждым обнаруженным столкновением
def fitness(self, decodedGenes):
record = self.numeroN * (self.numeroN-1)
for y in range(len(decodedGenes)):
if self.positionIsAtacking(decodedGenes, decodedGenes[y], y):
record = record - 1
return record
поэтому в лучшем случае мир возвращает n * (n-1) , а в худшем случае возвращает 0
вспомогательная функция, которую она вызывает, проверяет заданные X и Yкоординирует и возвращает, если есть столкновение, но оно не работает
def positionIsAtacking(self, coords, X, Y):
for i in range(len(coords)):
# Check Y
if (coords[i] == Y):
return True
# Check Diagonals
if (coords[i] - Y == i - X):
return True
if (coords[i] - Y == X - i):
return True
return False
Я пытался изменить параметры, но я не знаю, где искать, я думаю, что вторая функция не работает или, возможно, учаnged x и y