побитовый подход к задаче фитнес-задачи N Queens в python - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю над некоторым ИИ на 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
...