Я работаю над некоторым ИИ на python (язык, на котором я на самом деле плохо разбираюсь), чтобы решить проблему с N ферзями, и мой подход заключается в том, чтобы представить доску в виде массива из N по N битов, а затем соединить ее с функцией пригодности
Часть, с которой мне нужна помощь - это функция пригодности, у меня есть «Record var», правильное решение должно вернуть 100, и каждая ошибка будет уменьшать результат на 1
, если вы этого не сделаетезнаете, в чем проблема N quens: вот подробное объяснение
class N_Queens:
def __init__(self, numeroN):
assert numeroN > 3, "El numero N (%i) ha de ser mayor de 3." % numeroN
self.numeroN = numeroN
def split_list(self, alist, wanted_parts=1):
...this works...
def fitness(self, cromosoma):
board = self.split_list(cromosoma, self.numeroN)
record = 100
for i in range(len(board)):
if board[i] > 1:
record = record - 1
for i in range(len(board)):
vertical = []
for j in range(len(board[i])):
vertical.append(board[i][j])
...And i`m stuck
return record
У некоторого кода, который я нашел, была эта интересная функция, но я не уверен, будет ли она работать с моим кодом
def positionIsAtacking(self, cromosoma, X, Y):
for i in range(len(cromosoma)):
# Check Y
if (cromosoma[i] == Y):
return True
# Check Diagonals
if (cromosoma[i] - Y == i - X):
return True
if (cromosoma[i] - Y == X - i):
return True
return False