프로젝트 딜레마는 죄수의 딜레마에서 알고리즘을 테스트하기위한 시뮬레이션 도구입니다. 알고리즘과 시뮬레이션 클래스를 모두 정의하여 쉽게 테스트 할 수 있도록 표준 인터페이스를 제공합니다. 이 Veritasium 비디오에서 영감을 얻었습니다.
pip install project-dilemmapip install . 프로젝트 딜레마는 일반적으로 $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 " }알고리즘은 매우 쉽게 정의 할 수 있습니다. 알고리즘 인터페이스를 서브 클래스하려면 4 가지만 수행해야합니다.
algorithm_id 설정하십시오decide 기능을 구현하십시오 decide 기능은 시뮬레이션이 알고리즘을 실행하는 데 사용하는 것입니다. 이전 라운드의 결과를 얻는 데 사용할 수있는 project_dilemma.interfaces.base.Rounds 객체를 허용합니다. 함수는 협력을 위해 True 반환하고 결함에 대해서는 False 반환해야합니다.
돌연변이를 추가하려면 원형 수입을 피하기 위해 클래스를 정의한 후 정적 돌연변이 목록을 설정하십시오.
사용하기 쉽도록 templates/algorithm_template.py 에 템플릿이 제공되었습니다.
시뮬레이션 알고리즘과 비교하여 구성하기에 더 복잡합니다. run_simulation 및 process_simulation 방법을 무시하면되지만 이는 매우 중요합니다.
run_simulation process_simulation 에서 결과를 얻기 위해 사용하는 project_dilemma.interfaces.base.Simulations 객체를 반환합니다.
예를 들어, 제공된 표준 시뮬레이션은 라운드 데이터를 처리하여 각 노드의 점수를 계산하여 templates/simulation_template.py 에서 템플릿을 찾을 수 있습니다.
세대 시뮬레이션은 기만적으로 간단합니다. 재정의 기능은 하나뿐입니다 : generational_hook . 그러나 이는이 기능에서 모든 세대 처리가 수행되어야 함을 의미합니다.
templates/generational_simulation_template.py 에 템플릿이 제공되었습니다.
저작권 2023 가브리엘 론
Apache 라이센스, 버전 2.0 ( "라이센스")에 따라 라이센스가 부여되었습니다. 라이센스를 준수하는 것 외에는이 파일을 사용할 수 없습니다. 라이센스 사본을 얻을 수 있습니다
http://www.apache.org/licenses/LICENSE-2.0
이 프로젝트는 MIT 라이센스에 따라 라이센스가 부여 된 PlatformDirs 프로젝트를 활용합니다. Copyright (C) 2010-202X 플랫폼 디즈 개발자