تطبيق نظرية الخوارزميات للألعاب في بيثون مع ناشبي

نظرية الألعاب هي طريقة لدراسة المواقف الاستراتيجية حيث تعتمد النتائج ليس فقط على أفعالك ، ولكن أيضًا على ما سيفعله الآخرون.

ما هو الوضع الاستراتيجي؟ تذكر أنواع هياكل السوق: هناك منافسة كاملة عندما تكون جميع الشركات تسعير ، أي أنها لا داعي للقلق بشأن استراتيجية التسعير ، وهناك احتكار عندما تكون هناك شركة واحدة فقط في السوق تحدد أسعارها. لذا: كل شيء بين المنافسة الكاملة والاحتكار هو وضع استراتيجي.

تقع نظرية اللعبة الخوارزمية في ملتقى نظرية الألعاب وعلوم الكمبيوتر وتهدف إلى دراسة وإنشاء خوارزميات للاستراتيجيات.



تحت القطة ، قصة قصيرة حول كيفية استخدام نظرية الألعاب في Python باستخدام مكتبة Nashpy.


من المحرر: لماذا تذكرنا فجأة نظرية اللعبة؟ كل شيء بسيط - يتم تحديث منصتنا باستمرار مع 900 ألف مشارك ، ونحن نواجه باستمرار مواقف تتطلب تطوير استراتيجيات مختلفة. على سبيل المثال ، على بوابة خبراء NTI: ما إذا كان يجب تأكيد الجميع على التوالي ، أو على العكس من ذلك ، عدم تأكيد أي شخص ، ولكن طلب التأكيد فقط. مثال آخر: في نقاط الغليان ، يتم ملاحظة صراع على الموارد بانتظام ، وهناك معضلات - هل نطلب من جميع المعدات دفعة واحدة ، أو كتابة أرقام حقيقية في عدد المشاركين أو المبالغة؟ علاوة على ذلك ، يجب أن يتم حل هذه القضايا بأقصى فائدة للجميع.

ناشبي


كما يوحي الاسم ، توفر المكتبة قدرات خوارزمية لتحقيق توازن ناش - مجموعة من الاستراتيجيات للاعبين ، عندما يختار كل منهم الإصدار الأمثل من سلوكهم بناءً على إعداد مماثل للاعب الثاني. عن بعد ، يشبه مبدأ الفوز ، ولكن مع توجيه إلى الحد الأدنى من الخسائر في أي موقف.

لفهم هذا المفهوم ، دعونا ننتقل إلى النموذج الشعبي " معضلة السجين ".

للاستسلام أو عدم الاستسلام


هناك لاعبين (سجناء) يجب أن يقرروا ما إذا كانوا سيتعاونون مع بعضهم البعض دون إعطاء اسم آخر أثناء الاستجواب من قبل الشرطة. سيتم تقدير فائدة هذا السلوك بثلاث نقاط لكل لاعب ، إذا اختار كلاهما هذا المسار. نقطة البداية هنا هي العقوبة: إذا أعطى اللاعبون بعضهم البعض ، فيمكن اتهامهم بـ "عمل التآمر" ، أي "اللصوصية" ، وستكون العقوبة عليهم في هذه الحالة أشد مما لو كانوا قد تصرفوا بشكل منفصل.

إذا تجاوز أحد اللاعبين الآخر (بشرط ألا يمر) ، فستكون المنفعة بالنسبة له أربع نقاط ، بالنسبة للاعب الآخر - صفر نقاط. إذا استسلم السجناء بعضهم البعض ، فإن الفائدة ستكون نقطة واحدة لكل أخ.

لتسهيل تقديم هذه المجموعة من الخيارات ، ضعها على لوحة ، حيث تشير في الزنزانات إلى عدد النقاط لكل سجين ، اعتمادًا على الاختيار الذي تم إجراؤه:


P1 - لاعب 1 ، P2 - لاعب 2 ، C - تعاون ، NC - اجتاز لاعب آخر

في النهاية ، أفضل خيار لكليهما هو تسليم بعضهم البعض.

لماذا لا يتعاون السجناء؟ فكر في استراتيجية اللاعب 1 (P1):
  • إذا قرر اللاعب 2 (P2) التعاون مع P1 ، فإن أفضل استراتيجية لـ P1 هي تسليم اللاعب P2 ، حيث أن 4> 3
  • إذا قررت P2 تسليم P1 ، فإن P1 يكون أكثر ربحية للتشغيل للعب P2 ، منذ 1> 0


