My software never has bugs. It just develops random features.
Last update: Fri, 17 May 2024 00:40:06 GMT
Disclaimer: The jokes are from the Geek-Jokes-api and are randomly selected. That's why they are unfortunately often not funny. :D
My software never has bugs. It just develops random features.
Last update: Fri, 17 May 2024 00:40:06 GMT
Disclaimer: The jokes are from the Geek-Jokes-api and are randomly selected. That's why they are unfortunately often not funny. :D
Die Dokumentation für Minimax muss noch finalisiert werden. Blocked by #37 und wahrscheinlich noch weiteren Issues.
Kriterien:
Beim Testen ist mir aufgefallen, dass eine Variable in der Minimax Datei eigentlich ns
statt ps
heißen soll und dass der value Funktion zu Beginn ein Parameter fehlt.
Dies soll dieses Issue jetzt fixen.
Shame on me.
Wir sollten in der phase 1 wieder zwei mühlen ermöglichen (vgl. offizielle Turnierregeln)
Dafür müsste theoretisch nur der PR #54 rückgängig gemacht werden...
Shame on me.
Wir sollten in der phase 1 wieder zwei mühlen ermöglichen (vgl. offizielle Turnierregeln)
Dafür müsste nur der Commit b24a62d rückgängig gemacht werden...
Ausgangslage:
((4, 5), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ')))
'b' ist dran und will eine mühle machen auf (1,2):
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', 'b', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ')))
Dann kann er aber keinen Stein von w
entfernen, da sie sich in der Mühle befinden.
AllStates:
{
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), ('b', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', 'b', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', 'b', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', 'b', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 4), (('w', 'b', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', 'b', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', 'b', ' '))),
((4, 4), (('w', ' ', ' ', 'b', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), ('b', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', 'b'))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', 'b', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', 'b', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', 'b', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))),
((4, 4), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', 'b', 'b', ' ', ' ', 'b'), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ')))
}
Der Cache muss bei jeder neuen Ausführung geleert werden, damit es keinen invaliden Cache kommen. (Meeting 2020-12-21)
In dem game
Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.
Kriterien:
In dem gui
Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.
Kriterien:
Eine schönere GUI wird nicht erwartet, aber wenn wir möchten können wir sie vor der Abgabe so richtig fancy (~ Stroetmann) machen.
Um unsere KIs zu testen dürfen wir gegend die andere Gruppe spielen und über die States kommunizieren.
Der englische Name von Mühle ist Nine men's morris. Damit wir kein Denglisch im Projekt haben. Müssen wir zunächst alle Datein umbennen, vorschlag:
nmm-game.ipynb
nmm-game-utils.ipynb
nmm-gui.ipynb
Ist es sinnvoll vor dem Cachen der Daten diese zu Transponieren? Also sollen wir beispielsweise die Ringe in die korrekte Richtung drehen oder Spieler b
und w
tauschen?
PRO
CONTRA
Momentan wird nur die nächste Aktion kommentiert. Nützlich wäre aber auch ein Hinweis, wenn der Spieler etwas ungültiges machen wollte, zum Beispiel eine Mühle vom Gegenspieler entfernen
Ausgangslage:
((5, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' ')))
Spieler 'w' ist dran und möchte einen Stein auf (0,6)
einen Stein setzen und erhält dadurch zwei Mühlen:
((5, 5), (('w', ' ', ' ', 'b', 'w', 'w', 'w', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' ')))
Jetzt dürfte er nur einen Stein entfernen, allStates hat aber nur Zustände mit zwei entfernten Steinen (die entsprechenden Zustände mit X markiert):
{
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', ' ', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', 'w'), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', 'w'))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', 'w', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', 'w', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), ('w', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', 'w', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '), (' ', ' ', ' ', ' ', 'b', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', 'w', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', 'w', ' ', ' '))),
((4, 5), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), (' ', ' ', ' ', ' ', 'b', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', 'w', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', 'w', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', 'w', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', 'w', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', 'w', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', ' ', 'w', 'w', 'w', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', ' ', ' ', ' ', ' '))), // X
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', 'w', 'b', ' ', ' ', ' ', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', 'w', ' ', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' '))),
((4, 5), (('w', ' ', ' ', 'b', 'w', 'w', ' ', 'w'), (' ', ' ', 'b', ' ', ' ', ' ', 'w', ' '), ('b', ' ', ' ', ' ', 'b', ' ', ' ', ' ')))
}
Ich finde den Ausdruck (board[r][c:] + board[r][:c])[0:3]
zu kompliziert. Einfacher wäre:
(board[r] + [board[r][0]])[c:c+3]
Vergleiche auf True
oder False
sollen entfernt werden:
if enable == True
können zu if enable
vereinfacht werden.Wenn die maximale Rekursionstiefe erreicht wurde, muss anstatt einer 0
eine eine simple Heuristik zurück gegeben werden. Sonst spielt die KI quasi blind da nach der maximalen Rekursionstiefe (3-10) meist kein Gewinner feststeht und somit alle Züge gleich aussehen würden.
Beispiele:
Die Testzustände am Anfang von muehle-game-utils.ipynb
sollen in ein eigenes Test-Notebook verschoben werden.
Ausgeschlossen START_STATE
Eine Funktion, die es ermöglicht das Spiel mit der GUI gegen den Algorithmus (minimax
, alphaBeta
-Pruning) zu spielen.
Am Ende der Studienarbeit müssen wir eine sogenannte Retrograde Analysis durchführen.
In dem game-utils
Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.
Kapitel: Player, Stones, PlayerPhase
Kriterien:
Wenn ein Spieler einen Schritt angefangen hat (z.B. stein markiert), ihn wieder abbrechen lassen
Mehr akzente in das spielbrett bringen, zb. die steine schöner machen
Da die finished(s)
Methode nicht nur von dem State abhängt, sondern auch von dem Spieler, der dran ist, muss diese Methode um den Parameter Player p
erweitert werden.
Begründung: Wenn beispielsweise Spieler b
sich nicht mehr bewegen kann und damit eigentlich verloren hätte, aber Spieler w
dran ist und dem Gegener (Spieler b
) den Platz frei machen muss. Dann können wir diesen Fall nicht abbilden und Spieler b
hätte unrechtmäßig verloren.
Die aktuelle maximale Rekursionstiefe von 10 ist zu hoch um angemessen schnell ein Ergebnis zu erhalten. Bei einem Branchfaktor vor ca. 10 wären das bereits 10^10 States die geprüft werden müssten. Hier sollten wir diskutieren und ausprobieren, welcher Branchfaktor schnell genug, bzw. genau genug ist.
What does it mean to execute a Muehle?
Gegebener Vorschlag pounding
In jede Datei muss folgendes in die erste Zeile:
from IPython.core.display import HTML
with open ("style.css", "r") as file:
css = file.read()
HTML(css)
Dazu muss die style.css
Datei hinzugefügt werden und alle Links zu dieser Datei müssen korrekt sein.
Ein Verweis zu den offiziellen Mühle Regeln soll hinzugefügt werden:
README.md
muehle-game.ipynb
Siehe hier
In Phase 3 des Spiels kommt es dazu, dass auch neue nextStates generiert werden, auch wenn ein Spieler weniger als 3 Steine hat und somit verloren hat
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.