Mühle Spiel inklusive KI

  • Thread Starter Thread Starter
  • #41
Ich muss zugeben, dass ich das Paper von dem Gasser nur in sofern verstehe, dass er in einem Programm alle möglichen Spiele erspielen lassen hat und zuvor unlogische bzw. unmögliche Spielverläufe und Spielstellungen entfernt hat.

Die Stategien die in der PDF beschrieben sind, sind zwar hilfreich um eine SEHR starke KI zu schreiben, doch durch viele Sonderfälle wird das Analysieren der Stellung dadurch auch deutlich aufwändiger.
Ich werde mir zwei oder drei verschiedene Varianten meiner KI entwerfen. Eine dumme ála Zufallsprinzip und eine mit den zuvor genannten Priorisierungen. Das ist aufwändig genug.
 
Zufallsprinzip taugt absolut nichts, das habe ich auch schon durch. Jedenfalls fordert einen das nicht. ;)

Bzw. das wende ich derzeit an, die KI ist das Kernstück was mir sorgen bereitet, auf der einen Seite soll sie nicht "nur schlau" agieren damit der Spieler Chancen hat, auf der anderen Seite soll sie nicht zu dumm sein, damit das Spiel nicht langweilig wird.

Habe für mich überlegt das ich Schwierigkeitsstufen einbaue, damit die KI verschiedene Wege gehen kann. Das bin ich aber am testen. Zumindest die Grundidee.

Ich meine, ein nur perfekter Gegenspiele lässt einem selbst auch keine Variationen, das muss man ein wenig Timen, zumindest bei Beginn des Spiels in der Setzphase, die ja auch sehr entscheident ist.

Aber ich hab das auch noch nicht durchdacht, das Grundspiel war jetzt trotz einiger "Fragen" am UI und die Grundlogik schnell programmiert, aber die KI kostet mich nerven ;)
 
  • Thread Starter Thread Starter
  • #43
Also das Grundspiel hatte ich ja bereits sehr früh fertig. Seit dem habe ich mich aber erst heute noch einmal ca. eine Stunde rangesetzt. Jetzt habe ich eine "dumme" KI - diese sucht einfach nur einen möglichen, zufälligen Zug und übergibt ihn als Eingabe an das Hauptprogramm.
Ich befürchte, dass ich bis zum Einreichtermin nicht mehr genügend Zeit habe eine KI zu programmieren, die einigen Regeln folgt, um wenigstens einen schlechten Mühle-Spieler darzustellen.
 
Also ich wollte es so machen, das ich nach einem Bewertungssystem mit Punkten gehe. Ich habs zum Teil auch schon umgesetzt, zumindest in der Setzphase, aber das ist doch etwas komplizierter als angedacht.

Ich glaube die Grundidee den Feldzustand zu bewerten ist aber nicht verkehrt.

Mal mein Gedanke wie ich es umsetzen wollen würde:
- eine gegnerische Belegung in einer, möglichen, eigenen Mühlereihe zieht Punkte ab
- eigene Feldbelegungen ziehen Punkte hinzu

Knotenpunkte könnte höher bewerten, nicht zwingend aber, um Variation im Spiel zu erlauben nicht zwingend immer als bester Zug.
Nach dieser generellen Einschätzung hat man ungefähr die Idee wo und wie Mühlen gebildet werden könnten bzw. kann man gewisse Feldreihen/Felder priorisieren.

Was dann hin zu kommt und da bin ich mir nicht sicher wie man es am besten macht, die möglichen Felder nochmals separat zu bewerten, also Basispunkte + Punkte für die Position die die umliegenden Felder mit in eine Wertung mit einbeziehen.

Klingt nur sau kompliziert :p

Das umfasst aber nur die Setzphase, wie auch das eigene Bilden von Mühlen, andere Gesichtspunkte die Jester angesprochen hat werden so nicht behandelt. Aber man könnte dies mit einer "gefahren Liste" wahlweise mit einschließen lassen, basierend auf Faktoren wie eigenen Steinen auf dem Brett oder ob es eine Zwickmühle gibt, bzw. wenn man es ganz ausgeklügelt machen will, ob der Spieler etwas vorbereitet - letzteres empfinde ich aber für eine "normale" KI nicht grundlegend und ist irgendwo schon ein sehr fortgeschrittenes Feature wenn man etwas brauchbares auf die Beine gestellt hat.

Für mich ist und bleibt das vernetzen der Informationen ein Problem, habe das was ich gestern ausgearbeitet habe schon wieder verworfen.

Meiner Meinung nach aber kann man alles bis auf die Zwickmühle behindern/verhindern auch zufallsbasiert erstellen lassen, damit die Züge nicht nach einem fixen Schema ablaufen. Das mache ich zum Beispiel bei dem ersten Spielstein der vom Computer auf das Spielfeld platziert wird, um zu verhindern das immer die gleiche "Start"kombination oder eine fixe Reaktion auf den Spieler getätigt wird.

*Nachtrag:

Also das mit dem Gewichten funktioniert eigentlich schon ganz gut, nur hab ich aktuell das bereits genannte Problem, irgendwie zwischen "intelligentem" Setzen und dem Bilden einer eigenen Mühle, und nicht nur den Gegenspieler zu blockieren, zu trennen.

Ich versuche da etwas Zufall einfließen zu lassen, so das die Chance eine Mühle direkt zu blockieren nicht immer genutzt wird, das bringt auch etwas Abwechslung in die Phase des Spiels.

Das Material von Muehlespieler kann man verwenden, aber ich finde das zu Gewinnoptimiert und gerade die Setzphase entscheidet zum Großteil ob man nicht nur droht, sondern auch Verteidigt. Ein Doppelangriff wie geschildert ist somit nicht immer die erste Wahl. Aber es ist leider auch etwas sehr vorhersehbar, wie die Züge gemacht werden, wenn man nicht noch ein wenig Zufall einfließen lässt, da die Knoten ein gewisses "Grundgewicht"/Priorität haben und an zweiter Stelle natürlich versucht wird auf den Spieler zu reagieren - was auch andere Probleme verursacht.

Habe mir überlegt, ich werde, vermutlich, da ich keine Zeit habe alles in der Zeit fertigzustellen, den Code nach dem Abgabetermin zu veröffentlich.
Sollte ich wieder erwartend doch noch fertig werden und es tatsächlich einsenden, wird der Termin nur verzögert, da ich bisher nicht gelesen habe das der Quellcode nicht veröffentlich werden darf (in den Teilnahmebedinungen).
 
Zuletzt bearbeitet:
So, nach 10-tägiger Coding-Abwesenheit hab ich heute das 2-Spieler-Spiel fertig programmiert.
Jetzt kommt das Herzstück, die KI. Da werde ich mich etwas schwer tun, da ich wenig Erfahrung mit KI-Programmierung habe.
Muss mich erstmal einlesen, welche Strategie, welcher Algorithmus sinnvoll ist.

Nur noch 10 Tage!
 
  • Thread Starter Thread Starter
  • #47
Ich habe nun meine Dumme KI-Version eingereicht. Im Code ist entsprechend vorbereitet, dass die Version noch erweitert werden kann, aber die Zeit lässt es gerade nicht zu, da noch eine KI mit einer gewissen Strategie agieren zu lassen.
 
Geht mir leider genau so.
Hab bis jetzt nur eine Zufalls-KI. Ich versuche, ob ich es zumindest noch schaffe, eine zu basteln, die erkennt, dass der Gegner oder sie selbst eine Mühle bauen kann und dementsprechend handelt... .
 
  • Thread Starter Thread Starter
  • #49
Ich denke, wenn ich heute wieder eine Nachtschicht einlege, werde ich ebenfalls noch eine ganz einfache "Intelligente" KI bauen, die einfach die Zufallszüge erst macht, wenn sie ein paar andere Züge überprüft hat...
Das sollte in etwas über einer halben Stunde getan sein - das kann vielleicht direkt vorm Schlafen gehen noch klappen. Aber sonst habe ich bis Mittwoch keine Zeit mehr.
 
Schön das ihr noch dabei seid. :T

Bin gerade meinen Code durchgegangen und hab fleißig kommentiert... und noch etwas an der KI gefeilt - im Setzen ist sie jetzt gar nicht soooo schlecht, aber auch nicht perfekt.
Tue mir da auch verdammt schwer mit, aber ich glaube meine Idee ist auch nicht 100% ganz DIE richtige, zumindest muß man das in mehrere Aspekte unterteilen, glaube ich.
Also mal das man selbst Priorisiert Mühlen zu bauen, Fallen zu stellen, den Gegner zu behindern und was es noch für kleine "Unterszenarien" dabei gibt.

Ich werde aber definitiv abgeben - wenn man sich schon einmal die Arbeit macht!
Vielleicht bekomme man noch gutes Feedback, keine Ahnung wie das da läuft, aber ganz umsonst soll die Zeit auch nicht gewesen sein. ;)

Also, egal wie weit ihr noch kommt, gebt auf jeden Fall ab! :cool:
Es ist noch Zeit bis zum 31ten.

Und hinterher wenn der Spuk vorbei ist, können wir ja mal unseren Code aneinander prüfen - ob man das hier macht oder nicht, kann man ja dann noch entscheiden.
Wegen Privatsphäre und so ;)
 
  • Thread Starter Thread Starter
  • #51
Vielleicht bekomme man noch gutes Feedback, keine Ahnung wie das da läuft, aber ganz umsonst soll die Zeit auch nicht gewesen sein. ;)
Als ich damals bei einer anderen Code-Competition was abgegeben habe, habe ich zumindest 5 Sätze als Feedback bekommen so ala:
Schön war, dass ... gut funktioniert. Zudem ist das ... dir besonders gelungen. Leider hat ... gefehlt, wodurch es angenehmer gewesen wäre ...
Also ein bisschen Feedback gibt es - allerdings nicht direkt zum Code (zumindest damals nicht)
 
Definiere "netzwerkfähig"... soll das von vernetztem Denken kommen?

Meine nicht, die reagiert nur stupide auf die aktuelle Situation ohne sich nen "Plan" zurechtgelegt zu haben. :)
 
Die Aussage war ungenau falsch.
Wenn sowieso jeder eine Mühle-KI schreibt, könnte man sie auch gegeneinander antreten lassen.

So ein Mühle-Server sollte sich recht schnell programmieren lassen.
Der Server muss ja lediglich prüfen, ob die gewünschten Züge valide sind und abwechselnd Züge der verbundenen Spieler (KIs) annehmen.

Wäre doch mal eine Idee.
 
@Roin
Eben abgegeben.... schauen wir mal was kommt! ;)

@virtus
Wäre eine nette Idee, ja. Aber das setzt voraus das genug Leute eine KI - Ready haben.
Und du mußt dann mindestens Javascript ausführen können und im Speicher den State halten... oder EXE Dateien aufrufen und geöffnet halten die wie ein Client auf die befehle des Servers warten... und auch dort den State von Aufruf zu Aufruf halten.

Wenn du das für umsetzbar hälst - mach ruhig mal :)
 
So, auch noch abgegeben, Mann, die wollten ja einiges wissen von einem... hätte ich ne halbe Stunde später angefangen, hätte das nicht mehr zur Abgabe gereicht :-/
 
Stimmt, hat mich auch etwas irritiert - aber hab die "Basics", um auf die % zu kommen, angefangen auszufüllen - hoffentlich werde ich deßhalb nicht für den Talentpool geblacklistet ;)
 
  • Thread Starter Thread Starter
  • #58
Eben abgegeben.... schauen wir mal was kommt! ;)
Ich habe es leider nicht mehr geschafft meine KI zu verbessern - die haben jetzt nur die Zufalls-KI von mir. Jetzt ist es eh zu spät.

Und du mußt dann mindestens Javascript ausführen können und im Speicher den State halten... oder EXE Dateien aufrufen und geöffnet halten die wie ein Client auf die befehle des Servers warten... und auch dort den State von Aufruf zu Aufruf halten.
stimmt nicht unbedingt. Es würde reichen, wenn jedes KI-Programm die Züge aus einer Datei lesen und anschließend den berechneten Zug in diese Datei schreiben kann. Natürlich müsste man dann die Schreibweise der Züge der KIs untereinander abstimmen.
Dann könnte man die KIs auf dem Server laufen lassen, ein Spiel (also eine Datei) zuweisen und dann gucken die halt in einer Schleife immer in die Datei rein, ob die am Zug sind oder nicht und warten sonst einfach.

Sollte machbar sein - ich kann dafür meinen Code zur Verfügung stellen - würde auch gerne die Ergebnisse sehen, allerdings möchte ich dafür vorerst keine weitere Zeit einplanen.
 
Wie viele KIs wurden denn bisher programmiert?

Textfiles zum Datenaustausch halte ich für ungeeignet.
Ich würde eine Socketverbindung vorschlagen. Websockets sollten in den aller meisten Programmiersprachen recht einfach zu verwenden sein.
 
Zurück
Oben