لذا ، فإن استراتيجية الفوز لـ P1 هي (NC؛ NC) ، والتي تنطبق أيضًا على P2. وبالتالي ، سيكون توازن ناش هو الاستراتيجية (NC ؛ NC) عندما يستسلم اللاعبان P1 و P2 لبعضهما البعض للشرطة.

ننقل النظرية إلى Python


تحتاج أولاً إلى تثبيت الوحدة النمطية. يمكن القيام بذلك من قبل الفريق من pip install nashpyخلال وحدة تحكم جوبيتر. في نهاية التثبيت ، يمكنك البدء في ضبط شروط اللعبة. بالنسبة للاعبين بنتيجة غير صفرية (وهي القيمة الافتراضية في Nashpy) ، تحتاج إلى إنشاء مصفوفتين تعكس مواقف اللعبة لكل لاعب. على سبيل المثال ، بالنسبة للاعب 1 ، ستبدو المصفوفة كما يلي:

ج
نورث كارولاينا
ج
3
0
نورث كارولاينا
4
1


للاعب 2 ، مثل هذا:

ج
نورث كارولاينا
ج
3
4
نورث كارولاينا
0
1


دعنا نعيد إنتاج هذا في Python:

import nashpy as nash
import numpy as ns
P1=np.array([[3,0],[4,1]])
P2=np.array([[3,4],[0,1]])
prisoner_dilemma=nash.Game(P1,P2)

prisoner_dilemma




بالنظر إلى هذه اللوحات ، يمكننا الحصول على تقدير لفائدة تفاعل اللاعبين. بمعنى ، إذا كان P1 لا يعطي P2 ، و P2 يعطي P1 ، فإن قيم الأداة ستكون (0 ، 4). يمكننا الحصول على نفس الشيء مع حسابات المصفوفة في ناشفي. نأخذ ناقلات الإجراءات على أنها سيغما (لدينا اثنان منها: التعاون أو تسليم سجين آخر) ، حيث يتم تعيين القيمة 0 لجميع الزنزانات باستثناء الخلية التي تتم فيها العملية. ثم ، بالنسبة للاعب 1 ، سيتم احتساب فائدة الإجراء على النحو التالي:



بالنسبة للاعب 2:



تطبيق الصيغة على السيناريو ، عندما يختار اللاعب 1 استراتيجية للتعاون مع لاعب آخر ، وقرر اللاعب 2 تسليم اللاعب 1 ، نحصل على:



تحقق مع Nashpy:





اكتشف ما إذا كان يجد خوارزمية توازن ناش ، والذي ، كما اكتشفنا بالفعل ، هو (NC؛ NC):





كما ترى ، يتكون توازن ناش من متجهين ، يعكس كل منهما تصرفات لاعب واحد: بالنسبة للاعب 1 ، هذا هو [0 ؛ 1] ، حيث يعني 1 في الحقل الثاني أن اللاعب 1 قرر تسليم اللاعب 2. نرى صورة مماثلة للاعب الثاني.

PS ما يمكن قراءته


  1. Game Theory (Avinash Dixit and Barry Neilbuff) هو منشور حديث إلى حد ما من دار النشر MYTH. في الكتاب ، مع أمثلة من السينما والرياضة والسياسة والتاريخ ، يظهر المؤلفون مدى مشاركة جميع الشركات والأشخاص تقريبًا في التفاعلات التي توصفها نظرية اللعبة.
  2. استراتيجية الصراع (توماس شيلينج). الكتاب مخصص لدراسة المنطق العام لسلوك المشاركين في حالات الصراع - نظرية اللعبة. صدر في عام 1960 ، أصبح مساهمة أساسية في هذا العلم ، ووضع أسس نظرية السلوك الاستراتيجي.
  3. موسيقى الروك والورق والمقص: نظرية الألعاب في الحياة اليومية (Len Fisher) هو كتاب آخر عن علم التعاون. يوضح فيشر كيف ساعدت نظرية اللعبة علماء الأحياء على فهم تطور التعاون في الطبيعة ، وكيف يمكننا تطبيقها في مجتمعنا.

Source: https://habr.com/ru/post/undefined/


All Articles