Best Practice KI für Mensch ärgere Dich nicht

  • Themenstarter hüteüberhüte
  • Beginndatum
H

hüteüberhüte

Gast
Hi,

wie kann man eine KI schreiben für o.g. Spiel? Im Prinzip muss doch nur gewürfelt und entschieden werden, welche der maximal 4 Figuren gezogen werden soll? Welches ist die optimale Strategie? Bin schon gespannt auf Antworten :popcorn:

Grüßle
 
G

Gast2

Gast
Für den Anfang:
- Wenn ich ins Haus laufen kann mach ich das.
- Wenn ich jemanden schlagen kann mach ich das.
- Ansonsten: Bewege eine zufällige Figur
 

The_S

Top Contributor
Für Mensch ärger dich nicht ist die KI ja ziemlich simpel. Ergänzend zu EikeB würde ich anstatt "Bewege eine zufällige Figur" verschiedne Spielertypen festlegen. Einer könnte bspw. schauen, dass alle Figuren ca. gleich weit sind. Ein anderer könnte den Fokus darauf legen erst einmal eine Figur ganz nach vorne zu bringen. Ein dritter zieht wirklich willkürlich mit einer Figur. Ein vierter orientiert sich am Spielverhalten des Gegners. Wenn man ggf. die Reihenfolge von den drei von EikeB vorgeschlagenen Schritten variiert kann man auch ganz gut unterschiedliche Schwierigkeitsgrade und Spielertypen generieren.
 

szapf

Mitglied
Hallo,

ist zwar keine Java Frage, aber ich glaube diese KI könnte eine einfache Prioritätentabelle sein.

1) Kann ich mit den Augen eine Figur "nach Hause" bringen.
2) Kann ich mit diesen Augen ein Gegnerische Figur die nahe an ihrem zuhause ist rauskicken?
3) Kann ich mit diesen Augen nahe an Gegnerische Figur kommen um sie im nächsten Zug rauszukicken?
4) Habe ich noch eine Figur nicht auf dem Feld?
5) Wenn nicht 1 - 4 ziehe ich eine meiner Figuren vor. Aber...
5.1) Keine Figur die nach am Heim ist und sich mit diesen Augen vor ein Gegnerische Figur setzt und damit eventl. geschlagen werden könnte.

Das sollte als Basis erstmal reichen.
 
P

pL4Gu333

Gast
ergänzend zu EikeB Vorschlag könnte man noch prüfen,

- ob man auf einem "Startfeld" des Gegners steht und da evtl. lieber runterzieht.

- ob Gegner in der Nähe sind, die einen erreichen könnten und man so außerhalb der "normalen" Reichweite kommt. (Normal heißt er würfelt nur einmal :D)
 
B

bone2

Gast
Es gibt die eine beste Strategie für Mensch-äger-dich-nicht, findet man sicher bei google. Kann mich gerade nicht erinnern ob das alle bewegen oder vordersten bewegen war.

edit: pro7 hat dazu einen beitrag gehabt, von den deutschen meistern
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Ich hatte das mal ("ohne KI") implementiert. Ich weiß nicht, ob das die offiziellen Regeln sind, aber dort war es so, dass man, wenn man z.B. eine Figur schlagen konnte, aber das NICHT getan hat, wieder zurück ins Haus mußte - und noch ein paar ähnliche Dinge, so dass von einer "Strategie" nicht mehr viel übrig blieb. Das einzige, was mir spontan einfallen würde, wäre, zu versuchen, eine Figur (wenn möglich) so zu bewegen, dass sie aus dem "Schlagbereich" einer gegnerischen Figur raus wäre. Aber vermutlich haben sich da schon mehr Leute mehr Gedanken dazu gemacht.
 
H

hüteüberhüte

Gast
ist es sinnvoll, eine gegnerische Figur nicht zu schlagen, wenn eine andere andernfalls mit hoher Wahrscheinlichkeit geschlagen werdende Figur gesichert werden kann im Haus?
 

The_S

Top Contributor
Hängt von der Spielsituation ab. Wenn der Gegner nur noch eine Figur auf dem Feld hat und diese im nächsten Zug das Ziel erreichen kann, dann würde ich die gegnerische Figur schlagen. Ist man dagegen selbst kurz vorm Sieg und hat bspw. nur noch die beiden Figuren auf dem Feld wohingegen der beste Gegner noch viele Figuren hat, würde ich erst einmal meine eine Figur ins Ziel bringen.
 

Bleiglanz

Gesperrter Benutzer
hm
maximal 4 steine
würfelwurf hat 6 möglichkeiten
also ca. 24 möglichkeiten pro Zug(wenn weniger als 4 Steine dann ist ja reinsetzen auch eine Option)

da 24 x 24 x 24 x 24 nicht sooo riesig ist, kannst du 2 volle Züge vorausrechnen (das reicht beim Mensch ärgere dich :)

und als Endbewertung einer Stellung nimmst du einfach die "im Moment nötige Augenzahl um alle meine heimzufahren" für dich und für den Gegner
 

Landei

Top Contributor
Eine mögliche Strategie (wenn Einziehen und Schlagen nicht möglich ist) ist so zu ziehen, dass man möglichst "hinter" den anderen Gegnern steht. Als Maß könnte man z.B. (Wahrscheinlichkeit, beim nächsten mal schlagen zu können)/(Wahrscheinlichkeit, beim nächsten mal geschlagen zu werden) verwenden.

Eventuell ist es auch sinnvoll, das Spiel wie Schach in "Phasen" einzuteilen, und eine "Eröffnungsstrategie", eine normale Strategie und eine "Schlusssprint"-Strategie anzuwenden. Das würde schon recht "intelligent" wirken...
 

chef2

Mitglied
Wenn man das alles beachtet kann das ja ziemlich unübersichtlich werden.
Deshalb würde ich für Jede Figur Punkte vergeben:

50 wenn sie ins Haus kommt
20 wenn sie Schlagen kan
-10 wenn sie geschlagen werden kann
...

Und die Figur mit den Meisten Punkten würde ich ziehen lassen.
 

mrbela

Bekanntes Mitglied
-10 wenn sie geschlagen werden kann

Das geht ja nicht.. Entweder wurde sie dann von dem Gegner schon geschlagen oder dieser muss nochmals würfeln und dann ist nicht klar, ob diesre nochmals die nötige Zahl zum Schlagen würfelt..

Oder Du meinst, dass wenn die Figur im Range [1-6] zu einer gegnerischen steht, dann sollte sie mit -10 bewertet werden...

Weiß aber nicht, ob die Zahlen ausreichen.

Man muss bpsw. auch bedenken, dass Figuren, die schon im Haus sind, aber dennoch noch innerhalb des Hauses "ans Ende des Haus" vorrücken könnten, dies uach tun müssen, um so anderen Platz zu machen. Es ist also nicht damit getan, dem Computer zu sagen: Bring die Figuren ins Haus, danach musst dud dich um diese nicht mehr kümmern.
 
H

hüteüberhüte

Gast
Seht ihr, es ist also doch komplex.

1 bis 6 Felder vor (nach) einer gegnerischen Figur ist es auch nicht immer "gleich gefährlich", denn die Wahrscheinlichkeit, geschlagen zu werden, ist 6 Felder vor einer Figur viel höher als z.B. 1 Feld vor einer Figur.

Ich würde das mit nem Backtracking Algo machen, dann bleibt nur die Frage offen, wie eine Spielsituation zu bewerten ist. Wahrscheinlich Figuren im Spiel und schon zurückgelegte Schritte, oder?

Hat einer mal ein UI dafür gebastelt?
 

deetee

Aktives Mitglied
Man könnte noch beachten, dass die KI priorisiert gegen menschliche Gegener spielt, d.h. wenn zwei Figuren geschlagen werden können, sollte die des menschlichen Gegners dran glauben. Gehört dann wohl zum Thema Schwierigkeitsgrade.

Das Prinzip "Goal seeking" wird für den ein oder anderen Fall auch nützlich sein.
 
B

bone2

Gast
1 bis 6 Felder vor (nach) einer gegnerischen Figur ist es auch nicht immer "gleich gefährlich", denn die Wahrscheinlichkeit, geschlagen zu werden, ist 6 Felder vor einer Figur viel höher als z.B. 1 Feld vor einer Figur.
Warum? Würfel sollten random sein.
as einzige was vlt zutrifft ist, dass, je nach regeln, nur 1-5 gefährlich sind, solange der spieler noch figuren im startbereich hat und diese bei einer 6 rausrutschen muss.

Generell musst du dich erstmal auf einen regelsatz einigen den du verwenden willst, bevor du dich an die ki machst. Muss man schlagen und einsetzen?
 

szapf

Mitglied
Der Regelsatz ist natürlich das allerwichtigste. Vielleicht sollte man den mal Posten, dann kann man sich über den Rest Gedanken machen. Hat der TE da eine Vorgabe?
 

t4ce

Neues Mitglied
Hi, AI Experte hier

TLDR; Monte Carlo Tree Search und Binary Decision Cutoff

Zuerst etwas vereinfacht, mit nur einem Würfel und ohne Pasch. Darauf aufbauend dann die vollständige Vorgehensweise.

Wir bedenken 1–4 Spieler (Ja, auch der Single Player Fall kann, gespielt / bedacht werden, auch wenn in der Praxis eher langweilig) oder man generalisiert zu X Spielern und findet eine Regel, das Spielbrett für X Spieler zu generieren.

Aber gehen wir einfach mal vom Standard Mensch ärgere dich nicht aus, mit 1 - 4 Spielern.

Ziel:
Wenn ein Spieler S an der Reihe ist, muss der beste Zug ermittelt werden. Wobei natürlich bekannt ist, was der Würfel W grade anzeigt. (S → 1 bis 4, W → 1 bis 6) Ebenfalls sind Spielfiguren Positionen entscheidend.

Wenn S dran ist, kann von der Wurzel aus ein Suchbaum erzeugt werden.
Sobald das Spiel beginnt und der erste Spieler gewürfelt hat, gilt folgendes Szenario:

Die Wurzel des Baumes B hat 4 direkte Kindknoten. Jedes Kind ist genau eine der möglichen Konfigurationen, die dadurch entstehen, dass der Spieler die Wahl hat, welche seiner Figuren er zieht.

Die Kindknoten sind also diejenigen Spielbrett-Konfigurationen, welche sich ergeben, sobald ein Spieler gewürfelt hat und eine Figur gezogen wurde.

Da wir alle 4 Knoten auf diese Weise darstellen können, kommt nun die Simulation.

Rein konzeptionell wollen wir für jeden Knoten eine Anzahl Simulationen bis zum Spielende durchführen, um statistisch zu bestimmen, wie gut der Zug war / wie oft die Konfiguration im Mittel gewinnt.

Angenommen nach dem ersten Zug führen wir für jeden der 4 Kind-Knoten 1000 Simulationen durch.
Gemerkt wird sich, wie oft der Spieler S (Spieler, der am Zug ist) in jeder der 4 Konstellationen die gemachten Simulationen gewonnen hat.

Zum Beispiel könnte das Resultat sein, dass der Spieler mit der ersten Spielfigur ein Resultat von 200 gewonnenen Simulationen hat und das Resultat der zweiten bis vierten Spielfigur unter 150 lag. Das wäre dann auch schon der gewünschte, beste Zug.

Hier noch Gedanken, die unerlässlich sind:
Bei der Simulation muss das Schlagen programmiert werden
Muss auf 2 Würfel und Pasch angepasst werden
Da die einzelnen Figuren gleichwertig sind, können viele Kindknoten, die zu gleichen Konfigurationen führen, zusammengefasst werden und der Suchbaum wird dramatisch kleiner, aber bleibt optimal


Da kann man jetzt fast eine Bachelorarbeit in Informatik draus machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
M Java Einstellung von Apache POI für MS Word Erstellung mit Eclipse Java Basics - Anfänger-Themen 6
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
D Ampel für Mitarbeiter zum An-/Abwesend zeigen Java Basics - Anfänger-Themen 28
T Wahrscheinlichkeiten für Slot Machine Java Basics - Anfänger-Themen 13
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
T Roulette für Anfänger Java Basics - Anfänger-Themen 7
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben