
Chipe de póker
Seleccione óptimamente las denominaciones de chip de póker para juegos de efectivo utilizando optimización restringida y no lineal.
Imagine organizar un pequeño juego de póker. Sabes a cuántos amigos asistirán, cuántas chips tienes y la compra.
Sin póker Chipper, la recolección de denominaciones de chips es manual y propenso a errores. Primero intenta elegir valores que se dividan bien y son fáciles de recordar. (Alternativamente, lucha por recordar los valores de la última vez que jugó). A continuación, intenta encontrar una manera de hacer que los valores elegidos se suman a la compra. Luego, retrocede cuando no haya suficientes chips para todos, o cuando quedan demasiados chips. Finalmente, te conformas con una asignación de chips subóptimas para que puedas comenzar a jugar.
Con Poker Chipper, por otro lado, elegir denominaciones de chips es rápido y fácil. Ingrese el número de jugadores, compre, persianas y número de chips. Después de esperar un momento los resultados matemáticamente óptimos, puede guardarlos para la próxima vez o compartirlos con otros. Si desea modificar los resultados, ajuste las "opciones avanzadas", y las denominaciones de chip se recomputarán en consecuencia.
Poker Chipper utiliza programación no lineal de entrada mixta (MINLP), que es una forma de optimización restringida y no convexa, para elegir óptimamente las denominaciones de chips de póker.
La optimización se realiza utilizando un "solucionador", en este caso, SCIP. Algunas entradas al póker Chipper se traducen en restricciones de solucionador, que afectan las denominaciones admisibles. Otras entradas influyen en la función objetivo del solucionador, que afecta la forma en que se evalúan, clasifican y elegen las denominaciones candidatas. En la interfaz de usuario, las entradas que afectan las restricciones y las entradas que afectan la función objetivo se describen como influyendo en los "requisitos" y la "puntuación", respectivamente, de las soluciones candidatas.
Poker Chipper es una aplicación web totalmente estática. En otras palabras, todo el procesamiento involucrado en la realización de la optimización se produce del lado del cliente, completamente en el navegador del usuario. El solucionador SCIP está diseñado para funcionar de forma nativa, por lo que el póker Chipper lo inclina para el navegador compilando SCIP a WebAssembly (WASM) con EMSCRENTEN.
Los enlaces a continuación se enumeran en el orden, el código debe leerse para comprender la aplicación del nivel más alto al más bajo.
src/App.svelte -Aplicación principal de alto nivelsrc/*.svelte - Componentes de UIsrc/solve.js : convierta las entradas de los usuarios al modelo MINLP y resuelva usando WASM SCIPsrc/solveWorker.js -Trabajador web para ejecutar el solucionador en hilo no bloqueadopublic/serviceWorker.js - Trabajador de servicios para la funcionalidad de almacenamiento en caché y fuera de líneapublic/* - PWA Manifest, Global Stylesheet, Favicons, etc.experiments/* - Exploración del concepto inicial en Python (con Z3 y más tarde, SCIP) y Dockerfile para compilar SCIP con Emscriptensrc/compiled/* - SCIP Compilado a WASM a través de EMScripten, además de archivos de soporte asociadosEn el diagrama a continuación, las flechas etiquetadas representan solicitudes de búsqueda asíncrona y aprobación de mensajes.
diagrama de flujo LR
A [esbelto delantero] -> | Resolver solicitudes | B ["Trabajador web
(hilo sin bloqueo) "]
B -> | Soluciones | A
A <--> | Activos estáticos | C [Trabajador de servicio]
B <-> | Activos estáticos de solucionador | do
C -> | Cache | do
C <--> | Activos estáticos | D [servidor web]
Poker Chipper se mantiene activamente. Si no hay compromisos recientes, ¡todo está funcionando sin problemas! A partir de la versión inicial, el código es estable y no hay características importantes y sobresalientes que queden por agregar.
Se alientan los informes de errores y las solicitudes de funciones a través de problemas de GitHub. Es poco probable que las solicitudes de extracción con más de 20 líneas de código se fusionen rápidamente, a menos que se asocie con una discusión previa o acompañada de una prosa en inglés sustancial y explicativa. En otras palabras, las solicitudes de extracción que contienen código sin contexto pueden fusionarse después de mucho retraso, o no se pueden fusionar en absoluto.
Dado que Poker Chipper es una aplicación web totalmente estática sin procesamiento del lado del servidor (fuera de servir archivos sin cambios), es extremadamente escalable y tiene una carga de mantenimiento muy baja. Como tal, incluso si algo me sucediera a mí, y no podría seguir trabajando en el proyecto, la versión pública debería seguir siendo funcional y disponible en línea siempre que mi cuenta de GitHub esté abierta y el dominio jstrieb.github.io esté activo.
Las mejores formas de apoyar el proyecto son:
Si insiste en gastar dinero para mostrar su apoyo, hágalo de una manera que sea ampliamente beneficiosa. En particular, las donaciones a las siguientes organizaciones me ayudan, además del público general, que usa a Internet:
Poker Chipper no hubiera sido posible sin ayuda y retroalimentación de: