
Poker Chipper
Selecione denominações de chip de poker de maneira ideal para jogos em dinheiro usando otimização não linear restrita.
Imagine hospedar um pequeno jogo de pôquer. Você sabe quantos amigos comparecerão, quantas fichas você tem e a compra. Como você escolhe as denominações de chip?
Sem o picador de pôquer, escolher as denominações de chip é manual e propenso a erros. Você primeiro tenta escolher valores que se dividem bem e são fáceis de lembrar. (Como alternativa, lute para lembrar os valores da última vez que você jogou.) Você tenta encontrar uma maneira de fazer com que os valores escolhidos sigam para a compra. Então, você volta sempre que não há chips suficientes para todos ou quando restam muitas fichas. Por fim, você se contenta com uma alocação de chips abaixo do ideal para poder começar a jogar.
Com o picador de pôquer, por outro lado, escolher as denominações de chip é rápido e fácil. Insira o número de jogadores, compre, persianas e número de chips. Depois de esperar um momento pelos resultados matematicamente ideais, você pode salvá -los para a próxima vez ou compartilhá -los com outras pessoas. Se você deseja modificar os resultados, ajuste as "opções avançadas" e as denominações de chip serão recomputadas de acordo.
O Poker Chipper usa a programação não linear mista-inteira (MINLP), que é uma forma de otimização restrita e não-convexa, para escolher denominações de chip de poker de maneira ideal.
A otimização é realizada usando um "solucionador" - neste caso, SCIP. Alguns insumos para o Poker Chipper são traduzidos em restrições de solucionador, que afetam o que as denominações são admissíveis. Outras entradas influenciam a função objetiva do solucionador, que afeta como as denominações candidatas são avaliadas, classificadas e escolhidas. Na interface do usuário, as entradas que afetam as restrições e as entradas que afetam a função objetivo são descritas como influenciando os "requisitos" e "pontuação", respectivamente, de soluções candidatas.
O Poker Chipper é um aplicativo da Web totalmente estático. Em outras palavras, todo o processamento envolvido na execução da otimização ocorre no lado do cliente-inteiramente no navegador do usuário. O solucionador SCIP foi projetado para ser executado nativamente; portanto, o Poker Bundle -o para o navegador compilando o SCIP em WebAssembly (WASM) com o EMSCRIPTEN.
Os links abaixo estão listados na ordem em que o código deve ser lido para entender o aplicativo do nível mais alto ao mais baixo.
src/App.svelte -APLICAÇÃO PRINCIPAL DE ALTO NÍVELsrc/*.svelte - componentes da interface do usuáriosrc/solve.js - Converta as entradas do usuário em modelo MINLP e resolva usando o WASM SCIPsrc/solveWorker.js -Web Worker para executar solucionador em thread não bloqueadorpublic/serviceWorker.js - Trabalhador de Serviço para Cache e Funcionalidade Offlinepublic/* - Manifesto PWA, folha de estilo global, favicons, etc.experiments/* - Exploração do conceito inicial em Python (com Z3, e mais tarde, Scip) e Dockerfile para compilar o SCIP com EMScripttensrc/compiled/* - SCIP compilado para WASM via EMScriptten, além de arquivos de suporte associadosNo diagrama abaixo, as setas rotuladas representam solicitações de busca assíncrona e passagem de mensagens.
Fluxograma LR
A [Sovente Front End] -> | Resolva solicitações | B ["Web Worker
(thread não bloqueador) "]
B -> | Soluções | UM
A <-> | ativo estático | C [Trabalhador de Serviço]
B Ativos estáticos do solucionador | C
C -> | cache | C
C ASTITOS ESTÁTICOS | D [servidor da web]
O Poker Chipper é mantido ativamente. Se não houver comprometimentos recentes, tudo está funcionando bem! Na versão inicial, o código é estável e não há recursos importantes e pendentes que ainda precisam ser adicionados.
Relatórios de bugs e solicitações de recursos por meio de problemas do GitHub são incentivados. As solicitações de puxar com mais de 20 linhas de código provavelmente serão mescladas rapidamente, a menos que associadas à discussão prévia ou acompanhadas de prosa substancial e explicativa em inglês. Em outras palavras, as solicitações de puxar que contêm código sem contexto podem ser mescladas após muito atraso ou podem não ser mescladas.
Como o Poker Chipper é um aplicativo da Web totalmente estático, sem processamento do lado do servidor (fora de servir arquivos imutáveis), é extremamente escalável e possui uma carga de manutenção muito baixa. Como tal, mesmo que algo aconteça comigo, e eu não poderia continuar trabalhando no projeto, a versão pública deve continuar funcionando e disponível on -line, desde que minha conta do GitHub esteja aberta e o domínio jstrieb.github.io esteja ativo.
As melhores maneiras de apoiar o projeto são:
Se você insistir em gastar dinheiro para mostrar seu apoio, faça -o de uma maneira amplamente benéfica. Em particular, as doações para as seguintes organizações me ajudam, além do público geral e usador da Internet:
Poker Chipper não teria sido possível sem ajuda e feedback de: