Dilema proyek adalah alat simulasi untuk menguji algoritma dalam dilema tahanan. Ini menyediakan antarmuka standar untuk mendefinisikan kelas algoritma dan simulasi sehingga mereka dapat dengan mudah diuji. Terinspirasi oleh video veritasium ini.
pip install project-dilemmapip install . Dilema proyek akan secara otomatis mencoba memuat konfigurasi dari direktori konfigurasi pengguna dan sistem, biasanya ditetapkan oleh $XDG_CONFIG_DIRS . Untuk sebagian besar pengguna Linux, ini akan memeriksa ~/.config/project_dilemma dan mereka di suatu tempat di /etc .
Perilaku ini dapat ditimpa dengan menentukan --config bendera ke file konfigurasi yang ingin Anda gunakan.
Project Dilemma menggunakan format TOML untuk file konfigurasi. Ini adalah format yang dapat dibaca manusia yang mudah ditulis. Skema telah disediakan di bawah ini:
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/ "Karena banyak objek, seperti algoritma dan simulasi, dapat atau harus disediakan oleh pengguna, data ini harus diimpor secara dinamis. Untuk dengan mudah mengimpor objek -objek ini tanpa mengimpor setiap simulasi dan algoritma, format berikut dapat digunakan untuk memberi tahu program di mana mencari impor:
{ file = " path/to/file " , object = " ObjectToImport " }Algoritma dapat didefinisikan dengan sangat mudah. Hanya empat hal yang harus dilakukan untuk menagih antarmuka algoritma:
algorithm_iddecide Fungsi decide adalah apa yang digunakan simulasi untuk menjalankan algoritma. Ia menerima objek project_dilemma.interfaces.base.Rounds yang dapat digunakan untuk mendapatkan hasil putaran sebelumnya. Fungsi harus mengembalikan True untuk kerja sama, dan False untuk pembelotan.
Jika Anda ingin menambahkan mutasi, atur daftar mutasi statis setelah mendefinisikan kelas untuk menghindari impor melingkar.
Templat telah disediakan dalam templates/algorithm_template.py untuk kemudahan penggunaan.
Simulasi yang lebih rumit untuk dikonfigurasi dibandingkan dengan algoritma. Anda hanya perlu mengesampingkan metode run_simulation dan process_simulation , tetapi ini sangat penting.
run_simulation Mengembalikan objek project_dilemma.interfaces.base.Simulations yang akan digunakan oleh process_simulation untuk mendapatkan hasilnya.
Misalnya, simulasi standar yang disediakan memproses data putaran untuk menghitung skor untuk setiap node templat dapat ditemukan dalam templates/simulation_template.py .
Simulasi generasi tampak sederhana. Hanya ada satu fungsi untuk menggantikan: generational_hook . Namun, ini berarti bahwa semua pemrosesan generasi harus dilakukan dalam fungsi ini.
Templat telah disediakan dalam templates/generational_simulation_template.py .
Hak Cipta 2023 Gabriele Ron
Berlisensi di bawah lisensi Apache, versi 2.0 ("lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan lisensi. Anda dapat memperoleh salinan lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Proyek ini menggunakan proyek PlatformDirs yang dilisensikan di bawah lisensi MIT. Hak Cipta (C) 2010-202X PLATPERDIRS PENGEMBANG