[PYTHON] Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen

Einführung

Ich habe versucht, mit OpenAI Gym ein Umfeld zu schaffen, um das Lernen von Othello zu stärken. Ich hoffe, es wird hilfreich für diejenigen sein, die in Zukunft ein Umfeld für verbessertes Lernen schaffen möchten. Der Lernalgorithmus ist nicht implementiert. Ich werde von nun an lernen. Klicken Sie hier für den Code https://github.com/pigooosuke/gym_reversi

Standardmäßig enthält gym / envs verschiedene Lernumgebungen. Übrigens gibt es im Brettspielsystem Go und Hex. Dieses Mal habe ich es mit Bezug auf diese Codes erstellt.

Erstellungsverfahren

  1. Erstellen Sie eine originelle Lernumgebung unter gym / envs /
  2. Registrieren Sie die erstellte Umgebung in gym / envs / \ _ \ _ init \ _ \ _. Py mit dem Standardwert Es wird der Fluss sein.

Das erstellte Env kann wie folgt aufgerufen werden.

import gym
env = gym.make('Reversi8x8-v0')

Env-Datei

Klassenbeschreibung

Erstellt Klasse ReversiEnv Grundsätzlich ist es notwendig, Code zu schreiben, der sich auf 5 Methoden in Env konzentriert. _step Erhöhen Sie die Anzahl der Schritte um eins (Geben Sie die Hand des Spielers und des Gegners aus und prüfen Sie, ob das Spiel beendet ist.)

_reset Laden Sie die Standardeinstellungen von Env (Laden des Bretts, erster und zweiter Angriff usw.)

_render Veranschaulichen Sie den Status von Env (Bild, RGB, Text sind festgelegt) (Zeigt den Status der Steine auf dem Brett an.)

_close Verwerfen Sie alle Env-Informationen (Diesmal nicht verwendet)

_seed Wird verwendet, um die Aktion durch zufälligen Startwert zu bestimmen (Aufbau)

Klasse init

Der Anfangswert ist player_color: Spielersteinfarbe (zuerst schwarz) Gegner: Strategie des Gegners (diesmal zufällig) Beobachtungstyp: Statuskodierung (unnötige Einstellungen? Vielleicht können Sie sie löschen. Erklärung, dass der Status von numpy3c verwaltet wird. Ich habe ihn vorerst verlassen) illegal_place_mode: Strafen für Fehlspiele (Verlieren usw.) board_size: Boardgröße (diesmal 8)

Ist eingestellt.

action Aktion entscheidet, welche Aktion gegen Env. Da es sich um ein 8x8-Brett handelt, ist 0-63 die Position des Stürmers, 64 das Ende und 65 der Pass. Es ist ein Bild, um die Ergebnisse des Verstärkungslernens im Aktionsteil einzuführen

done Später im Schritt müssen Sie überprüfen, ob das Spiel als Ergebnis dieses Schritts beendet ist.

reward Die Bewertungsmethode ist so eingestellt, dass sie 1, -1 gewinnt oder verliert.

Bestätigung des Spielendes

def game_finished(board):
    # Returns 1 if player 1 wins, -1 if player 2 wins and 0 otherwise
    d = board.shape[-1]

    player_score_x, player_score_y = np.where(board[0, :, :] == 1)
    player_score = len(player_score_x)
    opponent_score_x, opponent_score_y = np.where(board[1, :, :] == 1)
    opponent_score = len(opponent_score_x)
    if player_score == 0:
        return -1
    elif opponent_score == 0:
        return 1
    else:
        free_x, free_y = np.where(board[2, :, :] == 1)
        if free_x.size == 0:
            if player_score > (d**2)/2:
                return 1
            elif player_score == (d**2)/2:
                return 1
            else:
                return -1
        else:
            return 0
    return 0

Fehlergeschichte

Zuerst habe ich überhaupt keine Regeln festgelegt, ich habe 0-63 in jedem Status in Aktion gesetzt (ich kann überall Steine setzen) und versucht, die Regeln selbst zu lernen, aber es konvergierte, indem ich den ersten und zweiten Zug lernte Ich konnte nicht gut lernen, weil ich den Wert des Handelns einschränkte.

Überprüfen Sie die Kandidaten für das Platzieren von Steinen

python


def get_enable_to_actions(board, player_color):
    actions=[]
    d = board.shape[-1]
    opponent_color = 1 - player_color
    for pos_x in range(d):
        for pos_y in range(d):
            if (board[2, pos_x, pos_y]==0):
                continue
            for dx in [-1, 0, 1]:
                for dy in [-1, 0, 1]:
                    if(dx == 0 and dy == 0):
                        continue
                    nx = pos_x + dx
                    ny = pos_y + dy
                    n = 0
                    if (nx not in range(d) or ny not in range(d)):
                        continue
                    while(board[opponent_color, nx, ny] == 1):
                        tmp_nx = nx + dx
                        tmp_ny = ny + dy
                        if (tmp_nx not in range(d) or tmp_ny not in range(d)):
                            break
                        n += 1
                        nx += dx
                        ny += dy
                    if(n > 0 and board[player_color, nx, ny] == 1):
                        actions.append(pos_x*8+pos_y)
    if len(actions)==0:
        actions = [d**2 + 1]
    return actions

Recommended Posts

Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe versucht, mit Raspeye + Tact Switch eine Schaltfläche für Slack zu erstellen
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Ich habe versucht, Othello AI zu machen, dass ich 7,2 Millionen Hände durch tiefes Lernen mit Chainer gelernt habe
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe mit ChainerRL Deep Enforcement Learning (Double DQN) ausprobiert
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Implementierung ~
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, KI für Smash Bra zu machen
[Mac] Ich habe versucht, das Lernen mit Open AI Baselines zu stärken
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Battle Edition ~
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich habe einen einfachen RPA für die Anmeldung mit Selen ausprobiert
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (② Registrieren Sie die Umgebung im Fitnessstudio).
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Ich habe versucht, mit AI kreative Kunst zu machen! Ich habe eine Neuheit programmiert! (Artikel: Creative Adversarial Network)
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Mayungos Python Learning Episode 3: Ich habe versucht, Zahlen zu drucken
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!