このプロジェクトでは、極座標平面上に23個の点を「美しく」配置する問題を遺伝的アルゴリズムで探索するものです。
- Python 3.12
- uv
- uv以外のパッケージ管理ツールを使用する場合は、適宜コマンドを変更してください。
- 必要なパッケージは
pyproject.tomlに記載されています。matplotlibnumpypillowscipytyro
main.py: メインのスクリプト。遺伝的アルゴリズムのループを実行します。points.py: 点の配置を表すPointsクラスと交叉のための関数が含まれています。突然変異はPointsクラスのmutateメソッドで実装されています。loss.py: 点の配置の評価関数(loss関数)が含まれています。
-
必要なパッケージをインストールします。
uv sync
-
メインスクリプトを実行します。
uv run python3 main.py
-
結果は
outputディレクトリに保存されます。デフォルトでは50世代ごとに上位5個の点の配置が画像として保存されます。output/gen_XXX/: 各世代の上位5個の点の配置画像が含まれるディレクトリoutput/best_loss.png: 各世代の最良lossの履歴を示すグラフoutput/worst_loss.png: 各世代の最悪lossの履歴を示すグラフoutput/best_loss.npz: 各世代の最良のlossの履歴データoutput/worst_loss.npz: 各世代の最悪のlossの履歴データ
-
実行時のパラメータを変更したい場合は、引数を与えることで変更できます。例えば、世代数を200、シード値を1234に変更する場合は以下のようにします。
uv run python3 main.py --max-gens 200 --seed 1234
- 引数の詳細は
uv run python3 main.py --helpで確認できます。
- 引数の詳細は