2016-05-22 8 views
1

Angenommen, ich habe mehrere AI-Programme für ein bestimmtes Brettspiel, die alle in verschiedenen Sprachen implementiert sind und sie ohne menschlichen Vermittler gegeneinander antreten lassen wollen. Wie würde ich darüber gehen?Technik für die Herstellung von Brettspiel-AIs konkurrieren gegeneinander?

Ich kann mir vorstellen, dass dies für KI-Forscher, Bastler, Spiel-Wettbewerben ist ein häufiges Problem, usw.

Gibt es eine gemeinsame Architektur? Vielleicht laufen die AIs als separate Prozesse und kommunizieren über Sockets mit einem zentralen "board" -Prozess.

Antwort

3

Ich glaube nicht, dass es ein gemeinsames Protokoll gibt. GGTP, a General Gaming Text Protocol von Michel Quenault und Tristan Cazenave ist sehr interessant, weil die Schwierigkeiten beschrieben, die Sie mit der Gestaltung einer allgemeinen Lösung zu beschäftigen haben und viele Referenzen hat aber es ist nicht

  • völlig
  • gut bekannt implementiert

Also müssen Sie auf ad hoc Protokolle zurückgreifen.


Für Chess gibt es die Chess Engine Communication Protocol (aka Xboard/Winboard-Protokoll) und Universal Chess Interface (UCI).

Mit den Jahren ist das Xboard-Protokoll gewachsen und unterstützt nun Standard-Schachspiele mit verschiedenen Schachvarianten, darunter die wichtigsten Schachformen der Welt (Xiangqi, Shogi, Makruk) sowie westliche Varianten.

Beide sind frei, ohne Lizenzgebühren zu verwenden.


Für Go ist es Go Text Protocol (FTP)


Für Kontrolleure/Entwürfe gibt es CheckerBoard API und DamExchange Protocol

1

Sockets sind eine Möglichkeit, aber ich Rohre verwenden. Das Bordprogramm sendet den aktuellen Zustand (als String) durch die AI STDIN und die AI antwortet mit einer Aktion durch STDOUT. Das Brettprogramm aktualisiert den Spielstatus und dieser Prozess wird zwischen den Spielern gewechselt. Ich musste Studenten auf diese Weise mit Java und C konkurrieren. Hier ist die source code für die Platine, wenn Sie wissen wollen, wie man das in C macht. Here ist ein Beispiel-Player in C geschrieben, und here in Java.