
البوكر chipper
حدد طوائف رقائق البوكر على النحو الأمثل للألعاب النقدية باستخدام التحسين المقيد وغير الخطي.
تخيل استضافة لعبة البوكر الصغيرة. أنت تعرف عدد الأصدقاء الذين سيحضرون ، وكم عدد الرقائق التي لديك ، والشراء. كيف تختار طوائف الرقائق؟
بدون chipper البوكر ، فإن اختيار طوائف الرقائق هو يدوي ومعرض للخطأ. تحاول أولاً اختيار القيم التي تقسم بعضها البعض بشكل جيد ويسهل تذكرها. (بدلاً من ذلك ، تكافح لاستدعاء القيم من آخر مرة لعبت فيها.) تحاول بعد ذلك إيجاد طريقة لجعل القيم المختارة مبلغًا للشراء. ثم ، يمكنك التراجع كلما لم تكن هناك رقائق كافية للجميع ، أو عندما يكون هناك الكثير من الرقائق المتبقية. أخيرًا ، يمكنك الاستقرار في تخصيص رقائق دون المستوى الأمثل حتى تتمكن من البدء في اللعب بالفعل.
مع chipper من البوكر ، من ناحية أخرى ، فإن اختيار الطوائف الرقمية سريعة وسهلة. أدخل عدد اللاعبين ، وشراء ، والستائر ، وعدد الرقائق. بعد انتظار لحظة للنتائج المثلى من الناحية الرياضية ، يمكنك حفظها في المرة القادمة ، أو مشاركتها مع الآخرين. إذا كنت ترغب في تعديل النتائج ، فقم بضبط "الخيارات المتقدمة" ، وسيتم إعادة حساب طوائف الرقائق وفقًا لذلك.
يستخدم Poker Chipper البرمجة غير الخطية المختلطة (MINLP) ، وهو شكل من أشكال التحسين المقيد وغير المقيد ، لاختيار طوائف رقائق البوكر على النحو الأمثل.
يتم إجراء التحسين باستخدام "Solver" - في هذه الحالة ، Scip. تتم ترجمة بعض المدخلات إلى chipper البوكر إلى قيود حلال ، والتي تؤثر على الطوائف المقبولة. تؤثر المدخلات الأخرى على الوظيفة الموضوعية للحلور ، والتي تؤثر على كيفية تقييم الطوائف المرشح وتصنيفها واختيارها. في واجهة المستخدم ، يتم وصف المدخلات التي تؤثر على القيود ، والمدخلات التي تؤثر على الوظيفة الموضوعية على أنها تؤثر على "المتطلبات" و "النتيجة" ، على التوالي ، من الحلول المرشحة.
Poker Chipper هو تطبيق ويب ثابت بالكامل. بمعنى آخر ، تحدث كل المعالجة التي تنطوي عليها أداء التحسين من جانب العميل-بالكامل في متصفح المستخدم. تم تصميم Scip Solver لتشغيله أصليًا ، لذا فإن لعبة البوكر تتجنب ذلك للمتصفح عن طريق تجميع Scip إلى Webassembly (WASM) مع emscripten.
يتم سرد الروابط أدناه بالترتيب ، ويجب قراءة الرمز لفهم التطبيق من أعلى مستوى إلى أدنى مستوى.
src/App.svelte تطبيق رئيسي عالي المستوىsrc/*.sveltesrc/solve.js - تحويل مدخلات المستخدم إلى نموذج MINLP وحل باستخدام WASM SCIPsrc/solveWorker.js عامل الويب لتشغيل Solver في موضوع غير محظورpublic/serviceWorker.js - عامل خدمة للتخزين المؤقت والوظائف غير المتصلة بالإنترنتpublic/* - PWA Manifest ، ورقة الأنماط العالمية ، Favicons ، إلخ.experiments/* - استكشاف المفهوم الأولي في Python (مع كل من Z3 ، ثم Scip) ، و Dockerfile لتجميع scip مع emscriptensrc/compiled/* - SCIP تم تجميعها إلى WASM عبر emscripten ، بالإضافة إلى ملفات الدعم المرتبطة بهافي الرسم البياني أدناه ، تمثل الأسهم المسمى طلبات الجلب غير المتزامنة ومرور الرسائل.
مخطط انسيابي LR
A [Svelte Front Wind] -> | حل الطلبات | ب ["عامل الويب
(موضوع غير محظور) "]
ب -> | حلول | أ
A <-> | الأصول الثابتة | ج [عامل الخدمة]
B <-> | Solver Static Assets | ج
ج -> | ذاكرة التخزين المؤقت | ج
C <-> | الأصول الثابتة | د [خادم الويب]
يتم الحفاظ على chipper البوكر بنشاط. إذا لم تكن هناك ارتباطات حديثة ، كل شيء يعمل بسلاسة! اعتبارًا من الإصدار الأولي ، يكون الرمز مستقرًا ، ولا توجد ميزات رئيسية متميزة لا يزال يتعين إضافتها.
يتم تشجيع تقارير الأخطاء وطلبات الميزات عبر مشكلات GitHub. من غير المرجح أن يتم دمج طلبات السحب بأكثر من 20 سطرًا من التعليمات البرمجية بسرعة ، ما لم ترتبط بالمناقشة المسبقة أو مصحوبة بنثر إنجليزي كبير وتوضيحي. بمعنى آخر ، قد يتم دمج طلبات السحب التي تحتوي على رمز بدون سياق بعد تأخير كبير ، أو قد لا يتم دمجها على الإطلاق.
نظرًا لأن Poker Chipper عبارة عن تطبيق ويب ثابت تمامًا بدون معالجة من جانب الخادم (خارج تقديم الملفات دون تغيير) ، فهو قابل للتطوير للغاية ، وله عبء صيانة منخفض للغاية. على هذا النحو ، حتى لو حدث شيء ما لي ، ولم أتمكن من الاستمرار في العمل في المشروع ، يجب أن تستمر الإصدار العام في البقاء وظيفيًا ومتاحًا على الإنترنت طالما أن حساب github الخاص بي مفتوح ونشاط jstrieb.github.io نشط.
أفضل الطرق لدعم المشروع هي:
إذا أصرت على إنفاق الأموال لإظهار دعمك ، فيرجى القيام بذلك بطريقة مفيدة على نطاق واسع. على وجه الخصوص ، تساعدني التبرعات للمنظمات التالية ، بالإضافة إلى الجمهور العام الذي يستخدم عبر الإنترنت:
لم يكن مقطع البوكر ممكنًا بدون مساعدة وتعليقات من: