معضلة المشروع هي أداة محاكاة لاختبار خوارزميات في معضلة السجين. يوفر واجهة قياسية لتحديد كل من فئات الخوارزمية ومحاكاة بحيث يمكن اختبارها بسهولة. مستوحاة من هذا الفيديو Veritasium.
pip install project-dilemmapip install . ستحاول معضلة المشروع تلقائيًا تحميل التكوين من أدلة تكوين المستخدم والنظام ، وعادة ما يتم تعيينها بواسطة $XDG_CONFIG_DIRS . بالنسبة لمعظم مستخدمي Linux ، سيؤدي ذلك إلى التحقق من ~/.config/project_dilemma وهم في مكان ما في /etc
يمكن تجاوز هذا السلوك عن طريق تحديد علامة --config إلى ملف التكوين الذي تريد استخدامه.
تستخدم معضلة المشروع تنسيق TOML لملفات التكوين. هذا تنسيق قابل للقراءة الإنسان يسهل الكتابة. تم توفير المخطط أدناه:
simulation_id = " name of simulation "
algorithms_directory = " /path/to/algorithms/ "
nodes = [ { node_id = " node_1 " , algorithm = { file = " foo.py " , object = " Foo " }, quantity = 11 },
{ node_id = " node_2 " , algorithm = { file = " bar/baz.py " , object = " Baz " } } ]
simulation = { file = " foobar.py " , object = " GenerationalFooBar " }
generational_simulation = { file = " foobar.py " , object = " FooBar " }
simulation_arguments = { foo = " bar " }
simulation_data = " path/to/round.json "
simulation_data_output = " path/to/round.json "
simulation_results_output = " path/to/results.json "
simulations_directory = " /path/to/simulations/ "نظرًا لأن الكثير من الكائنات ، مثل الخوارزميات والمحاكاة ، يمكن أو يجب توفيرها من قبل المستخدم ، يجب استيراد هذه البيانات ديناميكيًا. من أجل استيراد هذه الكائنات بسهولة دون استيراد كل محاكاة وخوارزمية ، يمكن استخدام التنسيق التالي لإخبار البرنامج بمكان البحث عن الواردات:
{ file = " path/to/file " , object = " ObjectToImport " }يمكن تعريف الخوارزميات بسهولة بالغة. يجب القيام بأربعة أشياء فقط للطبقة الفرعية لواجهة الخوارزمية:
algorithm_iddecide وظيفة decide هي ما تستخدمه المحاكاة لتشغيل الخوارزمية. إنه يقبل كائن project_dilemma.interfaces.base.Rounds الذي يمكن استخدامه للحصول على نتائج الجولات السابقة. يجب أن تعود الوظيفة True للتعاون ، False للانشقاق.
إذا كنت ترغب في إضافة طفرات ، فقم بتعيين قائمة الطفرة الثابتة بعد تحديد الفصل لتجنب الواردات الدائرية.
تم توفير قالب في templates/algorithm_template.py لسهولة الاستخدام.
المحاكاة أكثر تعقيدًا للتكوين بالمقارنة مع الخوارزميات. تحتاج فقط إلى تجاوز طرق run_simulation و process_simulation ، ولكن هذه مهمة بشكل لا يصدق.
run_simulation إرجاع project_dilemma.interfaces.base.Simulations كائن سيتم استخدامه بواسطة process_simulation للحصول على النتائج.
على سبيل المثال ، تقوم المحاكاة القياسية المقدمة بمعالجة بيانات الجولات لحساب الدرجات لكل عقدة يمكن العثور عليها في templates/simulation_template.py .
محاكاة الأجيال بسيطة بشكل مخادع. هناك وظيفة واحدة فقط لتجاوزها: generational_hook . ومع ذلك ، هذا يعني أن جميع المعالجة الأجيال يجب أن تتم في هذه الوظيفة.
تم توفير قالب في templates/generational_simulation_template.py .
حقوق الطبع والنشر 2023 غابرييل رون
مرخصة بموجب ترخيص Apache ، الإصدار 2.0 ("الترخيص") ؛ لا يجوز لك استخدام هذا الملف إلا في الامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
يستخدم هذا المشروع مشروع PlatformDirs المرخص له بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. حقوق الطبع والنشر (C) 2010-202x مطورو PlatformDirs