
Poker -Chipper
Wählen Sie optimal Poker -Chip -Konfessionen für Cash Games mit eingeschränkter, nichtlinearer Optimierung.
Stellen Sie sich vor, Sie veranstalten ein kleines Pokerspiel. Sie wissen, wie viele Freunde teilnehmen werden, wie viele Chips Sie haben und welche Einkäufe in Kaufe sind. Wie wählen Sie Chip -Konfessionen aus?
Ohne Poker-Chipper ist die Auswahl von Chip-Konfessionen manuell und fehleranfällig. Sie versuchen zuerst, Werte auszuwählen, die sich gut teilen und sich leicht erinnern können. (Alternativ haben Sie Schwierigkeiten, die Werte vom letzten Mal zu erinnern.) Sie versuchen als nächstes, einen Weg zu finden, um die ausgewählten Werte zum Einkauf zu machen. Dann können Sie zurückverfolgen, wenn es nicht genügend Chips für alle gibt oder wenn zu viele Chips übrig sind. Schließlich zufrieden geben Sie sich mit einer suboptimalen Chip -Zuweisung zufrieden, damit Sie tatsächlich mit dem Spielen beginnen können.
Mit Poker Chipper hingegen ist die Auswahl von Chip -Konfessionen schnell und einfach. Geben Sie die Anzahl der Spieler ein, kaufen Sie sich, Jalousien und Anzahl der Chips. Nachdem Sie einen Moment auf die mathematisch optimalen Ergebnisse gewartet haben, können Sie sie für das nächste Mal speichern oder mit anderen teilen. Wenn Sie die Ergebnisse ändern möchten, passen Sie die "erweiterten Optionen" an, und die Chip -Konfessionen werden entsprechend neu berechnet.
Poker Chipper verwendet die nichtlineare Programmierung von Mixed-Inteer-Programmierung (MINLP), eine Form der eingeschränkten, nicht konvexen Optimierung, um Poker-Chip-Konfessionen optimal auszuwählen.
Die Optimierung erfolgt mit einem "Solver" - in diesem Fall SCIP. Einige Eingaben für Poker Chipper werden in Löserbeschränkungen übersetzt, die sich auf die zulässigen Konfessionen auswirken. Andere Eingaben beeinflussen die objektive Funktion des Lösers, die sich auf die Bewertung, Rangliste und Auswahl von Kandidaten auswirkt. In der Benutzeroberfläche werden Eingänge, die Einschränkungen und Eingaben, die die Objektivfunktion beeinflussen, beeinflussen, die "Anforderungen" und "Punktzahl" von Kandidatenlösungen beeinflussen.
Poker Chipper ist eine vollständige Webanwendung. Mit anderen Worten, die gesamte Verarbeitung, die mit der Durchführung der Optimierung verbunden ist, erfolgt die clientseitige-vollständig im Browser des Benutzers. Der SCIP -Solver ist so konzipiert, dass er nativ ausgeführt wird. Poker Chipper bündelt es für den Browser, indem er SCIP mit EMSCIPTEN mit WebAssembly (WASM) zusammenstellt.
Die folgenden Links sind in der Reihenfolge aufgeführt, die der Code gelesen werden sollte, um die Anwendung von der höchsten bis niedrigsten Ebene zu verstehen.
src/App.svelte -Hauptanwendung auf hoher Ebenesrc/*.svelte - UI -Komponentensrc/solve.js - Benutzereingaben in das MinLP -Modell konvertieren und mit WASM -SCIP lösensrc/solveWorker.js -Web Worker, um Löser in nicht blockierter Thread auszuführenpublic/serviceWorker.jspublic/* - PWA Manifest, Global Stylesheet, Favicons usw.experiments/* - Erforschung des ersten Konzepts in Python (mit Z3 und später, SCIP) und Dockerfile zum Zusammenstellen von SCIP mit EMSCIPTENsrc/compiled/* - SCIP, kompiliert mit WASM über EMSCIPTEN sowie zugehörige Support -DateienIm folgenden Diagramm stellen beschriftete Pfeile asynchrone Abrufanforderungen und Nachrichtenübergabe dar.
Flussdiagramm LR
A [SufleTe Front End] -> | Anfragen lösen | B ["Webarbeiter
(Nicht blockierender Thread) "]
B -> | Lösungen | A
A <-> | Statische Vermögenswerte | C [Servicearbeiter]
B <--> | Löser statisches Vermögen | C
C -> | Cache | C
C <-> | Statische Vermögenswerte | D [Webserver]
Poker Chipper ist aktiv aufrechterhalten. Wenn es keine aktuellen Commits gibt, läuft alles reibungslos! Zum Zeitpunkt der ersten Veröffentlichung ist der Code stabil, und es gibt keine wichtigen, ausstehenden Funktionen, die noch hinzugefügt werden müssen.
Fehlerberichte und Feature -Anfragen über GitHub -Probleme werden gefördert. Es ist unwahrscheinlich, dass die Anfragen mit mehr als 20 Codezeilen schnell schnell verschmolzen werden, es sei denn, sie sind mit einer vorherigen Diskussion verbunden oder von einer erheblichen, erklärenden englischen Prosa begleitet. Mit anderen Worten, ziehen Sie Anfragen, die Code ohne Kontext enthalten, nach viel Verzögerung oder dürfen überhaupt nicht zusammengeführt werden.
Da Poker Chipper eine voll statische Webanwendung ohne serverseitige Verarbeitung ist (außerhalb des Servierens unveränderlicher Dateien), ist sie äußerst skalierbar und hat eine sehr geringe Wartungsbelastung. Selbst wenn mir etwas passieren sollte und ich nicht weiter an dem Projekt arbeiten konnte, sollte die öffentliche Version weiterhin funktional und online verfügbar bleiben, solange mein Github -Konto geöffnet ist und die Domain jstrieb.github.io aktiv ist.
Die besten Möglichkeiten zur Unterstützung des Projekts sind:
Wenn Sie darauf bestehen, Geld auszugeben, um Ihre Unterstützung zu zeigen, tun Sie dies bitte so gut wie vorteilhaft. Insbesondere Spenden an die folgenden Organisationen helfen mir zusätzlich zur allgemeinen, internetverbrauchten Öffentlichkeit:
Poker Chipper wäre ohne Hilfe und Feedback nicht möglich gewesen: