Project Dilemma是一種用於測試囚犯困境中算法的模擬工具。它提供了一個標準接口來定義算法和仿真類,以便可以輕鬆測試它們。受此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 Gabriele Ron
根據Apache許可證(版本2.0(“許可”)獲得許可;除了符合許可外,您不得使用此文件。您可以在
http://www.apache.org/licenses/LICENSE-2.0
該項目利用了根據MIT許可證獲得許可的PlatformDirs項目。版權(c)2010-202X平台開發人員