
Покерный Чиппер
Оптимально выберите деноминации в покерных чипах для кассовых игр, используя ограниченную нелинейную оптимизацию.
Представьте себе, что у вас есть небольшая покерная игра. Вы знаете, сколько друзей будет посещать, сколько у вас чипов и покупки. Как вы выбираете конфессии?
Без покерного чиппер выбор конфессии чипа является ручным и подверженным ошибкам. Сначала вы пытаетесь выбрать значения, которые хорошо делятся друг на друга и легко запомнить. (В качестве альтернативы, изо всех сил пытайтесь вспомнить значения за последний раз, когда вы играли.) Затем вы пытаетесь найти способ сделать выбранные значения суммировать в покупку. Затем вы отступаете, когда не хватает чипов для всех, или когда осталось слишком много чипов. Наконец, вы соглашаетесь на неоптимальное распределение чипов, чтобы на самом деле начать играть.
С помощью Poker Chipper, с другой стороны, выбор конфессии чипа быстрый и простой. Введите количество игроков, купить, жалюзи и количество чипсов. После того, как мгновение ожидая математически оптимальных результатов, вы можете сохранить их в следующий раз или поделиться ими с другими. Если вы хотите изменить результаты, отрегулируйте «расширенные параметры», и деноминации ChIP будут соответствующим образом перечислены.
Poker Chipper использует нелинейное программирование смешанного интеллекта (MINLP), которая является формой ограниченной небывальной оптимизации, чтобы оптимально выбрать конфессии по покерным чипам.
Оптимизация выполняется с использованием «решателя» - в данном случае, Scip. Некоторые входные данные в Poker Chipper переводятся в ограничения решателя, которые влияют на то, что деноминации допустимы. Другие входные данные влияют на целевую функцию решателя, которая влияет на то, как кандидатские деноминации оцениваются, ранжируются и выбираются. В пользовательском интерфейсе входы, влияющие на ограничения, и входы, влияющие на целевую функцию, описываются как влияющие на «требования» и «оценку» соответственно, кандидатов.
Poker Chipper - это полностью статическое веб -приложение. Другими словами, вся обработка, связанная с выполнением оптимизации, происходит на стороне клиента-полностью в браузере пользователя. Решатель SCIP предназначен для того, чтобы работать назначенным, поэтому покерный штурмовый пакет связывает его для браузера, скомпилируя Scip в Webassembly (WASM) с Emscripten.
Приведенные ниже ссылки перечислены в заказе, который должен прочитать код, чтобы понять приложение с самого высокого до самого низкого уровня.
src/App.svelte -основное приложение высокого уровняsrc/*.svelte - компоненты пользовательского интерфейсаsrc/solve.js - конвертировать пользовательские входы в модель MINLP и решить с помощью WASM SCIPsrc/solveWorker.js -Web Worker для запуска Solver в неблокирующем потокеpublic/serviceWorker.js - работник службы для кэширования и функциональности в автономном режимеpublic/* - PWA Manifest, Глобальная таблица стилей, изыскание и т. Д.experiments/* - Изучение начальной концепции в Python (с Z3, так и позже, Scip) и Dockerfile для составления SCIP с помощью Emscriptensrc/compiled/* - scip, скомпилированный в WASM через Emscripten, плюс связанные файлы поддержкиНа приведенной ниже диаграмме, помеченные стрелки представляют собой асинхронные запросы на выборку и передачу сообщений.
Блок -схема LR
[Стройный фронт] -> | Решить запросы | B [»веб -работник
(не блокирующая нить) "]
B -> | Решения | А
A <--> | Статические активы | C [Служба]
B <--> | Статические активы решателя | В
C -> | Кэш | В
C <--> | Статические активы | D [Веб -сервер]
Poker Chipper активно поддерживается. Если недавних коммитов нет, все работает гладко! Начиная с первоначального выпуска, код является стабильным, и нет никаких важных, выдающихся функций, которые еще предстоит добавить.
Отчеты об ошибках и запросы функций с помощью проблем GitHub поощряются. Запросы на привлечение с более чем 20 строк кода вряд ли будут быстро объединены, если только не связаны с предварительным обсуждением или сопровождаются существенной, объяснительной английской прозой. Другими словами, запросы, содержащие код без контекста, могут быть объединены после большой задержки или не могут быть объединены вообще.
Поскольку Poker Chipper является полностью статическим веб-приложением без обработки на стороне сервера (за пределами обслуживания неизменных файлов), оно чрезвычайно масштабируемо и имеет очень низкое бремя обслуживания. Таким образом, даже если со мной что -то случится, и я не мог продолжать работать над проектом, общедоступная версия должна продолжать оставаться функциональной и доступной в Интернете, пока моя учетная запись Github открыта, а домен Jstrieb.github.io активен.
Лучшие способы поддержки проекта - это:
Если вы настаиваете на том, чтобы потратить деньги, чтобы показать свою поддержку, пожалуйста, сделайте это так, чтобы это было широко выгодно. В частности, пожертвования для следующих организаций помогают мне, в дополнение к общему, использующему интернет-публику:
Чиппер покера был бы невозможным без помощи и отзывов от: