Jungla

sztuczna-inteligencja

(Kacper Kulczak) #1

Co my właściwie mamy zrobić :?. Ja zrozumiałem to w ten sposób:
Za każdym razem , gdy mam zdecydować o wyborze ruchu mogę rozgrywać losowe gry, z tymże w sumie mogę zrobić około 20000 ruchów.

def runGame(board):
    steps = 0
    while not board.isEnd():
        moves = board.aviableMoves()
        m = random.choice(moves)
        board.executeMove(m)
        steps += 1
    return board.getWinner(), steps


def randomAgent(board):
    moves = board.aviableMoves()
    d = {i: 0 for i in range(len(moves))}
    steps, i = 0, 0
    while steps < 20000:
        newBoard = Board(fromBoard=board)
        newBoard.executeMove(moves[i])
        winner, gameTook = runGame(newBoard)
        d[i] += 1 if winner == board.player else -1
        i = (i + 1) % len(moves)
        steps += gameTook
    choosenIndex = max([(v, k) for k, v in d.items()])
    return moves[choosenIndex[1]]

Działa to strasznie wolno (kilkadziesiąt sekund na ruch) i jest w dodatku beznadziejne…


(Michał Martusewicz) #2

Wydaje mi się że tak top powinno działać.
A próbowałeś po przegranej grze zamiast ustawiać -1, po prostu odjąć jeden?


(Kacper Kulczak) #3

Znaczy, nie działa w tym sensie że Agent bazujący na losowych grach jest bardzo słabym graczem. Dzisiaj się dowiedzialem, że nie tylko u mnie.


(Michał Martusewicz) #4

Ale tak ma być?


(Kacper Kulczak) #5

Do takiego wniosku doszliśmy.


(Michał Martusewicz) #6

Trochę bez sensu ten pół losowy agent. Nastawiałem się na pisanie nie wiadomo jakiej heury, a tu zwykły rush B działa powalająco :stuck_out_tongue:


(Maksymilian Zawartko) #7

Jak to jest z tygrysem/lwem i skakaniem nad jeziorem?
Bez%C2%A0tytu%C5%82u
Czy w takiej sytuacji tygrys może wejść na wodę? I czy tylko wrogi szczur blokuje tygrysa (tak jak na liście), czy przyjazny też (tak jest np. na wiki)?


(Kacper Kulczak) #8

Myśle że przynależność szczura do drużyny nie ma znaczenia. Jako że tygrys nie wchodzi na wodę tylko ja przeskakuje, tygrys z obrazka nie może przeskoczyc przez staw.


(Maksymilian Zawartko) #9

Ale dobrze rozumiem, że tygrys w jednym ruchu może poruszyć się tylko o 1 pole? Czy w takiej sytuacji jak na obrazku, gdyby nie było szczura, to tygrys się rusza od razu o 3 pola?


(Kacper Kulczak) #10

O 3 pola. Przeskakuje cały staw.


(Michał Martusewicz) #11

Tygrys i lew mogą skakać przez stawy (aby wykonać skok bierka musi “tak jakby” wejść na staw i następnie poruszać się w tym samym kierunku aż do osiągnięcia pola niebędącego stawem)

To moim zdaniem bezpośrednio oznacza, że tygrys i lew mogą jednym ruchem przeskoczyć staw.


(Maksymilian Zawartko) #12

Zmyliło mnie to:

bierka musi “tak jakby” wejść na staw i następnie poruszać się w tym samym kierunku

Myślałem, że skok może trwać kilka tur.