Project Dilemma เป็นเครื่องมือจำลองสำหรับการทดสอบอัลกอริทึมในภาวะที่กลืนไม่เข้าคายไม่ออกของนักโทษ มันมีอินเทอร์เฟซมาตรฐานเพื่อกำหนดทั้งอัลกอริทึมและคลาสจำลองเพื่อให้สามารถทดสอบได้ง่าย แรงบันดาลใจจากวิดีโอ Veritasium นี้
pip install project-dilemmapip install . Project Dilemma จะพยายามโหลดการกำหนดค่าจากไดเรกทอรีการกำหนดค่าของผู้ใช้และระบบโดยอัตโนมัติซึ่งมักจะตั้งค่าโดย $XDG_CONFIG_DIRS สำหรับผู้ใช้ Linux ส่วนใหญ่สิ่งนี้จะตรวจสอบ ~/.config/project_dilemma และพวกเขาอยู่ที่ไหนสักแห่งใน /etc
พฤติกรรมนี้สามารถถูกแทนที่ได้โดยการระบุ -การตั้งค่าสถานะ --config ไปยังไฟล์กำหนดค่าที่คุณต้องการใช้
Project Dilemma ใช้รูปแบบ 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 นั้นง่ายมาก มีฟังก์ชั่นเดียวเท่านั้นที่จะแทนที่: generational_hook อย่างไรก็ตามนี่หมายความว่าการประมวลผลทั่วไปทั้งหมดจะต้องทำในฟังก์ชั่นนี้
เทมเพลตมีให้ใน templates/generational_simulation_template.py
ลิขสิทธิ์ 2023 Gabriele Ron
ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ยกเว้นตามใบอนุญาต คุณอาจได้รับสำเนาใบอนุญาตที่
http://www.apache.org/licenses/LICENSE-2.0
โครงการนี้ใช้โครงการ PlatformDirs ซึ่งได้รับใบอนุญาตภายใต้ใบอนุญาต MIT Copyright (C) 2010-202X นักพัฒนา PlatformDirs