
포커 치퍼
제한된 비선형 최적화를 사용하여 현금 게임에 대한 포커 칩 명칭을 최적으로 선택하십시오.
작은 포커 게임을 주최한다고 상상해보십시오. 당신은 몇 명의 친구가 참석할 것인지, 얼마나 많은 칩을 가지고 있고, 구매를 알고 있습니다. 칩 교파를 어떻게 선택합니까?
포커 치퍼가 없으면 칩 교파를 선택하는 것은 수동 및 오류가 발생하기 쉽습니다. 먼저 서로를 멋지게 나누고 기억하기 쉬운 값을 선택하려고합니다. (또는 마지막으로 플레이 한 마지막으로 값을 회상하기 위해 고군분투합니다.) 다음에 선택한 값을 구매에 합산하는 방법을 찾으려고 노력합니다. 그러면 모든 사람을위한 칩이 충분하지 않을 때마다 또는 너무 많은 칩이 남았을 때 배 트랙을 역 추적합니다. 마지막으로, 당신은 실제로 재생을 시작할 수 있도록 차선 칩 할당에 정착합니다.
반면에 포커 치퍼의 경우 칩 교파를 선택하는 것은 빠르고 쉽습니다. 플레이어 수, 구매, 블라인드 및 칩 수를 입력하십시오. 수학적으로 최적의 결과를 잠시 기다린 후에는 다음에 저장하거나 다른 사람들과 공유 할 수 있습니다. 결과를 수정하려면 "고급 옵션"을 조정하면 칩 명칭이 그에 따라 재 계산됩니다.
Poker Chipper는 MILP (Mixed-Integer 비선형 프로그래밍)를 사용하여 구속되지 않은 비 값 비록 최적화의 한 형태로 포커 칩 교파를 최적으로 선택합니다.
최적화는 "솔버"를 사용하여 수행됩니다.이 경우 Scip. 포커 치퍼에 대한 일부 입력은 솔버 제약으로 변환되며, 이는 허용되는 교단에 영향을 미칩니다. 다른 입력은 솔버의 객관적인 기능에 영향을 미치며, 이는 후보 교파가 평가, 순위 및 선택된 방법에 영향을 미칩니다. 사용자 인터페이스에서 구속 조건에 영향을 미치는 입력 및 목적 함수에 영향을 미치는 입력은 각각 후보 솔루션의 "요구 사항"및 "점수"에 영향을 미치는 것으로 설명됩니다.
포커 치퍼는 완전히 정적 인 웹 애플리케이션입니다. 다시 말해, 최적화 수행과 관련된 모든 처리는 클라이언트 측-전적으로 사용자의 브라우저에서 발생합니다. Scip Solver는 기본적으로 실행되도록 설계되었으므로 Poker Chipper는 EMScripten을 사용하여 SCIP를 WASM (WebAssembly)으로 컴파일하여 브라우저를 위해 묶습니다.
아래 링크는 응용 프로그램을 최고 수준에서 가장 낮은 레벨에서 가장 낮은 수준에서 이해하기 위해 코드를 읽어야하는 순서로 나열됩니다.
src/App.svelte 주요 고급 응용 프로그램src/*.svelte - UI 구성 요소src/solve.js - 사용자 입력을 MINLP 모델로 변환하고 WASM SCIP를 사용하여 해결합니다.src/solveWorker.js 비 블로킹 스레드에서 솔버를 실행하는 웹 워커public/serviceWorker.js - 캐싱 및 오프라인 기능을위한 서비스 작업자public/* - PWA 매니페스트, 글로벌 스타일 시트, 파비콘 등experiments/* - 파이썬에서의 초기 개념 탐색 (Z3 및 나중에 SCIP 포함) 및 Emscripten을 사용하여 Scip을 컴파일하기위한 Dockerfile.src/compiled/* - emscripten을 통해 WASM에 컴파일 된 SCIP 및 관련 지원 파일아래 다이어그램에서 레이블이 붙은 화살표는 비동기 페치 요청 및 메시지 전달을 나타냅니다.
흐름도 LR
[svelte 프론트 엔드] -> | 요청 해결 | B [ "웹 워커
(비 차단 스레드) "]
b-> | 솔루션 | 에이
a <--> | 정적 자산 | C [서비스 작업자]
b <--> | 솔버 정적 자산 | 기음
C-> | | 기음
C <-> | 정적 자산 | D [웹 서버]
포커 치퍼는 적극적으로 유지됩니다. 최근 커밋이 없다면 모든 것이 원활하게 실행됩니다! 초기 릴리스 시점에서 코드는 안정적이며 추가 할 주요 기능은 없습니다.
GitHub 문제를 통한 버그 보고서 및 기능 요청이 권장됩니다. 20 줄 이상의 코드가있는 풀 요청은 사전 토론과 관련이 없거나 실질적인 설명적인 영어 산문을 동반하지 않는 한 빠르게 병합되지 않을 것입니다. 다시 말해, 컨텍스트가없는 코드가 포함 된 요청은 많은 지연 후 병합 될 수 있거나 전혀 병합되지 않을 수 있습니다.
Poker Chipper는 서버 측 처리가없는 완전히 정적 웹 애플리케이션이므로 (변하지 않는 파일을 제공하는 것 외에) 매우 확장 가능하며 유지 보수 부담이 매우 낮습니다. 따라서, 나에게 어떤 일이 일어 났고 프로젝트에서 계속 일할 수 없더라도 Github 계정이 열리고 jstrieb.github.io 도메인이 활성화되는 한 공개 버전은 계속해서 기능을 유지하고 온라인으로 사용할 수 있어야합니다.
프로젝트를 지원하는 가장 좋은 방법은 다음과 같습니다.
귀하의 지원을 보여주기 위해 돈을 쓰는 것을 고집한다면, 널리 유익한 방식으로 그렇게하십시오. 특히, 다음 조직에 대한 기부금은 일반적인 인터넷 사용 대중 외에도 도움이됩니다.
포커 치퍼는 도움과 피드백 없이는 불가능했을 것입니다.