KI 4 Gewinnt

Hallo zusammen,

etwas über mich erstmal ich studiere im 3 Semester Wirtschaftsinformatik und bin jetzt nicht grad
der Profi im Programmieren, man kann sagen ich bin ein blutiger Anfänger.

Ich muss bzw. soll für mein FH Projekt das wir in der Gruppe machen eine KI schreiben in Java für das Spiel 4 Gewinnt.

Hab jetzt auch schon ein paar Bücher gelesen und hab viel im Internet recherchiert, aber wirklich weiter komme ich leider nicht ;(. Darum habe ich jetzt beschlossen diesen Post hier zu schreiben. Verstanden hab ich glaube ich schon um was es gehen soll, aber so richtig klick hat es glaub ich noch nicht ganz gemacht.

Ich suche nicht nach fertig geschriebenem oder ähnlichem. Was ich such ist Hilfe jemand der mir sagen kann wie ich dieses Problem anpacken bzw beginnen soll. Ich möchte das schon gerne schreiben können weil ich will ja was lernen.

Vielleicht können mir Leute helfen die mal genau so ahnungslos (hilflos) waren, sich aber dann durch geboxt haben. Irgendwelche Seiten oder Tutorials die helfen können wären auch sehr coool.

Ich hoffe sehr das ich hier Unterstützung und viele Ratschläge/Tipps finden kann und ich bedanke mich schon mal im voraus für jegliche Hilfe die mir angeboten wird :D:D.

Mit freundlichen Grüßen

Ken

Hallo,

hierfür brauchst du keine wirkliche küsntliche Intelligenz.

Um bei vier gewinnt zu gewinnen musst du das minmax problem lösen.

Gruß,

Martin

Was hast du denn bisher schon so gelesen? Bzw. was sind die genauen Fragen? Über sowas wie http://de.wikipedia.org/wiki/Minimax-Algorithmus wirst du ja schon gestolpert sein. Das ganze dann zu sowas wie http://de.wikipedia.org/wiki/Alpha-Beta-Suche aufzubohren könnte ein zweiter Schritt sein. Allgemeiner Tipp: Wenn man bei Websuchen noch ein „AIMA“ dazuschreibt, landet man oft auf Seiten, die mit http://aima.cs.berkeley.edu/ verwandt sind (das ist die Bibel der künstlichen Intelligenz (welch wundervoll ironische Blasphemie :slight_smile: ))

EDIT: Minimax ist keine KI? Ja, das Leid, das unser Intellektik-Prof uns immer geklagt hat: Da arbeiten die KI’ler jahrelang, und sobald sie ein Ergebnis haben, ist das auf einmal keine „Künstliche Intelligenz“ mehr, sondern nur noch irgendein ganz profaner Algorithmus :smiley:

Also zuerst mal ist das natürlich kein einfacher Einstieg in die Programmierung.
Mehr als aus dem Netz zu kopieren wird dir nicht bleiben. Ansonsten mal ein 4-Gewinnt ohne KI programmieren und wenn das alles steht eine KI dazu schreiben. Dann hast du zumindest mal eine Vorstellung davon, wie der Zugriff funktioniert, was die KI ganz konkret für einen Input bekommen soll etc.

Die frage nach KI Programmierung ist natürlich kompliziert, wäre die erste Frage, was definiert eine KI für 4 gewinnt genau?

Theoretisch wäre es möglich einfach per Zufall eine Zelle auszuwählen, die einen Stein bekommt (quasie eine Random KI) die also nur schaut ist der Zug gültig oder nicht.
In einer Verbesserung, kannst du dann die Züge bewerten, vorausschauen, was der Gegner am wahrscheinlichsten macht,…

@Marcinek > Ja das hier der MinMax algorithmus hier reicht hab ich schon erfahren, danke trotzdem :smiley:
@Marco13 > Ja ich hab die Bücher nicht mehr genau im Kopf, weil die hab ich in der Bibliothek gelesen xD und jaa auf die Seiten von Wikipedia bin ich schon gestoßen, aber ich versteh doch nicht soo recht. Was ich da schreiben soll.
@timbeau > Ja der Rest steht solala schon. Von der Gui und dem Spielablauf ist fast alles da nur noch die Logik muss noch richtig her. Also findest du das die KI erst zum Schluss hin soll?

@Unregistred> Jaa das mit dem Zufall haben wir uns auch schon überlegt aber soo gewinnt halt der Computer nicht und jaa das bewerten an sich ist glaub ich noch son Problem das ich hab, bzw nicht richtg verstehe.

Um eine Bewertung machen zu können muss natürlich erstmal etwas vorhanden sein was man bewerten kann. Das kann ein boolean Array mit 2 Dimensionen sein oder ein eigenes Objekt etc. Und der erste Schritt ist es einem Spielstand eine Wertigkeit zuzuordnen. Das kann ganz simpel 1 = “ich kann gewinnen” oder 0=“ich kann nicht gewinnen” sein. Und differenzierter das man wenn man nicht gewinnen kann guckt ob der Gegner gewinnen kann.

Ich versteh des nicht ganz so recht sorri :confused:

[QUOTE=Makenji] Also findest du das die KI erst zum Schluss hin soll?
[/QUOTE]
eine GUI, umständliche Bedienung des Users mit Eingabe oder eben GUI während Tests der KI muss nicht sein, schadet eher,
die Spiellogik an sich muss aber vorher stehen

baue sie soweit dass zwei KIs mit Zufallswahl gegeneinander spielen, regelkonform, Sieg wird erkannt und Spiel beendet,
von dem Stand aus kann man dann neues angehen,
poste dazu hier etwas Code, das wäre überzeugender

das weitere Vorgehen: der Zug eines KI-Spielers gehört in eine Methode, dort statt Zufallsauswahl größere Baustelle anfangen…,
kenne MinMax algorithmus jetzt nicht speziell, vielleicht alle möglichen Züge ausprobieren und jeweils dann wie bewerten? evtl. rekursiv zu Ende führen und …

oh, ich war gedanklich gerade bei Tic Tac Toe, verzweigt genug aber zumindest doch beherrschbar viele Züge,
Rekursion bei 4 Gewinnt gibts wohl nicht…

überhaupt schon alle Themen dazu im Internet abgeschrieben/-gelesen?
Suche: minimax algorithmus “4 gewinnt”
oder auch englisch usw.

Musst dich nicht entschuldigen. Nur dir die Grundlagen aneigenen. Dauert halt etwas aber dann verstehst du die Kommentare hier sicher.

wie ja timbeau geschrieben hat, den Zug bewerten, jedoch wird nur 1 ich kann gewinnen und 0 ich kann nicht gewinnen nicht viel bringen, zwar ein wenig, aber nicht viel.

Verschiedene Wertigkeiten,
einen Stein wo hin zu legen wodurch ich gewinne 1000 punkte
einen Stein so legen das der Gegner nächste Runde gewinnt -1000 Punkte
einen Stein dahin legen, das ich nächste Runde gewinnen kann 500 punkte

Den Stein da hin legen, wo es die beste Punktzahl gibt und dann an den Punktzahlen feilen, bis die KI immer besser wird.
Und um so mehr Züge man in die Zukunft schaut um so besser wird der gewählte Zug. (Gibt ja deutlich weniger mögliche Züge als bei Schach, dadurch deutlich weniger Konstellationen zum testen.

Aber wahrscheinlich immernoch deutlich zuviel mögliche Züge um einen vollständigen Baum aufzuspannen.

BTW habe ich auf Anhieb eine ausführliche Seminararbeit zu dem Thema gefunden

Danke schön schon mal für all die Tipps und Hinweise, ich glaub langsam raffs ich, aber das programmieren an sich ist glaub ich komplizierter hahahaha.

[QUOTE=timbeau]
BTW habe ich auf Anhieb eine ausführliche Seminararbeit zu dem Thema gefunden[/QUOTE]

Zu dem Thema MinMax oder zu der KI an sich :smiley:

und jaa ich habs halt hier und bei Java-Forum gepostet :D:D

Naja wie man es programmiert hängt ein wenig auch davon ab, wie euer Spiel generell aufgebaut ist, welche Klassen Ihr habt, welche Funktionen sie zur Verfügung stellen.

Aber es muss ja eine Funktion geben, macheZug und istGewonnen. Diese Funktionen muss nun deine KI aufrufen. Um mehrere Züge zu testen, gegen eine Kopie des Spielstandes, eventuell auch mehrere Züge, also einen für sich, dann was wäre ein plausibler Zug des Gegners, dann einen für sich, die Wertigkeiten wie oben beschrieben zusammenrechnen und für diesen Zug speichern, dann von allen 8 möglichen Zügen (so ich mich nicht täusche ist das Spielfeld (8x7 oder so)) den Best bewerteten nehmen und gegen das richtige Spielfeld ausführen.

Hallo,

und was spricht gegen den minmax Algo?

Wie von SlaterB schon angesprochen. Poste doch mal hier deinen Ansatz und du erhälst konkrete Hilfe. So wirst Du sicherlich keine Lösung von deinem Problem bekommen.

Gruß,

Martin

Zu dem Thema einer Ki auf 4 gewinnt

Mit KI ist doch sicherlich nur ein Computer Gegener gedacht.

Wieso sollte man einem wirtschafts-informatiker neuronale Netze vorlegen? ^^

Ich hatte mal eine Vier-Gewinnt-KI mit Minimax und ein paar ganz einfachen Heuristiken geschrieben, allerdings in Scala: http://dgronau.wordpress.com/2010/04/19/vier-gewinnt-kunstliche-intelligenz/

Wie man sieht, ist das kein Zauberwerk, gerade mal 38 Zeilen. Trotzdem hatte ich Schwierigkeiten, dagegen zu gewinnen.

[QUOTE=Marcinek]Mit KI ist doch sicherlich nur ein Computer Gegener gedacht.

Wieso sollte man einem wirtschafts-informatiker neuronale Netze vorlegen? ^^[/QUOTE]
So hatte ich das auch verstanden und man kann sie ja leicht ein wenig intelligenter machen

[QUOTE=Unregistered;77494]Die frage nach KI Programmierung ist natürlich kompliziert, wäre die erste Frage, was definiert eine KI für 4 gewinnt genau?

Theoretisch wäre es möglich einfach per Zufall eine Zelle auszuwählen, die einen Stein bekommt (quasie eine Random KI) die also nur schaut ist der Zug gültig oder nicht.
In einer Verbesserung, kannst du dann die Züge bewerten, vorausschauen, was der Gegner am wahrscheinlichsten macht,…[/QUOTE]

und die wichtigsten Ansätze um die Erweiterung zu machen hatte ich auch kurz aufgezeigt

[QUOTE=Unregistered;77567]Naja wie man es programmiert hängt ein wenig auch davon ab, wie euer Spiel generell aufgebaut ist, welche Klassen Ihr habt, welche Funktionen sie zur Verfügung stellen.
Aber es muss ja eine Funktion geben, macheZug und istGewonnen. Diese Funktionen muss nun deine KI aufrufen. Um mehrere Züge zu testen, gegen eine Kopie des Spielstandes, eventuell auch mehrere Züge, also einen für sich, dann was wäre ein plausibler Zug des Gegners, dann einen für sich, die Wertigkeiten wie oben beschrieben zusammenrechnen und für diesen Zug speichern, dann von allen 8 möglichen Zügen (so ich mich nicht täusche ist das Spielfeld (8x7 oder so)) den Best bewerteten nehmen und gegen das richtige Spielfeld ausführen.[/QUOTE]
für weitere Hilfe wäre dann Input des TO erforderlich, was er schon hat, wie sehen seine Funktionen aus, sein Spielfeld, seine Objekte,…