Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Mühlespiel KI
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 571
Wohnort: Jüterbog

BeitragVerfasst am: 09.09.2015, 09:34    Titel: Antworten mit Zitat

@nemored:
Wäre denn von meinem Zeugs irgendwas bezüglich Minimax zu gebrauchen? ein einfaches ja würde genügen um mich mal damit intensiver auseinander zu setzen.
lächeln

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4730
Wohnort: ~/

BeitragVerfasst am: 09.09.2015, 12:25    Titel: Antworten mit Zitat

Ganz ehrlich, ich habe es mir noch nicht angeschaut. happy Aber prinzipiell ist jede Bewertungsfunktion zunächst einmal für Minimax brauchbar, und wenn sie dann doch nicht so taugt, kann man anschließend an den Bewertungskriterien feilen. Der Minimax-Algorithmus drumherum ist davon dann unabhängig.

Vielleicht komme ich heute noch dazu, mir das anzusehen, dann sage ich Bescheid.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.

-----

"Das wissen doch sowieso nur Nerdinauten, die Schlaumeierologie studiert haben." - coldmirror
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 194
Wohnort: Frankreich

BeitragVerfasst am: 09.09.2015, 14:22    Titel: Antworten mit Zitat

Hallo!

Ein hübsch Programm hier:

http://nine-mens-morris.net/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 571
Wohnort: Jüterbog

BeitragVerfasst am: 12.09.2015, 10:11    Titel: Antworten mit Zitat

Die letzten vier Tage hab ich mir den Kopf zermartert wie das mit dem Minimax so funktionieren könnte... ich glaube mittlerweile eine Vorstellung zu haben:
Ich mache alle Züge bis zu einer bestimmten Tiefe, bewerte diese und nehme dann den "besten" der mir vom Gegenspieler übrig gelassenen schlechten Züge. grinsen

Nur um meine Vorstellung weiter zu strapazieren:
Wenn ein Zug bedeuten würde man könnte dem Gegner ein Stein klauen... Um herauszufinden welcher fehlende Stein den größten Schaden anrichtet, ist dann wohl wieder ein Suchbaum notwendendig, der wie eine zusätzliche Wucherung herauswächst? lächeln

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1055
Wohnort: Niederbayern

BeitragVerfasst am: 12.09.2015, 13:49    Titel: Antworten mit Zitat

Muttonhead hat Folgendes geschrieben:
Die letzten vier Tage hab ich mir den Kopf zermartert wie das mit dem Minimax so funktionieren könnte... ich glaube mittlerweile eine Vorstellung zu haben:
Ich mache alle Züge bis zu einer bestimmten Tiefe, bewerte diese und nehme dann den "besten" der mir vom Gegenspieler übrig gelassenen schlechten Züge. grinsen

Nur um meine Vorstellung weiter zu strapazieren:
Wenn ein Zug bedeuten würde man könnte dem Gegner ein Stein klauen... Um herauszufinden welcher fehlende Stein den größten Schaden anrichtet, ist dann wohl wieder ein Suchbaum notwendendig, der wie eine zusätzliche Wucherung herauswächst? lächeln

Mutton

Ich habe selber noch keine Idee, wie man das am besten machen könnte?
Mühle ist doch nicht so einfach wie ich gedacht habe. Habe mich aber die letzten paar Tage nicht mehr damit beschäftigt. Muss mir das nochmal genauer ansehen. Was mir eben noch einfiel: Man könnte jeden möglichen Zug prüfen ob dieser die Partie beendet. Sei es durch Zugunfähigkeit oder durch wegnehmen des drittletzten Steines.
Also fiktiv Zug ausführen und Stellung auf Zugunfähigkeit prüfen.

Zugunfähigkeit ist bei meinem Testprogramm ja bereits drin!

Letztens habe ich eine Schachdatenbankdatei mit dem Texteditor geöffnet und so was ähnliches wie das hier gesehen:
Code:
����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

Welche Verschlüselung steckt da dahinter? Man sieht lauter Vierecke! Und auch Leerzeichen sind in großer Menge vorhandenZuerst habe ich gedacht, was ist denn das? Nun weiß ich aber, dass das verschlüsselt wurde? Vielleicht hat das von euch schon einer mal irgendwo gesehen?

Edit:
Man sieht hier gar nichts? Ich habe leider kein Bild von der Textdatei!

Edit2: https://www.freebasic-portal.de/porticula/verschluesselung-txt-1811.html
Einfach die Datei downloaden und Inhalt als .txt speichern, dann sieht man was.

Gruß
Alwim
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4730
Wohnort: ~/

BeitragVerfasst am: 12.09.2015, 15:21    Titel: Antworten mit Zitat

@ALWIM: Ich vermute stark, dass die Daten nicht verschlüsselt sind, sondern einfach nur in einem platzsparenden binären Format gespeichert wurden. Eine Schachdatenbank in für Menschen lesbarer Form zu speichern halte ich für sehr ineffizient.

@Muttonhead und andere Minimax-Interessierte:
Mein Minimax-Gedankengang läuft folgendermaßen: Du machst rekursiv mehrere Züge mit wechselnder Spielerseite (die Tiefe der Suche ergibt dann die Stärke der AI). Auf Ebene 1 führt man alle möglichen Züge nacheinander durch (und macht sie am Ende wieder rückgängig) und lässt dafür eine Antwort des Gegners berechnen (Ebene 2). Ebene 2 macht dasselbe: alle möglichen Züge durchführen und einen Gegenzug dazu anfordern. An unterster Ebene wird dann lediglich das Spielbrett bewertet und an die nächsthöhere Ebene zurückgegeben.

Aus allen Zügen innerhalb einer Ebene sucht sich der Computer denjenigen heraus, bei dem der Gegnerzug am schlechtesten abschneidet. Das sollte dann der beste Zug für ihn sein, und diesen besten Wert gibt er an die nächsthöhere Ebene zurück. Diese sucht sich auch wieder unter all diesen besten Werten denjenigen heraus, welcher der schlechteste ist; usw. Die Bewertungsfunktion selbst wird also nur auf unterster Ebene aufgerufen (da natürlich dann wegen der rekursiven Verzeigung sehr sehr häufig); alle anderen Ebenen "bewerten" anhand der Rückgabe der nächsttieferen Ebene.

An einem konkreten Beispiel bedeutet das: Wenn du einen Zug machen kannst, mit dem du den Gegner einsperrst, liefert dir die nächste Rekursionebene einen extrem schlechten Wert (Gegner hat verloren). Das wird dann wohl der schlechteste Wert unter allen anderen möglichen Zügen sein, weshalb du diesen Zug auswählst und negativ zurückgibst (also einen sehr hohen positiven Wert: ich werde gewinnen). Die nächsthöhere Ebene wird nun versuchen, diesen Zug, mit dem die tiefere Ebene einen so hohen Wert erreichen konnte, zu vermeiden, sprich: dort wird versucht, einen Zug zu machen, mit dem der Gegner nicht sofort gewinnen kann.

Ich habe im 2D-Spieleprogrammierbüchlein einen Mini-Minimax-Algorithmus für ein Nim-Spiel drin. Da es hier nur drei mögliche Bewertungssituationen gibt (gewonnen, verloren, ungewiss), ist die Bewertungsfunktion extrem einfach und wurde gleich in die Minimax-Prozedur eingebaut (wird aber trotzdem nur auf unterster Ebene verwendet). Das erste Mal mit Minimax beschäftigt habe ich mich für einen Programmierwettbewerb mit meinem Spiel Major; da habe ich aber schon seit Jahren nicht mehr reingeschaut, und das ist noch für fbc v0.17. Mit -lang deprecated könnte es sich vielleicht copilieren lassen.
(Falls du den Highscore suchst, der funktioniert soweit ich weiß nicht ...)

@Roland: Wirklich ein schönes Programm. lächeln
Ich habe schon eine ganze Weile nach einer guten und vielseitiger Mühle-Umsetzung für Linux gesucht und nicht gesehen, dass ich dieses Programm in den Paketquellen habe. Nur die Berechnungstiefe muss ich kräftig nach unten schrauben (oder nach oben? auf jeden Fall in Richtung einfach lachen )


edit: fehlenden Link eingefügt
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.

-----

"Das wissen doch sowieso nur Nerdinauten, die Schlaumeierologie studiert haben." - coldmirror


Zuletzt bearbeitet von nemored am 12.09.2015, 19:48, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 571
Wohnort: Jüterbog

BeitragVerfasst am: 12.09.2015, 19:45    Titel: Antworten mit Zitat

@nemored: weisst du wie verzweifelt man ist wenn man denkt man operiert mit
zwei Werten, einem Minimal und einem MaximalWert... grinsen

man bekommt es nicht zusammen

http://www.trinimon.de/Chess/ChessGame/Develop/chs_min.htm
der kleine Suchbaum und die Darstellung als Funktion min(,) und max(,) da hatte ich eine Eingebung.
lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4730
Wohnort: ~/

BeitragVerfasst am: 12.09.2015, 19:55    Titel: Antworten mit Zitat

Ich wurde eben darauf aufmerksam gemacht, dass mein Nim-Spiel-Link gar nicht drin steht; ich habe ihn jetzt oben ergänzt. grinsen

Ja, eigentlich arbeitest du nur mit einem Wert; der Minimalwert des Gegners ist der Maximalwert für dich. Die größere Herausforderung besteht (neben einer guten Bewertungsfunktion) darin, die Suche schnell zu machen, indem man die Züge geschickt vorsortiert und die Rekursion frühzeitig abbricht, wenn das Ergebnis nicht mehr besser als das bisher beste werden kann. Das wäre dann aber schon Alpha-Beta.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.

-----

"Das wissen doch sowieso nur Nerdinauten, die Schlaumeierologie studiert haben." - coldmirror
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz