Coder Social home page Coder Social logo

dhbw-studienarbeit-muehle's Introduction

Hi there 👋

Joke of the day (Fri May 17 2024)

My software never has bugs. It just develops random features.

Last update: Fri, 17 May 2024 00:40:06 GMT

Update joke



Disclaimer: The jokes are from the Geek-Jokes-api and are randomly selected. That's why they are unfortunately often not funny. :D

dhbw-studienarbeit-muehle's People

Contributors

benfu99 avatar jstsddg avatar nclskfm avatar r-franzke avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

dhbw-studienarbeit-muehle's Issues

Docs: minimax

Die Dokumentation für Minimax muss noch finalisiert werden. Blocked by #37 und wahrscheinlich noch weiteren Issues.

Kriterien:

  • Jede Funktion sollte kommentiert sein.
    • Der Kommentar sollte in einer Markdown-Zelle stehen.
    • Eingabe und Ausgabe sollten beschrieben sein.
    • Falls Nebeneffekte vorhanden sind, sollten diese erläutert werden.

Game: Sonderfall Stein entfernen in Mühle

Sonderfall 1) "Im Prinzip dürfen keine Steine aus bestehenden Mühlen genommen werden. Nach offiziellen Turnierregeln ist dies jedoch erlaubt, wenn kein anderer Stein zur Verfügung steht."

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'), (' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ')))
}

Minimax: Cache leeren

Der Cache muss bei jeder neuen Ausführung geleert werden, damit es keinen invaliden Cache kommen. (Meeting 2020-12-21)

Docs: game

In dem game Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.

Kriterien:

  • Jede Funktion sollte kommentiert sein.
    • Der Kommentar sollte in einer Markdown-Zelle stehen.
    • Eingabe und Ausgabe sollten beschrieben sein.
    • Falls Nebeneffekte vorhanden sind, sollten diese erläutert werden.
  • Bevor Sie erklären, was der Start-Zustand ist, sollten Sie erklären, wie Zustände allgemein abgespeichert werden.
    • Ausfürhliche Definition!
  • Sie sollten dann auch ein Beispiel für einen state gebe
  • Der Begriff ring muss genauer erklärt werden.

Docs: gui

In dem gui Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.

Kriterien:

  • Jede Funktion sollte kommentiert sein.
    • Der Kommentar sollte in einer Markdown-Zelle stehen.
    • Eingabe und Ausgabe sollten beschrieben sein.
    • Falls Nebeneffekte vorhanden sind, sollten diese erläutert werden.

GUI: Noch schöner?!

Eine schönere GUI wird nicht erwartet, aber wenn wir möchten können wir sie vor der Abgabe so richtig fancy (~ Stroetmann) machen.

Project: Zu "Nine Men's Morris" umbenennen

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
  • etc.

⚠️ Diese Story durchgeführt werden, sobald #52 gemergt wurde. In der Zwischenzeit sollten keine Stories angefangen werden! ⚠️

Minimax: Transponieren

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

  • Damit wird die Wahrscheinlichkeit eines wiederkehrenden State wahrscheinlicher.

CONTRA

  • Ein Cache-Hit bleibt unwahrscheinlich, wenn wir eine sehr geringe Rekursionstiefe haben.

GUI: Hinweise als Text

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

Game: Sonderfall zwei Mühlen in Phase 1

Sonderfall 2) "Werden während der Setzphase durch einen Spielstein zwei Mühlen gleichzeitig gebildet, darf dennoch nur ein Spielstein des Gegners entfernt werden."

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', ' ', ' ', ' ')))
}

Project: Anti-Pattern entfernen

Vergleiche auf True oder False sollen entfernt werden:

  • Tests der Form if enable == True können zu if enable vereinfacht werden.

Minimax: Heuristik für max. Rekursion

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:

  • Anzahl der Steine vs. Anzahl der gegnerischen Steine
  • Anzahl der Mühlen
  • Anzahl der mögliche Mühlen
  • ...

AI: play_game

Eine Funktion, die es ermöglicht das Spiel mit der GUI gegen den Algorithmus (minimax, alphaBeta-Pruning) zu spielen.

Docs: game-utils (Player, Stones, PlayerPhase)

In dem game-utils Notebook müssen Kommentare und die Dokumentation in Markdown Format hinzugefügt werden.

Kapitel: Player, Stones, PlayerPhase

Kriterien:

  • Jede Funktion sollte kommentiert sein.
    • Der Kommentar sollte in einer Markdown-Zelle stehen.
    • Eingabe und Ausgabe sollten beschrieben sein.
    • Falls Nebeneffekte vorhanden sind, sollten diese erläutert werden.

Game: finished(s, p)

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.

Minimax: Maximale Rekursionstiefe

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.

Project: Mühle zu "Mill" umbenennen

Der englische Name einer Mühle ist Mill. Damit wir kein Denglisch im Projekt haben. Müssen wir zunächst alle Datein umbennen, vorschlag:

  • findMills()
  • countMills()
  • etc.

⚠️ Diese Story durchgeführt werden, sobald #61 gemergt wurde. In der Zwischenzeit sollten keine Stories angefangen werden! ⚠️

Project: styles.css hinzufügen

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.

Bug: Unendliche nextStates in Phase 3

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.