![]() |
KI Projekt
Hi Leute,
ich wollte mal anfangen mit einer KI. Erstmal einfach, dass man gegen einen Computer Tick-Tack-Toe spielen kann und vielleicht, dass ich am ende sogar eine ganze Schachki hinbekomme. Könnt ihr mir vielleicht helfen? Kennt ihr so ein Bild, wo ein Besipiel Algorithmen abgebildet ist, oder sogar für Tick-Tack-Toe? |
AW: KI Projekt
eigentlich ein Klassiker für Google "Tick-Tack-Toe KI"
|
AW: KI Projekt
Obwohl Tick-Tack-Toe kein gutes Spiel für eine KI ist. Der anfängt gewinnt :D
Aber wie sieht das denn mit schach aus. WIe kann man sowas machen? |
AW: KI Projekt
![]() Du willst gleich in der Königsklasse der KI einsteigen. Halte ich nicht für eine gute Idee. Wie wär es denn mit Mühle? Das ist deutlich einfacher. |
AW: KI Projekt
fang an mit TicTacToe, danach ne KI für Mensch Ärger dich nicht(Welche figur sollte bei welchen zügen bevorzugt werden).
Vllt soetwas wie 4gewinnt, aber dann steigts auch schon. SchachKI solltest du gaaanz hinten anstellen. Wenns sein darf kannst du zwischendurch auch mal pathfinding machen. Ser nützlich wenn du mal spiele mit gegnerischen figuren machst(tower defense) |
AW: KI Projekt
Tick-Tack-Toe ist nicht so gut, da der erste, der anfängt, gewinnt :D
Und Mensch ärgere dich nicht klingt super. Nersgatt, dein Link sieht sehr hilfreich aus :thumb: gibt es sowas ähnliches auch für Mensch ärgere dich nicht :-D Oder ein Schaubild von einem Mensch ärgere dich nicht Algorithmus? Danke Leute:thumb: |
AW: KI Projekt
Bei Mensch ärger dich nicht (und allen anderen Brettspielen) ist das Prinzip immer das selbe. Du kannst also den Text aus meinem Link auf andere Spiele übertragen.
Du braucht einen Zuggenerator und eine Bewertung der Stellungen. Damit errechnest Du den nächsten Zug. Natürlich musst Du die Berechnung der gültigen Züge und der Bewertung an die Spielregeln anpassen. Fang doch wirklich mal an, dieses Konzept für TicTacToe umzusetzen. Dass der erste immer gewinnt ist zum lernen völlig egal. Du hast sogar noch ne Sicherheit. Wenn der Computer anfängt und NICHT gewinnt, hast Du einen Bug in der KI. :stupid: |
AW: KI Projekt
Ich fange mal an Mensch ärgere dich nicht ohne KI zu programmieren.
Aber es muss doch so ähnlich ablaufen: 1. Würfeln 2. Zahl auswerten (Kann ich damit jemanden kicken/eine 6 (nochmal würfel und eventuell Spieler aufs Feld)) 3. Figuren (welche ist in Gefahr/Welche kann ich in die Mitte brigen) 4. handeln |
AW: KI Projekt
Zitat:
|
AW: KI Projekt
Fast jede (Brett-)Spiel-KI läuft auf einen
![]() Zudem ist TTT vom UI und der Bedienung her schön einfach, so dass das nicht so sehr vom Wesentlichen ablenkt. (Am Rande: Zwei perfekte Spieler erreichen immer ein Unentschieden, egal wer anfängt.) |
AW: KI Projekt
Zitat:
|
AW: KI Projekt
Zitat:
1. Würfeln 2. Alle erlaubten Züge für die Spielfarbe der KI berechnen 3. Die daraus resultierenden Stellungen bewerten (*) 4. Handeln (*) dabei könntest Du z.B. mit einem Punktesystem arbeiten und eine Bewertung zu machen. Wenn Du jemanden abwerfen kannst, gibts einen Punkt Wenn Du eine Figur aus dem Haus ziehen kannt, gibt einen Punkt Wenn Du eine Figur ins Zielfeld ziehen kannst, gibts 2 Punkte WEnn Du eine Figur vor einer generischen Figur in Sicherheit bringen kannst, gibts 3 Punkte. Wenn Du eine Figur in den Gefahrenbereich einer gegnerischen Figur bringst, gibt 1 NEGATIVEN Punkt etc. Es könnten natürlich auch 2 Bedingungen auftreten. In dem Fall werden die Punkte einfach addiert. So hat hinterher jeder erlaubte Zug eine Punktzahl. Jetzt musst Du nur noch den Zug mit der höchsten Punktzahl auswählen und ausführen. Gibts mehrere Züge, die die höchste Punkzahl haben, machst Du einfach irgendeinen dieser Züge. Jens |
AW: KI Projekt
Das Bewertungssystem sollte man aber auch erst dann angehen, wenn man die Infrastruktur für den Baum geschaffen hat. Da lohnt sich auch etwas mehr Zeit reinzustecken, weil richtig gemacht ist der vielseitig wiederverwendbar. Nach wie vor ist Mensch ärgere dich nicht aber ein schlechter Einstieg! Vor allem, weil ein Würfel zum Einsatz kommt, so dass der Baum pro Ebene mit der Anzahl der Würfelausgänge UND der Anzahl der pro Würfelergebnis möglichen Züge wächst. Das wird ein Riesen-Oschi, den es vollständig zu erstellen schon eine heftige Aufgabe ist - wenn überhaupt möglich in sinnvoller Zeit mit sinnvollem Speichereinsatz.
Nersgatt (ich les bei dir immer Negersatt... manno!) beschreibt die Bewertung eines, unmittelbar anstehenden Zuges. Für ein intelligentes Spiel reicht das aber nicht! Dazu muss die KI den künftigen Spielverlauf abschätzen können, daher der Baum. Durch Backtracking (oder dynamische Programmierung, grad unsicher welches der zwei Wörter besser passt) in einem Spielbaum wird genau das erreicht: Die Implikationen durch einen Zug werden mit berücksichtigt. Klar, man kann auch If-Then-Else-Pseudo-KI-Gefrickel machen, aber dann nenn es bitte nicht KI-Projekt ;) |
AW: KI Projekt
Zitat:
Das dachte ich mir auch, doch als ich bei Google gesucht habe meinte eine Person, dass es mathematisch bestätig sei, dass der erste immer gewinnt :D |
AW: KI Projekt
Liste der Anhänge anzeigen (Anzahl: 1)
So habe jetzt das Projekt angefangen.
Bin jetzt da, wo der Spieler das erste Kreuz gemacht hat. Könnt ihr mir weiter helfen? |
AW: KI Projekt
Zitat:
Wer einen Fehler macht verliert. Sind Beide gut, dann kann es nur unentschieden ausgehn. |
AW: KI Projekt
Habe hier eine Grafik:
![]() |
AW: KI Projekt
Der Spielbaum zeigt aber nicht alle möglichen Anfänge. Heißt das, dass der eigentlich viel größer ist?
Und wie solle ich den in mein Projekt einbinden. Mit Punkten wohl nicht. Mehr mit If, aber ist es dann eine KI? |
AW: KI Projekt
Zitat:
Zitat:
|
AW: KI Projekt
Zitat:
Zitat:
|
AW: KI Projekt
Wie heißt denn die Demo?
|
AW: KI Projekt
wie bringe ich denn jetzt den Stammbaum in mein Projekt?
Wie soll ich das mit den Punkten machen? |
AW: KI Projekt
Zitat:
Dann kann man es immer noch weiter ausbauen. ("Nersgatt" ist übrigens aus dem Plattdeutschen, hat mit maximalpigmentierten Mitbürgern nichts zu tun :lol: ) |
AW: KI Projekt
Zu TicTacToe möchte ich anmerken dass im Grunde der Erste Zug des ZWEITEN Spielers entscheidet, ob der erste überhaupt gewinnen kann.
Baut Spieler2 seinen ersten stein in eine der ecken hat der Erste spieler keine Chance mehr. Baut der Zweite Spieler seinen stein nicht in eine der ecken, hat der erste Spieler gewonnen. Es ist dann 100% möglich eine Zwickmühle zu bauen, die der zweite spieler nicht mehr verhindern kann. EDIT: ich geh mal davon aus das Spieler1 seinen stein in der mitte plaziert hat ;) MFG Memnarch |
AW: KI Projekt
Ich lass das Projekt mal stehen. Habe keine Lust, wenn allein schon solche Äußerungen kommen:
Zitat:
|
AW: KI Projekt
Auch wenn ja jetzt hinfällig: Den Spielbaum (nicht Stammbaum) "bekommst" du nicht in dein Programm, den muss es natürlich selbst errechnen/aufbauen/auswerten. Wobei ich mich durchaus der Einschätzung anschließen muss, dass das gesamte Unterfangen mit deinem Kenntnisstand (der sich durch die Art wie und was du fragst, und wie du das angehst durchaus einschätzen lässt) eventuell noch einen Meter zu hoch hängt. Wenn zudem diese nüchterne Feststellung, die ja nichtmals negativ wertend ist, deinen Elan komplett vernichtet, muss man wohl eher in Frage stellen, ob du überhaupt zum Programmierer (Problemlöser!) "geschnitzt" bist. Man wächst immer an seinen Problemen/Aufgaben, wozu es halt nötig ist, dass die an denen man wirklich wächst zunächst größer sind als man selbst. Wenn du das nicht ab kannst, wird's nen harter Weg in diesem Bereich für dich ;)
|
AW: KI Projekt
Wenn ich diesen Spielbaum errechnen möchte, dann muss ich ja eine wahrscheinlichkeit errechnen, was der Spieler als nächstes vor hat. Die Frage ist nur, wie ich das heraus finde. Da muss ich ja prüfen, ob 2 in einer Reihe sind und die Reihe dann blokieren. Das wäre dann meiner Meinung nach die Abwehr.
XX- O-- --- dann XXO O-- --- |
AW: KI Projekt
Wenn der Mensch anfängt, dann musste sich der Computer im Normalen verteidigen und Reihen blockieren.
Dann müsste ich auch Angreifen. Zum Beispiel: XXO XO- --- zu XXO XO- Computer gewinnt O-- |
AW: KI Projekt
Dann fange ich mal an zu programmieren. Aber ich würde das mit IF machen.
Wenn XX- ... ... Dann XXO ... ... Ist das dann trotzdem eine KI? Oder muss ich das mit Punkten machen? |
AW: KI Projekt
Zitat:
|
AW: KI Projekt
Und wie mache ich das, dass das Programm entscheidet?
Das ist nämlich die Frage. Ein Punktesystem wurde schon genannt. Doch, wie soll ich das auf das Programm anwenden? Auf TTT:?: |
AW: KI Projekt
KI ist auch ein bisschen Definitionssache. Imo ist alles „künstliche Intelligenz“, was sich (scheinbar) intelligent verhält. Das heißt, im Grunde kannst du es machen wie du willst, aber du wirst feststellen, dass es sehr unübersichtlich wird, wenn du alles hardcodest. Deshalb macht das auch niemand, wirklich niemand. Bei Tic-Tac-Toe mag es gerade noch gehen, aber schon bei 4-Gewinnt wird es unmöglich sein, jeden Spezialfall vorherzusehen und zu behandeln.
Weil Pathfinding vorhin schon genannt wurde: Im Grunde ist auch die Spiel-KI selbst nichts anderes. Es kommen letztlich die gleichen Algorithmen zum Einsatz wie in Navigationssystemen und Co., nur dass die Knoten nicht irgendwelche Straßen-Kreuzungen sind, sondern die möglichen Spielzüge, und nicht die Distanz zum Zielort ausschlaggebend ist, sondern die „Bewertung“ des Spielstandes (die bei komplexen spielen immer eine Heuristik ist, da man Spiele wie Schach nicht bis zum Ende durchrechnen kann). Wenn du wirklich was in der Richtung machen willst, würde ich mir daher erst mal Pathfinding anschauen, und dann im nächsten Schritt überlegen, wie ich das auf eine Spiel-KI übertragen kann. Du wirst im Netz viele Quellcodes finden, die mittels Backtracking den Weg aus einem Labyrinth finden – dass wäre ein guter Einstieg. Auch den Pathfinding-Algorithmus A* (Sprich: „A-Star“) würde ich mir mal anschauen, weil er relativ leicht zu verstehen ist und man ihn – wenn man ihn verstanden hat – leicht auf seine eigenen Bedürfnisse anpassen kann. Der Wikipedia-Artikel dazu ist recht anschaulich. |
AW: KI Projekt
Zum Aufbau des Baumes musst du nichts abschätzen, er ist gerade die Basis dafür. Der Baum enthält alle möglichen Spielstände, strukturiert nach Zügen, also in der Reihenfolge, in der sie auftauchen. Die Idee dahinter ist es, dass man dann auch sämtliche möglichen Ausgänge einer Runde hat, die sehr einfach zu bewerten sind: Gewonnen, veloren oder unentschieden. Somit kann man dann von den Blättern des Baumes (Spielendsituationen) aufwärts die "Qualität" der Spielzüge (die Kanten im Baum) durchziehen. Damit weiss die KI dann in jeder vorkommenden Spielsituation, welcher nächste Zug am wahrscheinlichsten zum eigenen Sieg führt.
Das Problem bei komplexeren Spielen als z.B. TTT ist, dass es oftmals nicht möglich oder praktikabel ist alle möglichen Spielsituationen im Voraus zu berechnen (bzw. zu puffern), so dass man in die Verlegenheit kommt Nicht-Endsituationen bewerten können zu müssen, was je nach Spiel ziemlich knobelig ist, und ggf. eine ganze Latte weiterer Algorithmen braucht, die wieder vom Spiel abhängen. |
AW: KI Projekt
Danke, ich werde mir das angucken :wink:
|
AW: KI Projekt
Ich hatte mir
![]() ![]() Dann muss ich nur noch herausfinden, wie ich so eine Pathmap dynamisch erstellen. :-D |
AW: KI Projekt
Ich versuche gerade eine Möglichkeit zu finden, eine Pathmap zu erstellen. Und komme da leider nicht weiter. Der Computer muss ja verstehenm, was richtig und was falsch ist und danach Punkte geben. Und das Programm handelt so, dass es möglichst viele Punkte bekommt.
Ich stelle mir das erstellen so vor: Wenn zum Beipiel: Spieler: X KI: O XX- --O --- Wenn der Spieler zwei in einer dreier Reihe hat und nur noch einer fehlt dann soll dieses Feld von der KI blokiert werden. Pathmap: //wenn ein Feld besetzt ist, dann ist der Wert -2, da darf die KI nicht rauf -2|-2| 1 0| 0|-2 0| 0| 0 //Die KI will mehr Punkte und setzt bei 1 den O X|X|O -|-|O -|-|- //Der Spieler passt gerade nicht auf und macht einen Fehler X|X|O X|-|O -|-|- Das Programm generiert eine Pathmap -2|-2|-2| -2| 0|-2| 0| 0|+1| //Die KI möchte mehr Punkte und setzt bei +1 einen Kreis. So jetzt bin ich gerade dabei, eine Prozedure zu schreiben, die mit hilfe von IF eine Pathmap generiert. Soll ich das einfach mal so ähnlich machen? Also wenn zum Beispiel X|X|- dann soll beim Minus +1 stehen? |
AW: KI Projekt
Das letzte Beispiel ist aber falsch, da das Verhindern dea gegnerischen Dreiers auch die Prio 1 hat. Siegen müsste also eine höhere Prio haben, vllt. so:
Siegen: 4 Dreier verhindern: 3 Zwickmühle aufbauen: 2 Zweier aufbauen: 1 Irgendwas: 0 Besetzt: -1 |
AW: KI Projekt
Ich fange erstmal an, dass sich das Programm (nur) verteidigt und es zum unentscheiden bringt :D
|
AW: KI Projekt
Wenn es interessiert:
Habe jetzt die Verteidiung und baue gerade an dem Angriff:thumb: Nur ich arbeite nicht mit punkten, sondern mit taktischen Entscheidungen. |
AW: KI Projekt
(Nur mal nebenbei)
Was haltet ihr von den neuen Super ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz