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平台开发人员