ja, das schwankt natürlich auch... das Mecano hat halt schon ein wenig Spiel... Naja, was solls, er ist ziemlich genau, ich muss noch zwei Felder verbessern, dann steuert er alle fehlerlos an.
Druckbare Version
ja, das schwankt natürlich auch... das Mecano hat halt schon ein wenig Spiel... Naja, was solls, er ist ziemlich genau, ich muss noch zwei Felder verbessern, dann steuert er alle fehlerlos an.
Wirklich ein schickes Projekt! :o)
Hat man theoretisch eine Chance gegen ihn zu gewinnen, oder lässt er keine Fehler zu?!
Viele Grüße
Florian
Soll keine Kritik sein, Projekt ist super, aber: fehlen für ein normales Mühlespiel nicht ein paar Felder ?
nice, ich hab auch lächeln müssen @video
sind die LM317 wirklich nötig für die servos? wie hoch ist deine versorgungsspannung? unter 8V schliesse ich meine servos direkt an und der atmega erzeugt das pwm-signal. das hat bisher immer geklappt, und meine L78S05 werden nicht belastet. ist aber nur ein gedanke.
ich habe vor 2-3 monaten ein mühlespiel in c programmiert allerdings "all virtual". an der KI bin ich aber gescheitert, so dass man nur im netzwerk spielen konnte. (fällt mir nur grade so ein)
in welcher sprache hast du es programmiert? n bissl beispielcode würde wohl manche augen hier erglänzen lassen..
ja, picnick, da scheinen 8 felder zu fehlen. ob man allerdings eine echte mühle-KI in einen atmel packen kann, wage ich zu bezweifeln.
gruesse, eure katz
Oh, ganz vergessen: Es ist einfache Mühle... :)
Der Bot verliert nicht. Wenn der Gegner einigermassen klar im Kopf ist dauert so das Spiel unendlich lange. Der Bot macht keine Fehler.
Versorgungsspannung vom Trafo (12V) im Leerlauf sind 17V... Also nix für Servos. Jo, für die echte Mühlen-KI wars zu dick, zu viele Möglichkeiten und Strategien. Ich hab mit einem ETH-Prof gesprochen, der damals das Mühlespiel komplett identifiziert hat (alle möglichen Situationen )das sind Daten über 2GB... Sein Bot hat alle möglichen Situationen gespeichert und führt auf jede Situation den passenden Zug aus..
Meine KI denkt 2 Ebenen tief, d.H. er betrachtet alle Möglichkeiten, die er selber fahren kann, und danach noch alle folgenden Möglichkeiten, die der Gegner fahren kann. (Minimax-Algorithmus). Ich verwende keine "Vereinfachungsstategien" wie Alpha-Beta Pruning, er braucht eh nur 300ms um den Zug zu berechnen.
Programmiert in Bascom, sind ca. 1200 Zeilen bis jetzt, werden wohl noch 500 mehr.
Hier mal ein Codeschnipsel:
Hier berechnet er alle möglichen Züge, die der Gegner nach seinem Zug machen kann, falls man noch in der ersten Spielphase ist (Steine setzen), diese speichert er in einem Array.Code:Ebene2:
If Spielphase = 0 Then
'Aus dem Ebene1-Array müssen schrittweise die Feler ausgelesen werden. Dann wird daraus jeweils ein neues Feld erzeugt, welches dann bewertet wird.
For I = 1 To Zugzahl ' Zugzahl aus voriger Routine. Es müssen die jeweils leicht veränderten Felder ins Momfeld eingetragen werden.
Zugzahl2 = 0
A = I - 1
A = A * 9
For M = 1 To 9
A = A + M
If Ebene1(a) = 0 Then 'Hier wird bestimmt, wieviele Züge man vom Knoten der ersten Ebene in die zweite Ebene machen kann.
Incr Zugzahl2
End If
A = A - M
Next M
For B = 1 To Zugzahl2
C = 1
A = I - 1
A = A * 9
For J = 1 To 9
A = A + J
If C = 1 Then
If Ebene1(a) <> 0 Then
Momfeld(j) = Ebene1(a)
Elseif Ebene1(a) = 0 Then
Momfeld(j) = Gezogenezuege2 ' Der (virtuelle) Gegner ist nun dran mit setzen.
Ebene1(a) = 10
C = 2
End If
Elseif C = 2 Then
Momfeld(j) = Ebene1(a)
End If
A = A - J
Next J
For D = 1 To 9
If Momfeld(d) = 10 Then ' Die 10s werden durch 0 ersetzt.
Momfeld(d) = 0
End If
Next D
Gosub Bewerten ' Hier wird das momentane Momfeld zur Bewertung geschickt.Es wird hierher zurückgekehrt
Next B
Next I
For I = 1 To 81
If Ebene1(i) = 10 Then
Ebene1(i) = 0
End If
Next
Der Code ist sehr "holprig" geraten, man könnte noch viele Variablen einsparen und verbessern, das lass ich vorerst aber, never change a running system...
Entwickelt hab ich die Speicherstrategien und Abläufe auf einem A3-Block, hat sich super bewährt!
Ist Mühle wirklich so komplex? Ich hätte gedacht, das sei relativ problemlos in Echtzeit zu beachten, da es ja nicht soo viele Mögliche Zustände und Zugmöglichkeiten gibt (im Gegensatz z.B. zu Schach).Zitat:
Zitat von Murus
Ja, für mich war es zu komplex... Es gibt doch noch einige Taktiken, die man eventuell nicht mit dem Minimax-Algorithmus hätte lösen können und in einer Bibliothek hätte ablegen müssen.
Ja, das mit den Taktiken stimmt. Ähnliche Probleme hatte ich vor einiger Zeit bei einem Vier-Gewinnt-Programm. Der Computer spielt dann zwar in gewisser Weise perfekt, aber eben ohne echte Taktik - vlg. Fussball-WM...Zitat:
Zitat von Murus
So, hier mal ein weiteres, etwas besseres Video.
Hier platziert er den Stein einigermassen zufällig auf die einzelnen Felder und schaut, ob der Sensor anspricht.
Z.T. müssen die Steine nicht ganz mit dem weissen Feld übereinstimmen, denn der Sensor befindet sich nicht immer genau unter dem weissen Feld..., hab da etwas ungenau gearbeitet, leider... Also nicht wundern, wenn er den Stein "danebenstellt" :)
Aber er steuert unterdessen alle Felder fehlerlos an.
Limitierender Faktor in Bezug auf die Betriebsdauer ist der Elektromagnet, bei 50°C lass ich ihn abkühlen...
Hier der Link:
http://video.google.de/videoplay?doc...68472960615592
Herzlichen Gruss
Mario
der ganze aufbau sieht sehr schön gemacht aus finde ich.
mfg