プロジェクトのジレンマは、囚人のジレンマでアルゴリズムをテストするためのシミュレーションツールです。アルゴリズムとシミュレーションの両方のクラスを定義するための標準インターフェイスを提供して、簡単にテストできるようにします。この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 " }アルゴリズムは非常に簡単に定義できます。アルゴリズムインターフェイスをサブクラス化するには、4つのことのみを行う必要があります。
algorithm_idを設定しますdecide関数を実装します 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にあります。
世代のシミュレーションは一見単純です。オーバーライドする関数は1つだけです: generational_hook 。ただし、これは、この関数ですべての世代処理を行う必要があることを意味します。
テンプレートがtemplates/generational_simulation_template.pyで提供されています。
Copyright 2023 Gabriele Ron
Apacheライセンス、バージョン2.0(「ライセンス」)に基づいてライセンスされています。ライセンスに準拠している場合を除き、このファイルを使用することはできません。ライセンスのコピーを取得できます
http://www.apache.org/licenses/LICENSE-2.0
このプロジェクトは、MITライセンスの下でライセンスされているPlatformDirsプロジェクトを利用しています。著作権(c)2010-202x PlatformDirs開発者