JOI夏季セミナー2023 全体講演会1の講演資料です。
【講義題目】 メタヒューリスティクスで広がる「解けた!」の世界
【講義概要】 世の中には,まだ効率的に解く方法が見つかっていない難しい問題がたくさんあります.こうした問題に立ち向かうときに頼りになるのが,メタヒューリスティクスと呼ばれるアルゴリズムたちです.本講義では,まずメタヒューリスティクスの基礎について,そしてメタヒューリスティクスが実社会にどのように応用されているかについて紹介します.
メタヒューリスティクスで広がる「解けた!」の世界JOI夏季セミナー2023 全体講演会1株式会社ALGO ARTIS 松尾 充
View Slide
松尾 充株式会社ALGO ARTISまつお あたる(世界 位)2196アルゴリズムヒューリスティック最高2920@terry_u16terry_u161992年 福岡県生まれ九州大学に入学して機械工学を勉強九州大学大学院の修士課程に進学2010年2014年株式会社IHIに入社し戦闘機用ジェットエンジンを開発うっかり競技プログラミングにハマってしまう株式会社ALGO ARTISに入社しアルゴリズムを仕事に2016年2020年2022年
講演のねらい聞いてくださっている皆さんをAtCoder Heuristic Contestの世界へ引きずり込むことではなく……
講演のねらいメタヒューリスティクスとは何か実社会にどのように使われているか学び、皆さんに興味を持ってもらうことできればAHC (AtCoder Heuristic Contest) も始めてくれると嬉しいな……
講演の構成第1部 はじめてのメタヒューリスティクスメタヒューリスティクスという言葉を初めて聞いたという人も多いのではないでしょうか。第1部では、メタヒューリスティクスとは何か、それを使うとどういった嬉しいことがあるのかについて学びます。第2部 メタヒューリスティクスの実社会への応用実社会ではどのようにメタヒューリスティクスが使われているのでしょうか。第2部では、実社会で使われているメタヒューリスティクスについて見ていきます。
はじめてのメタヒューリスティクス第1部
メタヒューリスティクスとはメタヒューリスティクスとは、組合せ最適化問題向けのアルゴリズムのうち、最適解は保証されないが幅広い問題に適用できるもののことをいいます。特に、解くのにとても長い時間のかかる難しい問題に対して有効です。
メタヒューリスティクスとは……といってもよく分からないと思うので、順を追って見ていきましょう!
第1部 はじめてのメタヒューリスティクス課題解決策具体例解くのが難しい問題メタヒューリスティクスのここが嬉しい!メタヒューリスティクスの例
「解くのが難しい問題」って何?「解くのが難しい問題」と言っても、人によって思い浮かべるものは様々です。あなたの思う「解くのが難しい問題」とは何か、考えてみてください。「難しい問題」の定義の例• 難しいアルゴリズムを使わないと解けない問題今回は、「多項式時間アルゴリズムが見つかっていない問題」のこととします。• 実装が大変な問題• 考察のステップ数が多い問題• 多項式時間アルゴリズム(𝑂 𝑁2 など)が見つかっていない問題
なぜ多項式時間で解きたいの?多項式時間で解けないと、計算時間が大爆発してしまうためです。そのため、多項式時間で解けない問題を「解くのが難しい問題」としました。𝑵𝟐 𝑵𝟓 𝟐𝑵 𝑵!N=10 一瞬 一瞬 一瞬 0.003秒N=20 一瞬 0.003秒 0.001秒 77年N=50 一瞬 0.3秒 13日 1極年N=100 一瞬 10秒 40兆年 3×10141年以下の表は、1秒間に10億回の計算ができるコンピューターにおける入力サイズごとの計算時間のおおまかな目安です。※1極=1048乗※多項式時間 指数時間
「解くのが難しい問題」の例「解くのが難しい問題」の一例を挙げてみました。聞いたことのある問題も入っているかもしれません。次のページから、巡回セールスマン問題の解き方について見ていきます。巡回セールスマン問題 ナップサック問題 3-SAT問題(一般化)テトリス (一般化)ぷよぷよ (一般化)数独(一般化)詰め将棋 マリオメーカー ゲームのRTA (Real Time Attack)
巡回セールスマン問題巡回セールスマン問題とは、一言で言えば最小コストで全ての都市を回る経路を探す最適化問題です。問題文𝑁 個の都市があり、全ての都市同士の間は道でつながっています。都市 𝑖 から都市 𝑗 に移動するときのコスト(≒距離)は𝑑𝑖,𝑗です。松尾くんは都市 1 から出発して、都市 1 以外の都市を全て回り、最後に都市 1 に戻ってきたいです。そのときの合計コストの最小値を求めてください。都市 1都市 2都市 3都市 4
巡回セールスマン問題 - 解法を考えてみよう初めて聞いたよ!という人N = 7 のときにどうやったら解くことができそうか、ちょっと考えてみてください!もう解いたことあるよ!という人N = 20, 100, 1000 のときに高速に解く方法がないか、考えてみてください!ただし、松尾くんはヒマなので、少しくらい最適解より悪くても大丈夫なものとします。
巡回セールスマン問題 - 全探索全てのパターンを調べつくせば、間違いなく最適解が求められます。この手法を全探索と呼びます。3×2×1=6 通り試せば答えが分かる1都市目の候補が3通り2都市目の候補が2通り3都市目の候補が1通り
巡回セールスマン問題 - 全探索都市がN個あるとき、何通り試せばよいか考えてみましょう。多すぎてコンピュータを使っても無理!何かいい方法はないでしょうか?𝑁 × 𝑁 − 1 × ⋯ × 2 × 1 のことを階乗といい、 𝑁! と表します。たとえば、 3! = 3 × 2 × 1 = 6 です。詳しくは高校数学で学びますので、お楽しみに!4都市のとき、 3×2×1= 6通り3! =5都市のとき、 4×3×2×1= 24通り4! =6都市のとき、 5×4×3×2×1= 120通り5! =7都市のとき、 6×5×4×3×2×1= 720通り6! =8都市のとき、 7×6×5×4×3×2×1= 5,040通り7! =20都市のとき、 19×18×17×…×1= 121,645,100,408,832,000 通り19! =⋮かいじょう
巡回セールスマン問題 - 動的計画法実は全探索を行うとき、実質同じであるパターンがたくさん出てきます。実質同じであるパターンをまとめて高速に計算する方法が動的計画法です。12345 678これらはすべて「都市1, 2, 3, 4, 5を訪問済で、今は都市5にいる状態」としてまとめてしまうことができ、無駄な計算を省くことができます。訪問済 未訪問12345678
巡回セールスマン問題 - 動的計画法動的計画法の計算量はどのくらいになるか、考えてみましょう。まずは状態が何通りあるか考えてみます。訪問済みの都市都市ごとに「訪問済み」「未訪問」の2通り2N通り状態数2つをかけ算してN2N通り (くらい)今いる都市最後にいる都市の数はN 通り (くらい)
状態数考えるべき状態の数はN2N通り (くらい)巡回セールスマン問題 - 動的計画法状態数は約𝑁2𝑁通りと分かりました。あとは次に行く都市の候補の数をかければ、計算量が分かります。次の都市の候補次に行く都市の数はN 通り (くらい)計算量2つをかけ算してN22N(くらい)
巡回セールスマン問題 - 動的計画法動的計画法ではNがどのくらいの大きさになるまで解けるでしょうか?Nを変化させたときの N22N の値を調べてみましょう。※1秒間に10億回の計算ができるコンピューターでのおおよその所要時間を示しています。※計算時間だけでなく、メモリの使用量も問題になってきます。32都市の巡回セールスマン問題を解く場合、工夫しないと1TBほどのメモリが必要になります。10都市のとき、 10×10×210= 102,400 → 一瞬15都市のとき、 15×15×215 = 7,372,800 → 0.007秒 くらい20都市のとき、 20×20×220 = 419,430,400 → 0.4秒 くらい30都市のとき、 30×30×230 = 966,367,641,600 → 16分 くらい50都市のとき、 50×50×250 = 2,814,749,767,106,560,000 → 89年 くらい5都市のとき、 5×5×25= 800 → 一瞬全探索より解ける幅は広がりましたが、まだまだNが大きくなると厳しい!
諦めるしかない……?20~30都市くらいが限界というのはかなり厳しいですね。「47都道府県を最短距離で回りたい」という問題さえ解けません。コンピューターに解かせるのは諦めるしかないのでしょうか……?
メタヒューリスティクスを使えば解けるようになる!「厳密解でなければダメ」という条件を外せば、メタヒューリスティクスを使って近似的に解けるようになります!そもそも普段生活していて、「厳密解でなければダメ」ということは少ないです。5時間かかる道のりが5時間5分になってもあまり気にしないことが多いです。
メタヒューリスティクスの嬉しいところメタヒューリスティクスは、このような難しい問題に対して使われるアルゴリズムです。主に2つの嬉しいところがあります。「解くのが難しい問題」が解けるようになる!普通の解法では一生かかっても終わらなかった計算が、実用的な時間で解けるようになって嬉しい!幅広い問題に適用することができる!問題1つ1つに対して1から解法を考えなくても、同じ枠組みに沿って考えればいろんな問題に対応できて嬉しい!
「解くのが難しい問題」を解けるようになる!普通の解法では一生かかっても終わらない計算が、実用的な時間で解けるようになって嬉しい!巡回セールスマン問題をいろんな近似解法で解く(その6: さまざまな近傍), take314https://qiita.com/take314/items/69b93481403feb857d6e例えば巡回セールスマン問題の場合、普通の全探索では10都市ちょっと、動的計画法でも30都市くらいが限界でした。焼きなまし法(後述)を使うと、1379都市の巡回セールスマン問題でも4秒ほどでかなり良い解※が得られます。※この実行例では、最適解に対しておよそ+1.6%の解が得られたとのことです。
幅広い問題に適用することができる! (1/2)実は巡回セールスマン問題に限って言えば、もっと強力なアルゴリズムやソフトウェアが存在します。Lin-Kernighan法EAXConcorde山登りベースだが、k-optという操作を効率的に行うアルゴリズムLKHという実装例が公開されている遺伝的アルゴリズム系の比較的新しいアルゴリズムKaggleの最適化コンテストで上位陣がみんな使っていたことで有名厳密解法・近似解法いろいろ入ったすごいソフトウェア85,900都市の巡回セールスマン問題の厳密解を出すことに成功こんなに強い解法が既にあるなら、わざわざメタヒューリスティクスを勉強しなくても良いのでは?そんなことはありません!
幅広い問題に適用することができる! (2/2)メタヒューリスティクスの嬉しいところは、研究者人生をかけて1から最強の解法を作らなくても同じ枠組みに沿って考えればいろんな問題に対応できることです。0 5 10 15 20その他全探索系推定系モンテカルロ法貪欲法・ビームサーチ山登り・焼きなまし過去21回のAHCにおける強かった手法※重複あり、選定は松尾の独断と偏見です。漏れもあるかもしれないので参考程度に……。過去のAHCにおいても幅広い問題でメタヒューリスティクス解法が上位を取っています。新しい問題に出会うたびに数年かけて新しい解法を考えるのは大変です。メタヒューリスティクスを使えば、いろんな問題を同じ枠組みで解くことができます。この2つが代表的なメタヒューリスティクス
メタヒューリスティクスの長所と短所メタヒューリスティクスは長所と短所を持ちますが、使いどころを間違えなければとても強力なアルゴリズムとなります。特定の問題に限定されず幅広い問題に適用できる問題専用に作られたアルゴリズムより性能は落ちる解くのが難しい問題を実用的な速度で解ける解の精度が保証されておらずどのくらいよい解か不明長所 短所専用アルゴリズムが存在しない問題に有効精度の保証が不要で難しい問題を解くときに有効使いどころ
ビームサーチ解の候補を1つではなく複数個保持して解を作り上げていく貪欲法山登り法ある解を少し変更して改善したら採用しよりよい解に近付けていく方法メタヒューリスティクスの一覧メタヒューリスティクスにはいろいろな種類がありますが、今回はよく使われるものに絞って紹介します。貪欲法その場その場で最もよい選択肢を選び解を作り上げていく方法焼きなまし法改善しない場合も一定確率で採用し局所解にハマりにくくした山登り法発展発展
貪欲法・ビームサーチまずは貪欲法とビームサーチについて見ていきましょう。ビームサーチは貪欲法の発展型なので、まずは貪欲法から説明します。ビームサーチ解の候補を1つではなく複数個保持して解を作り上げていく貪欲法山登り法ある解を少し変更して改善したら採用しよりよい解に近付けていく方法貪欲法その場その場で最もよい選択肢を選び解を作り上げていく方法焼きなまし法改善しない場合も一定確率で採用し局所解にハマりにくくした山登り法発展発展
貪欲法貪欲法とは、(後先考えずに)その場その場で最も良さそうな選択肢を選び、解を一から作り上げていく方法です。123412341234123412341234複数の選択肢から…… 一番良さそうなものを選択!
貪欲法の適用例巡回セールスマン問題に貪欲法を適用してみましょう。「未訪問の都市の中で最も近い都市に移動する」という貪欲にしてみます。123546都市1からスタート123546最寄りの都市6へ123546最寄りの都市2へ123546最寄りの都市3へ123546最寄りの都市5へ123546最寄りの都市4へ123546都市1でゴール!
貪欲法の実装例N = 4cost = [[0, 5, 3, 8], [5, 0, 4, 6], [3, 4, 0, 9], [8, 6, 9, 0]]total_cost = 0current_city = 0visited = [True, False, False, False]order = [0]# 都市0以外のN-1都市を訪問するまでループfor _ in range(N - 1):# 最も近い次の都市を全探索best_cost = 1000000000best_city = -1for next_city in range(N):if visited[next_city]:continue# コストが最小の場合は更新next_cost = total_cost + cost[current_city][next_city]if next_cost < best_cost:best_cost = next_costbest_city = next_city# 次の都市に移動し、状態を更新するvisited[best_city] = Trueorder.append(best_city)total_cost = best_costcurrent_city = best_city# 最後に都市0に戻ってくるtotal_cost += cost[current_city][0]order.append(0)print(f"total_cost: {total_cost}")print(f"order: {order}")入力の作成合計コスト・現在位置・訪問済みフラグ・訪問順を初期化都市0以外を全て訪問するまでループまだ訪問していない都市を全探索し、最もコストが小さい都市を次の都市として選ぶ次の都市に移動する合計コスト・現在位置・訪問済みフラグ・訪問順を更新最後に都市0に戻る合計コスト・訪問順を出力して終了
貪欲法の長所と短所貪欲法の長所と短所を表にしてみました。実装が簡単で動作が高速なため、初心者から上級者までオススメです。実装が簡単まずお試しで組んでみることがやりやすく、より高度な手法を使う前の足がかりになる長所 短所動作が高速今回のケースだと𝑂 𝑁2 となり、とても高速他の手法と組み合わせて使うこともやりやすい「損して得取れ」が難しい基本的に後先考えずに動くので、後ろの方にしわ寄せが行きやすい評価関数のチューニングが難しい選び方の基準となる評価関数によって性能が変わり、そのチューニングが難しい123546※各状態の「良さ」を決める関数のことを「評価関数」といいます。
ビームサーチビームサーチとは貪欲法の発展形であり、貪欲法では1つしか持たなかった解の候補を複数個保持して解を作り上げていく方法です。123412341234123412341234複数の選択肢から…… 良さそうなものを複数選択!
ビームサーチの適用例こちらも巡回セールスマン問題に適用してみましょう。貪欲法をベースに「総コストの小さい3つを保持する」という方針にしてみます。都市1からスタート12340分候補3つとも保持12344分12346分123410分12349分123410分123410分123411分⋮123413分123416分123414分123420分123420分123423分上位3つまで保持 候補3つとも保持 解の完成!
貪欲法とビームサーチの比較貪欲法では「その時点で一番良いもの」だけを考えていましたが、ビームサーチでは「その時点で良い順にK番目まで」を考える点が異なります。12340分12344分12346分123410分12349分123410分123410分123413分123416分123414分123420分123420分123423分12340分12344分12349分123413分123423分1個K個貪欲法ビームサーチ
ビームサーチの実装例長くなるので省略します!ごめんなさい!
山登り法・焼きなまし法次に山登り法と焼きなまし法について見ていきましょう。焼きなまし法は山登り法の発展型なので、まずは山登り法から説明します。ビームサーチ解の候補を1つではなく複数個保持して解を作り上げていく貪欲法山登り法ある解を少し変更して改善したら採用しよりよい解に近付けていく方法貪欲法その場その場で最もよい選択肢を選び解を作り上げていく方法焼きなまし法改善しない場合も一定確率で採用し局所解にハマりにくくした山登り法発展発展
山登り法山登り法(局所探索法)とは、ある解を少し変更してみて、改善したら採用し、よりよい解に少しずつ近付けていく方法です。12341234微妙な解を…… 少し変更して改善!
なぜ山登り法という名前なの?解を少しずつ改善していく動きが山を登っていくイメージに似ているため、山登り法と呼ばれることが多いです。初期解下がることはしない上がる方向なら進んでいく良い解が得られた! スコア
山登り法の適用例巡回セールスマン問題に山登り法を適用してみましょう。巡回セールスマン問題では「ランダムな区間の訪問順を反転させる」※という2-optと呼ばれる変更が有効なので、今回はその手法を試してみます。132452分5 6132458分5 6132443分5 6※「2辺をランダムに選び、辺をつなぎ替える」と説明されることが多いですが、やっていることは同じです。[3, 4]を反転[3, 5]を反転[3, 5, 6]を反転132465分5 6132474分5 6132468分5 6[5, 3]を反転[5, 1, 2]を反転132461分5 6[2, 4]を反転
山登り法の実装例# 制限時間の定義TIME_LIMIT = 1.9# 初期解 (state) を作る# ランダムな解にしても、貪欲法で解を作ってもよいstate = generate_initial_state()start_time = get_time()# 時間いっぱいループwhile get_time() - start_time < TIME_LIMIT:# 解を少し変化させる# 1箇所の値を変化させたり、2つの値を交換したりnew_state = change_state(state)# スコアを計算するold_score = calculate_score(state)new_score = calculate_score(state)# スコアが悪化しなければ採用if new_score >= old_score:state = new_state# 解を出力するprint(state)制限時間の定義初期解を作成ランダムな解を作っても、貪欲法などで解を作ってもよい解の出力制限時間になるまでループ解を少し変化させる古い解のスコアと新しい解のスコアを計算するスコアが悪化していなければ採用※擬似コードなので、そのままコピペしても動きません。
山登り法の長所と短所山登り法の長所と短所を表にしてみました。貪欲法以上に強力な手法なので、適用できる問題にはかなり強いです。全体を見て判断できる途中段階ではなく最終状態で評価できるので「損して得取れ」という動きがとてもやりやすい長所 短所性能が高い比較的実装がシンプルでありながら、貪欲法よりも良い解を出しやすい適用できる問題の幅が少し狭いテトリスのように「少し変えただけで最終状態が大きく変わってしまう」ような問題は苦手局所解にハマりやすいそれ以上改善ができない局所解になりやすい(詳しくは次のページ)
局所解山登り法では、「どちらに行ってもスコアが下がってしまう」という嘘の最適解にハマってしまうことがあります。この解のことを局所解といいます。初期解頂上まで来たつもりが……より良い解にたどり着けない!スコア
焼きなまし法「局所解にハマりやすい」という欠点を解消したのが焼きなまし法です。ある確率でスコアが悪化する変更を許すことで局所解から脱出します。初期解悪化する変更もたまに許すスコアより良い解に到達できた!
温度パラメータ焼きなまし法で重要な役割を果たすのが温度パラメータです。温度によってスコアが悪化する変更を採用する確率が変化します。温度が高いときスコアが悪化する変更を採用しやすく、幅広い解を探し回ります。山登り法というより、ランダムに近いです。温度が低いときスコアが悪化する変更を採用しにくく、確実に良い解に近付いていきます。山登り法に近い動きです。
温度スケジューリング焼きなまし法では、序盤は温度を高くし、だんだんと温度を下げていきます。序盤は幅広い解を探索し、終盤は確実に良い解に近付きます。高温 低温大きな解の悪化も許し幅広い解を探し回る少しずつ温度を下げて探索する範囲を狭める山登りのような動きになり確実に良い解に近付く
焼きなまし法の実装例詳細は割愛しますが、山登り法から解の採用判断だけ変更すればOKです。# 制限時間の定義TIME_LIMIT = 1.9# 初期解 (state) を作る# ランダムな解にしても、貪欲法で解を作ってもよいstate = generate_initial_state()start_time = get_time()# 時間いっぱいループwhile get_time() - start_time < TIME_LIMIT:# 解を少し変化させる# 1箇所の値を変化させたり、2つの値を交換したりnew_state = change_state(state)# スコアを計算するold_score = calculate_score(state)new_score = calculate_score(state)# スコアが悪化しなければ採用if new_score >= old_score:state = new_state# 解を出力するprint(state)↑違いはここだけ!# 各種パラメータ定義TIME_LIMIT = 1.9START_TEMP = 10000END_TEMP = 100# 初期解 (state) を作る# ランダムな解にしても、貪欲法で解を作ってもよいstate = generate_initial_state()start_time = get_time()# 時間いっぱいループwhile get_time() - start_time < TIME_LIMIT:# 解を少し変化させる# 1箇所の値を変化させたり、2つの値を交換したりnew_state = change_state(state)# スコアを計算するold_score = calculate_score(state)new_score = calculate_score(state)# 温度 (temperature) と遷移確率 (probability) を計算time = (get_time() - start_time) / TIME_LIMITtemperature = pow(START_TEMP, 1 - time) * pow(END_TEMP, time)probatility = exp((new_score - old_score) / temperature)# スコアが悪化しなければ無条件で採用# 悪くなっていても確率的に採用if new_score >= old_score or random() < probatility:state = new_state# 解を出力するprint(state)山登り法 焼きなまし法温度温度パラメータ𝑇は、開始温度を𝑇0、終了温度を𝑇1、経過時間を𝑡 0 ≤ 𝑡 ≤ 1 として、𝑇 𝑡 = 𝑇01−𝑡 × 𝑇1𝑡としています。採用確率採用確率𝑝は、スコア変化量をΔ𝑆、温度を𝑇として、𝑝 Δ𝑆, 𝑇 = ቊ1 Δ𝑆 ≥ 0𝑒 ΤΔ𝑆 𝑇 Δ𝑆 < 0としています(最大化問題の場合)。※擬似コードなので、そのままコピペしても動きません。
焼きなましの長所最強!というのは言いすぎですが、幅広い問題に対してとても高い性能を示します。
第1部のまとめ1. 普通に解こうとすると、時間がかかりすぎてまともに解けない問題がある2. メタヒューリスティクスは難しい問題を解くためのアルゴリズムで、幅広い問題が現実的な時間で解けるようになるので嬉しい3. 代表的なメタヒューリスティクスには2つの種類があり、貪欲法系と山登り法系に分けられる
メタヒューリスティクスの実社会への応用第2部
第2部 メタヒューリスティクスの実社会への応用1. 巡回セールスマン問題と見なせる実社会の問題たち2. 実社会への応用例の紹介
巡回セールスマン問題と見なせる実社会の問題巡回セールスマン問題はさまざまな応用先があります。どんな問題が巡回セールスマン問題と見なせるかについて見ていきましょう。倉庫における荷物のピッキング電子回路基板の穴開け順最適化工具の取り替え順序最適化
倉庫における荷物のピッキングあなたはネットショッピングの倉庫で品物を集めるアルバイトをしています。注文ごとに品物のリストを受け取り、できるだけ早く品物を集めたいです。どのような経路で回ればよいでしょうか?
倉庫における荷物のピッキング全ての場所を1回ずつ訪れて元の位置に帰ってきたい→ 巡回セールスマン問題 とみなして解くことができる
電子回路基板の穴開け順最適化あなたは工場で電子回路の基板に穴を開ける装置の設定をしています。必要な場所に穴を開けるためには、ドリルを前後左右に動かす必要があります。たくさん基板を作りたいので、できるだけ高速に穴を開ける順序を求めたいです。どのような順序で穴を開ければよいでしょうか?電子回路 ドリル(イメージ)ドリルによる穴開け
電子回路基板の穴開け順最適化人が移動するのもドリルが移動するのも同じ→ 巡回セールスマン問題 とみなして解くことができる実問題では数千点の穴を開ける必要があることも!定位置
工具の取り替え順序最適化あなたは工作用ロボットの取り扱いをしています。ロボットを用いて作りたい品物が3つあり、それぞれ必要な工具が異なります。ロボットが工具を取り替えるとき、表に示す取り替え時間がかかります。どのような順番で作れば取り替え時間が最小になるでしょうか?なしなし - 15秒 10秒 30秒15秒 - 25秒 15秒10秒 25秒 - 5秒30秒 15秒 5秒 -取り替え後の工具取り替え前の工具工具取り替え時間の一覧表ロボットと工具 作りたい品物
工具の取り替え順序最適化情報を整理してみましょう。取り替え前後の時間の表を図に整理すると、右上の図のようになります。全ての状態を1回ずつ訪れてから元の状態に戻ってきたい→ 巡回セールスマン問題 とみなして解くことができるなしなし - 15秒 10秒 30秒15秒 - 25秒 15秒10秒 25秒 - 5秒30秒 15秒 5秒 -取り替え後の工具取り替え前の工具 なし10秒15秒5秒15秒30秒25秒
身近に潜んでいる最適化問題たちこのように、一見未知の問題のように見えても見方を変えて考察すれば知っている問題になったりします。普段のなにげない生活の中に最適化問題が潜んでいないか意識して見てみるのも面白いかもしれません。
実社会への応用例の紹介巡回セールスマン問題に限らず、実社会の問題でメタヒューリスティクスが使えるものはたくさんあります。今回はその一部の例を見ていきましょう。テレビ放送網の最適化工場の生産計画最適化貨物船の運航計画最適化
テレビ放送網の最適化どのように放送局同士をつなぎ、どのくらいの強度で電波を発信すれば全ての住人にできるだけ安くテレビの電波を届けられるかという問題です。現実にある問題ではなくAHC020の問題なのですが、題材としてちょうど良いので紹介します。ちなみにwriterは私です。問題文高橋社長は公式生放送「あーだこーだー」をテレビ放送したいです。放送するためには、オフィスと放送局を通信ケーブルでつなぎ、放送局から電波を発信する必要があります。高橋社長は全住民に生放送を配信したいのですが、通信ケーブルと電波の発信にはコストがかかります。できるだけコストを抑えつつ、全住民に生放送の配信ができるような放送網を作ってください。オフィス住民放送局通信ケーブル電波の届く範囲※この問題文はフィクションです。実在の人物・団体・番組・chokudaiさんとは一切関係がありません。
テレビ放送網の最適化writer解は焼きなましでした。この動画のように序盤は幅広い解を探索し、終盤は確実に良い解に近付きます。高温 低温大きな解の悪化も許し幅広い解を探し回る山登りのような動きになり確実に良い解に近付く
工場の生産計画最適化ALGO ARTIS、株式会社日本触媒に高吸水性樹脂の生産計画最適化ソリューションを提供 | 株式会社ALGO ARTIShttps://www.algo-artis.com/news/20221004
貨物船の運航計画最適化東北電力株式会社へ最適化AI(アルゴリズム)を活用した配船計画最適化ソリューションを提供 | 株式会社ALGO ARTIShttps://www.algo-artis.com/news/20220920
社会的なインパクトメタヒューリスティクスを実社会の問題に適用するのは、社会的なインパクトがとても大きい仕事です。コスト削減 例えば年間数百億円の業務の効率を1%上げることができれば、年間数億円のコスト削減効果が得られます。複数パターン検討 人手で計画を作ると1つの計画を立てるので精一杯ですが、最適化で高速に計画を作れば複数パターンの検討ができます。属人化の排除 計画作成という仕事は難しく、ベテランの勘頼みになりがちですが、最適化を使えばベテランでなくても計画を作れるようになります。少しでもこういった仕事が面白そうだなと思ってもらえたら嬉しいです。
第2部のまとめ1. 一見未知の問題のように見えても、実は見方を変えれば知っている問題と同じになることがある2. メタヒューリスティクスは実社会の問題にも使われており、コスト削減や属人化の排除などの大きな社会的インパクトがある
おわりに
おわりにメタヒューリスティクスは、今まで解けなかった問題が解けるようになる強力な武器です。皆さんもメタヒューリスティクスを学び、「解けた!」の世界を広げてみませんか?
もっと学びたい人向けの参考資料最後に、もっと学びたい人向けの資料紹介をして講演の締めとします。
オススメの本ゲームで学ぶ探索アルゴリズム実践入門青木栄太 著/技術評論社メタヒューリスティクスをはじめとする幅広い探索アルゴリズムがぎゅっと詰まった一冊!丁寧な実装例付きで、各手法の基礎から一歩進んだテクニックまで学べます。初心者から上級者まで、メタヒューリスティクスをじっくり学びたい人にオススメです!https://book.mynavi.jp/ec/products/detail/id=131288https://gihyo.jp/book/2023/978-4-297-13360-3競技プログラミングの鉄則アルゴリズム力と思考力を高める77の技術米田優峻 著/マイナビ出版メタヒューリスティクス関連の章は1章だけですが、とても分かりやすくまとまっています!AtCoder上での自動採点システムも提供されているので、定着度の確認もバッチリです。アルゴリズムもメタヒューリスティクスも勉強してみたい初~中級者の方にオススメです!
オススメの問題AHCのうち、長期コンテストは複雑な問題が出されることが多いので、まずは短期コンテスト(4時間程度)で学んでみるのがオススメです。Introduction to Heuristics Contest問題がシンプルな上、いろいろな解法で解くことができる良問です。wataさんの解説pdfがとても丁寧です。私もこれでメタヒューリスティクスに入門しました。AtCoder Heuristics Contest 020手前味噌ですが、私がwriterを務めた問題です。基本問題から一歩進んだ貪欲法や焼きなましの練習にどうぞ。解説放送で、いろいろな解き方をステップを踏みつつ紹介しています。
ご清聴ありがとうございました!