Skip to content

seieric/23points-ga

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

23points-ga

このプロジェクトでは、極座標平面上に23個の点を「美しく」配置する問題を遺伝的アルゴリズムで探索するものです。

実行環境

  • Python 3.12
  • uv
    • uv以外のパッケージ管理ツールを使用する場合は、適宜コマンドを変更してください。
  • 必要なパッケージは pyproject.toml に記載されています。
    • matplotlib
    • numpy
    • pillow
    • scipy
    • tyro

各ファイルについて

  • main.py: メインのスクリプト。遺伝的アルゴリズムのループを実行します。
  • points.py: 点の配置を表すPointsクラスと交叉のための関数が含まれています。突然変異はPointsクラスのmutateメソッドで実装されています。
  • loss.py: 点の配置の評価関数(loss関数)が含まれています。

使い方

  1. 必要なパッケージをインストールします。

    uv sync
  2. メインスクリプトを実行します。

    uv run python3 main.py
  3. 結果は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の履歴データ
  4. 実行時のパラメータを変更したい場合は、引数を与えることで変更できます。例えば、世代数を200、シード値を1234に変更する場合は以下のようにします。

    uv run python3 main.py --max-gens 200 --seed 1234
    • 引数の詳細はuv run python3 main.py --helpで確認できます。

About

Genetic Algorithm for searching "beautiful" layout of 23 points.

Topics

Resources

Stars

Watchers

Forks