# Kniffel (Yahtzee) KI, wie geh ich es an?



## Griesgram (21. Mai 2008)

Hallo zusammen,

ich bin ein relativer Java- ud überhaupt Programmierfrischling. Momentan bin ich dran, mir ein Yahtzee-Spiel für mehrere Spieler und mit Computergegnern zu schreiben. Das Würfeln und Ausrechnen der Punkte, bzw. die Überprüfung, ob sie überhaupt gültig sind, macht mir keine Probleme.
Nur bei der KI weiss ich nicht so recht, wo ich anfangen soll. Beziehungsweise weiss ich nicht so recht, wie sie sich entscheiden soll, welche Kategorie (einer, zweier, kleine Strasse, Yahtzee etc. sie anstreben soll).
Die KI soll nicht grad die mathematisch allerbesten Chancen errechnen, bzw. immer "perfekt" spielen, aber so ein wenig drauf achten, was sie schon hat, was noch viele Punkte geben könnte etc. sollte sie schon und halt nicht nur einfach alle möglichen Arten, Punkte zu machen, nacheinander durchlaufen, sprich, wenn sie beim ersten Versuch 5x eine 2 Würfelt das als Yahtzee verbuchen und nicht als die 2er oder  sogar bei den einern als 0.

Für Anregungen wär ich dankbar, denn ich weiss bei diesem Spiel nichtmal im echten Leben genau, wie ich mich entscheiden soll und hab folglich mit der KI noch viel mehr Mühe..


Grüsse, der Griesgram


----------



## Templon (22. Mai 2008)

Ein recht Anspruchsvolles Thema finde ich. 

Was ich machen würde (Keine Ahnung ob das wirklich Funktioniert, und gut ist) eine Art Pattern System. 
Also dass du alle möglichen Resultate (z.B. Strasse, Paare, Drilinge etc) irgendwie abspeicherst, und ihnen eine Prioriät zuweist. 

Abspeichern könnte man das z.B. so als String: eine Strase "abcdef" (Alle buchstaben für eine Zahl), ein Paar als "aa", Drilinge als "aaa" Doppelpärchen "aabb" und so weiter. Dann eine Funktion schreiben, die bei jedem Mal würflen schaut was am besten passt und welches am meisten Punkte gibt (Höchste Priorität hat). Vielleicht könnte man auch noch irgendwie einbauen das er die chancen für den nächsten Zug irgendwie ausrechnet.

Hoffe das hat ein wenig geholfen.

PS: Das ganze müsste man bestimmt noch sehr ausbauen, vielleicht hat jemand hier einen besseren Vorschlag, bin mir wirklich nicht sicher ob das ganze so Gut geht


----------



## Siassei (22. Mai 2008)

Templon hat gesagt.:
			
		

> Was ich machen würde (Keine Ahnung ob das wirklich Funktioniert, und gut ist) eine Art Pattern System.
> Also dass du alle möglichen Resultate (z.B. Strasse, Paare, Drilinge etc) irgendwie abspeicherst, und ihnen eine Prioriät zuweist.



Nicht gut, sorry  :wink: Bei einem derartigen System ließen sich die Handlungen der KI bei jedem Spielzug voraussagen bzw. nach einer gewissen Zeit kennst du die Aktionen der KI. Zudem gibt es sehr viele mögliche Aktionen und du wirst sie niemals alle korrekt bewerten   Erstelle erstmal das Spiel mit Lobby, Grafik-Engine, Grundgerüst, ... und befasse dich danach ein wenig mit künstlicher KI. Ein wirklich interessantes Thema (arbeite mich gerade selbst ein ) und strick dir danach eine KI zusammen.

Viel Arbeit, aber später wirst du die Vorteile schätzen lernen  :wink: und wenn du's richtig umsetzt, kannst du das Gerüst der KI-Engine für weitere Spiele verwenden


----------



## Templon (22. Mai 2008)

Siassei hat gesagt.:
			
		

> Nicht gut, sorry  :wink:


Hab ich mir schon gedacht  Hab mich noch nie an eine KI gewagt. Ist ja schon bei einem solchen Spiel nicht zu unterschätzen.


			
				Siassei hat gesagt.:
			
		

> Bei einem derartigen System ließen sich die Handlungen der KI bei jedem Spielzug voraussagen bzw. nach einer gewissen Zeit kennst du die Aktionen der KI.


Aber bei einem Yahtzee ist das ja eigntlich vollkommen egal oder?


			
				Siassei hat gesagt.:
			
		

> Zudem gibt es sehr viele mögliche Aktionen und du wirst sie niemals alle korrekt bewerten.


Das kann gut sein, zu wenig Erfahrung um das Bewerten zu können 

Wie würdest du das ganze dann angehen? Würde mich doch auch noch Intressieren 

Mfg


----------



## Illuvatar (22. Mai 2008)

Also ich würde generell so vorgehen (ähnlich wie das was Templon gesagt hat):

Du schaust, was du bisher gewürfelt hast und vergleichst das mit sämtlichen möglichen Kombinationen. (Das ist der komplizierteste Teil des Ganzen, hat aber erstmal nichts mit KI zu tun.) Man sollte herausfinden können, wie hoch die Wahrscheinlichkeit ist, auf diese Kombination zu kommen.
Dann hast du eine Tabelle Kombination / Punktezahl / Wahrscheinlichkeit. Da kannst du dann vielleicht zum Bewerten den Quotienten a*Punktezahl/b*(1-Wahrscheinlichkeit) bilden. Mit den Parametern a und b kannst du bestimmen was davon wie gewichtet wird (und kannst so entscheiden ob die KI eher vorsichtig oder mutig spielt). Vielleicht noch ein kleiner Zufallsfaktor rein. Das mit dem höchsten Quotienten wird versucht zu erreichen.


----------



## Griesgram (25. Mai 2008)

Danke für eure Tipps, ihr habt mir wirklich einige gute Anregungen gegeben.
Ich werd mal probieren was draus zu machen, Illuvatars Ansatz gefällt mir da sehr gut. Mal schauen, ob ich das mit der Wahrscheinlichkeitsberechnung noch hinkriege. Ist nicht ganz so einfach, wie ich erst dachte, da man auch miteinbeziehen muss, dass man mehrere Würfe zur Verfügung hat und noch dazu die Würfel, die schon gut sind liegen lassen darf.

Falls ihr noch mehr Tipps habt, nehme ich die natürlich gerne entgegen und falls von mir aus noch Fragen kommen, werd ich sie sicher hier stellen, so gut, wie mir hier geholfen wird 

Es grüsst, der Griesgram


----------



## Marco13 (25. Mai 2008)

Hm. Ob es da eine "optimale" Strategie gibt, wäre aber eine interessante Frage. Ich würde erstmal die Wahrscheinlichkeiten für ALLE "eintragbaren" Ergebnisse ausrechnen, und dann schauen, wie die so verteilt sind.  Es gibt da ja so "Grenzfälle": Wenn man z.B. beim vorletzten Wurf 5 Sechser würfelt,  und nurnoch Kniffel oder "Sechser" frei hat, dann sollte man den Wurf u.U. nicht als Kniffel, sondern als Sechser werten, wen man damit die Grenze um "Bonus" überschreitet usw... Müßte man sich mal genauer überlegen....


----------

