Upgrade to Pro — share decks privately, control downloads, hide ads and more …

いずれ役に立つかもしれない遺伝的アルゴリズムの話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for fujiringo fujiringo
June 24, 2025
70

 いずれ役に立つかもしれない遺伝的アルゴリズムの話

Avatar for fujiringo

fujiringo

June 24, 2025
Tweet

Transcript

  1. 自己紹介 • 名前:藤原 崚 • 経歴 • 前職:農業の研究機関で研究開発に従事 • 飼料用とうもろこしの品種改良

    • ドローン空撮画像解析の研究 • 2022年、中途で株式会社ブレインパッドに入社 • AtCoder • Algorithm: 1221 • Heuristic (2025/6/15現在): 1208 (highest: 1317) • Kaggle Master • 好きなもの • 果物 2
  2. 遺伝的アルゴリズムとは 交叉 (crossover) 選抜 (selection) 突然変異 (mutation) ※ 手順の一例 ×

    G 世代 (generation) 解の候補:個体 新しい個体の生成・適応度に従って選抜 を繰り返すことで、よりよい解を探索する Genetic Algorithm 略称:GA 4
  3. 問題のおさらい • 各ターンで 「移動 (1マス進む)」 「滑走 (壁かblockにぶつかるまで進む)」 「変更 (blockの配置・除去)」を行える •

    適切にblockを配置・除去することで、 以降の目的地に向かうためのターン数を 削減できる 遺伝的アルゴリズムによる解 (turn: 110) seed: 0 公式ビジュアライザを使用 A - Skating with Blocks AHC046で遺伝的アルゴリズムを使ってみる 5
  4. AHC046で遺伝的アルゴリズムを使ってみる 前提 • ここでは、ある目的地に訪れるまでの行動群を 「step」と呼ぶことにする (つまり、M -1=39 steps で完了) •

    「個体」を各stepでのblockの置き方 によって定義する。 GAのおおまかな手順 1. 初期個体群の生成 2. 交叉 3. 選抜 4. 2, 3 を実行時間の許す限り繰り返す ※ コンテスト本番中にこれを実装したわけではありません 個体 step 1: blockを置かない step 2: blockを座標 (x 2 , y 2 ) に置く step 3: blockを座標 (x 3 , y 3 ) に置く step 4: blockを置かない … step M -1: blockを置かない 適応度: -(上記の条件のもとでの最小ターン数) (「適応度が高い」=「ターン数が小さい」個体を 選んでいく) 6
  5. AHC046で遺伝的アルゴリズムを使ってみる - 初期個体群の生成 • blockを置かない解からスタートして、 ランダムにstepを選択し、 経路中に配置できる座標からランダムに選んで blockを置くことにする。 この時、もとの解から改善する場合のみ採用する。 •

    後半のstepでblockを置いても改善することは 少ないため、前半のstepのみを選択する 制約を設けている • 1個体につきこの試行を32回繰り返す。 (局所探索) • これを個体数 P = 16 回だけ繰り返す。 step 1: blockを置かない step 2: blockを置かない step 3: blockを置かない … step M -1: blockを置かない ランダムにstepを選択し、 blockを置く step 1: blockを置かない step 2: blockを(x 2 , y 2 ) に置く step 3: blockを置かない … step M -1: blockを置かない 繰り返す … × P 個体 7 (blockを置かない初期解)
  6. AHC046で遺伝的アルゴリズムを使ってみる - 交叉・選抜 • 個体群からランダムに2個体選択し、 stepごとのblockの置き方を、両親から1/2の 確率で遺伝させた子個体を生成する。 (交叉) • 今回は突然変異は適用していない

    • これを16 回繰り返し、もとの個体群と 合わせた32 個体のうちから、 適応度が高い(必要ターン数の小さい) 個体をP = 16 個体選抜する。 • 以上を1世代の操作とし、 実行時間(2秒)の限り繰り返す。 適応度: -(この条件のもとでの最小ターン数) step 1: blockを置かない step 2: blockを(x A2 , y A2 ) に置く step 3: blockを(x A3 , y A3 ) に置く step 4: blockを(x A4 , y A4 ) に置く … step M -1: blockを置かない step 1: blockを置かない step 2: blockを置かない step 3: blockを(x B2 , y B2 ) に置く step 4: blockを置かない … step M -1: blockを置かない step 1: blockを置かない step 2: blockを(x A2 , y A2 ) に置く step 3: blockを(x B2 , y B2 ) に置く step 4: blockを置かない … step M -1: blockを置かない 個体A 個体B 子個体 8
  7. AHC046で遺伝的アルゴリズムを使ってみる - 結果 • blockを配置しない貪欲解:204033 (448位相当) • 制限時間内に局所探索のみを繰り返す:213095 (278位相当) •

    (局所探索の効率があまりよくない実装になっているかもしれません) • ここで説明したGA:214326 (238位相当) 考察 • 「blockを取り除く」「1stepにblockを2つ以上置く」といった手順を考慮できていない • 交叉や選抜もかなりシンプルなロジックであり、改善の余地あり • 個体の評価(blockを置く条件を指定した際の最短経路の探索)に時間がかかるため、 限られた実行時間の中で個体数・世代数をあまり増やせないのがネックであった • 1世代あたりの個体数 P = 16 、交叉による子個体の生成数も 16 とした今回の実験で、 世代数は 18-19 程度しか進んでいなかった (実行時間:1855 ms) • ここで説明した比較的シンプルなGAでも、コンテスト本番の4時間で 実装するのは困難であったと思われる 9
  8. その他の適用例 • Kaggle:主に予測モデリングの精度を競うコンペが開催されているプラットフォーム • ときどき「最適化」のコンペが開催される 文章の単語を入れ替えて LLMが出力するperplexityを最小化 ルービックキューブを揃える手数を最小化 色塗りの順番を決める (巡回セールスマン問題に近い)

    上位解法でGA使用 9位解法(私)でGA使用 my favorite fruit is an apple. apple favorite is an my fruit. 249.518 28504.365 perplexity ※ 実際にコンペで登場した文章とは異なります 例) 詳しくはdiscussionをご参照ください → 9th place solution 10 Kaggle Santa コンペ の特徴 • 実行時間の制限がない • 開催期間が長め(2か月程度)
  9. 順列の最適化(並べ替え)へのGAの利用について • 巡回セールスマン問題のような順列の最適化(つまり、並べ替え)に対する GAの適用に関しては、複数の有用な交叉が提案されている (1 2 3 | 4 5

    6 | 7 8) (3 7 5 | 1 6 8 | 2 4) (4 2 3 | 1 6 8 | 7 5) (3 7 8 | 4 5 6 | 2 1) • Partially-mapped crossover (PMX) 両親の部分経路と位置を保存した子を作成 • Edge Assembly crossover (EAX) 両親の辺を引き継いだ子を作成 • などなど Santa 2022 の上位解法・ Santa 2024 の9位解法(私)で利用された 11
  10. おわりに • 遺伝的アルゴリズム(GA)は、問題によってはその他のヒューリスティクスの手法を 凌駕する性能を発揮することもある。 • 順列の最適化(並べ替え)に関しては、複数の交叉が提案されており、 特定の交叉を用いたGAが有効であった実績がある。 • 一方、「実装の複雑さ」 「適用の難しさ(特に、適切な交叉を探すのが難しい)」

    などによって、今のところ一般的な短期のヒューリスティック最適化のコンテストで GAが利用されることはまれである。 • 今後、生成AI系のコーディングツールをうまく活用すれば、 GAが個別の問題をquickに解いてくれるかもしれない。 12
  11. 参考文献 • BrainPad プログラミングコンテスト 2025 (AtCoder Heuristic Contest 046) https://atcoder.jp/contests/ahc046

    • Howard, A., & Holbrook, R. (2022). Santa 2022 - The Christmas Card Conundrum. Retrieved from https://kaggle.com/competitions/santa-2022 • Holbrook, R., Reade, W., & Howard, A. (2023). Santa 2023 - The Polytope Permutation Puzzle. Retrieved from https://kaggle.com/competitions/santa-2023 • Holbrook, R., Reade, W., Demkin, M., & Park, E. (2024). Santa 2024 - The Perplexity Permutation Puzzle. Retrieved from https://kaggle.com/competitions/santa-2024 • Larranaga, P., Kuijpers, C. M. H., Murga, R. H., Inza, I., & Dizdarevic, S. (1999). Genetic algorithms for the travelling salesman problem: A review of representations and operators. Artificial intelligence review, 13, 129- 170. • Nagata, Y. (2007). Fast Implementation of Genetic Algorithm by Localized EAX Crossover for the Traveling Salesman Problem. Transactions of the Japanese Society for Artificial Intelligence, 22(5), 542-552. 13