Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
facility-location-problem.pdf
Search
autumn_eel
August 29, 2019
Programming
49
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
facility-location-problem.pdf
autumn_eel
August 29, 2019
More Decks by autumn_eel
See All by autumn_eel
divide-and-conquer
autumn_eel
0
110
quantum-algorithm
autumn_eel
0
62
Other Decks in Programming
See All in Programming
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.8k
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
Workers Cache を知る
syumai
0
370
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
すこし踏み込む CancellationToken
htkym
2
1.7k
Event is what happens
moro
2
840
ジョジョの世界をXRで再現する
mofurune
0
170
The Rails Doctrine Decade
koic
2
590
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
ChromeでローカルLLM
ryu1013
0
140
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Agile that works and the tools we love
rasmusluckow
331
22k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
Transcript
施設配置問題 autumn_eel
施設配置問題 2次元平面上に点で表されるN個の都市とM個の施設開設候補地がある それぞれの候補地には、そこで施設を開設したときのコストf[i]が 定まっている それぞれの都市は、少なくとも1つの施設と接続していなければ ならず、その接続コストを都市と施設の2点間の距離とする
開設する施設の組み合わせとそれぞれの都市の接続先を適切に選んだ とき、開設コストと接続コストの合計を最小化し、その組み合わせを 出力せよ
入力例1 例えばこのような場合 (矢印上の数字は 2点間の距離を表す)
入力例1 例えばこのような場合 (矢印上の数字は 2点間の距離を表す) 最小コストは13
小課題 小課題1 (累計200点) 1<=N,M<=15を満たす 小課題2 (累計1000点) 1<=N<=1000, 1<=M<=1000
を満たす ただし、最小コストをCとして3*C以下の解が出力されていれ ば正解とみなす 小課題3 (累計869120点) 1<=N<=1000, 1<=M<=1000を満たす 小課題2とは違い、最小コストの解を出力する必要がある
小課題1 (累計200点) 開設する施設を全探索する それぞれの都市は、開設された施設のうち最も近い (=接続 コストが小さい) ものを接続先として選ぶ
O(2^M*N)
小課題1 (累計200点) 開設する施設を全探索する それぞれの都市は、開設された施設のうち最も近い (=接続 コストが小さい) ものを接続先として選ぶ
O(2^M*N) 200点
小課題2 (累計1000点) 厳密性を諦めて、近似解を求めることにする
整数計画問題へ ここで施設配置問題を整数計画問題として定式化する
整数計画問題へ ここで施設配置問題を整数計画問題として定式化する 施設配置問題は次のスライドのような整数計画問題として 表すことができる
整数計画問題へ
整数計画問題へ 式がたくさん出てきた... それぞれを簡単に解説
整数計画問題へ F: 施設(Facility)候補地を表す集合 C: 都市(City)を表す集合 c[i][j]: 施設iと都市jとの接続コスト(距離)
f[i]: 施設の開設コスト x[i][j]: 都市jは施設iに接続しているか? (0: 接続していない、1: 接続している) y[i]: 施設iを開設しているか? (0: 開設していない、1: 開設している)
整数計画問題へ 接続コストの和 (左) と 開設コストの和 (右) を最小化したい
整数計画問題へ x[i][j]: 都市jから施設iに接続されているか? (0: 接続していない、1: 接続している) (再掲) 各都市jは、1つ以上の施設と接続してなければならない
整数計画問題へ y[i]: 施設iを開設しているか? (0: 開設していない、1: 開設している) (再掲) 都市jが施設iに接続している場合、施設iは開設されている 必要がある
整数計画問題へ x[i][j]、y[i]は接続しているか、開設しているかのフラグ なので、0か1
整数計画問題へ 施設配置問題を整数計画問題として表すことができた
整数計画問題へ 施設配置問題を整数計画問題として表すことができた が、整数計画問題を解く効率的なアルゴリズムは 存在しない
整数計画問題へ 施設配置問題を整数計画問題として表すことができた が、整数計画問題を解く効率的なアルゴリズムは 存在しない →整数計画問題から、線形計画問題に制約を「緩和」 (LP-緩和という) する
線形計画問題へ さっきの制約式をこのように変更する 制約式から、x[i][j]やy[i]は必ず0以上1以下になる 線形計画問題になった
線形計画問題へ さっきの制約式をこのように変更する 制約式から、x[i][j]やy[i]は必ず0以上1以下になる 線形計画問題になった 線形計画問題は多項式時間で解けるので、 これを解けばおわり?
線形計画問題へ ではない x[i][j]やy[i]を小数で出力されても扱いが分からない
線形計画問題へ ではない x[i][j]やy[i]を小数で出力されても扱いが分からない 困った
双対問題 そこで、これを直接解くのは諦めて、この問題の双対問題 を解くことにする
双対問題 双対問題は、もとの問題の制約式を足し合わせて係数調整を することによって機械的につくることができる (ここでは過程は省略) 結果が次のスライド
双対問題
双対問題 機械的に作られた双対問題に直観的な「意味」を与えたい
双対問題 機械的に作られた双対問題に直観的な「意味」を与えたい α[j]を「都市jが使う予算の合計」 β[i][j]を「都市jが施設iを開設させるために『出資する』と 約束した金額」 と見ると、見通しが良くなる
双対問題 (α[j]=都市jが使う予算の合計) - (β[i][j]=都市jが施設iの開設の ために出資する金額)は(c[i][j]=都市jが施設iに接続するため に支払う金額)を超えない
双対問題 (β[i][j]=都市jが施設iの開設のために出資する金額)の合計は (f[i]=施設iの開設費用)を超えない
双対問題 それぞれの都市が支払う金額は負にならない
双対問題 以上の条件を満たした上で、それぞれの都市が支払う金額の 合計を最大化したい (最大化であることに注意!)
双対問題 双対問題を得ることができた
双対問題 双対問題を得ることができた 双対問題からもとの問題に戻す時、うまい性質が表れる (= 近似保証が出来る) ような方法で、双対問題をなるべく最適解に近くなるよう に解きたい
双対問題 Maximizeしたい対象がα[j]の和であることに注目する それぞれのa[j]を少しずつ増やして、β[i][j]を制約式を満たす ように更新していく
双対問題 以下のようなステップを繰り返す(d=ある程度小さな数)
双対問題 以下のようなステップを繰り返す(d=ある程度小さな数) 1. まだ「施設に接続した」とみなされていない(後述)それぞれの都市jについ て、 α[j] を +d する
(そのような都市がない場合、操作を終了する)
双対問題 以下のようなステップを繰り返す(d=ある程度小さな数) 1. まだ「施設に接続した」とみなされていない(後述)それぞれの都市jについ て、 α[j] を +d する
(そのような都市がない場合、操作を終了する) 2. 1の操作によって a[j] - β[i][j] <= c[i][j] を満たさない i, j が発生した場合、 β[i][j] = a[j] - c[i][j] と更新する
双対問題 以下のようなステップを繰り返す(d=ある程度小さな数) 1. まだ「施設に接続した」とみなされていない(後述)それぞれの都市jについ て、 α[j] を +d する
(そのような都市がない場合、操作を終了する) 2. 1の操作によって a[j] - β[i][j] <= c[i][j] を満たさない i, j が発生した場合、 β[i][j] = a[j] - c[i][j] と更新する 3. ∑β[i][j] >= f[i] となる施設 i が発生した場合、 施設 i を暫定的に「開設した」と宣言する
双対問題 以下のようなステップを繰り返す(d=ある程度小さな数) 1. まだ「施設に接続した」とみなされていない(後述)それぞれの都市jについ て、 α[j] を +d する
(そのような都市がない場合、操作を終了する) 2. 1の操作によって a[j] - β[i][j] <= c[i][j] を満たさない i, j が発生した場合、 β[i][j] = a[j] - c[i][j] と更新する 3. ∑β[i][j] >= f[i] となる施設 i が発生した場合、 施設 i を暫定的に「開設した」と宣言する 4. (以前に開設が宣言されたものも含めて)既に開設された施設iとの接続コスト 以上のa[j]を持つ都市jを「施設iに接続した」とみなす
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 初期状態
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 1ステップ目終了後
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 2ステップ目終了後
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 3ステップ目終了後 出資が集まりそう
なので開設!
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 4ステップ目終了後
双対問題: 例 ここではd=1 辺上の数のうち1つ目 が距離、2つ目がβ 5ステップ目終了後 出資が集まりそう
なので開設! 出資が集まりそう なので開設!
双対問題 実装上では、実際に+dを繰り返すのではなく、イベントが 発生するステップをset等で管理しておけば良い 双対問題のいい感じの解を求めることができた これをもとの問題に戻すには?
双対問題→もとの問題 まず、どの施設を実際に開設するか考える必要がある 前の操作で「開設」を宣言した施設を全部開設 できないのはなぜ?
双対問題 →もとの問題 例えばさっきの例 都市3は施設1と施設3に 「出資」を約束しているが、 両方に出資できるだけの予算はな く、実際に出資できるのは1つの施 設に対してだけ
出資できる先が1つに限られる理由 は「相補条件」によって説明でき るが、詳細は省略
双対問題→もとの問題 以下のような手順で実際に開設する施設を選ぶ
双対問題→もとの問題 以下のような手順で実際に開設する施設を選ぶ 1. 開設が宣言されている施設を1つ選ぶ
双対問題→もとの問題 以下のような手順で実際に開設する施設を選ぶ 1. 開設が宣言されている施設を1つ選ぶ 2. その施設に出資を約束している都市を見て、その都市が出 資している施設が「実際に開設する」として選ばれていな いかみる
双対問題→もとの問題 以下のような手順で実際に開設する施設を選ぶ 1. 開設が宣言されている施設を1つ選ぶ 2. その施設に出資を約束している都市を見て、その都市が出 資している施設が「実際に開設する」として選ばれていな いかみる 3.
選ばれている場合→この施設を開設することはできない 選ばれていない場合→この施設を開設する
双対問題 →もとの問題 結局この例だと施設3は開設 できない 都市3に騙された
双対問題→もとの問題 それぞれの都市を開設した施設のうち最も近いものに接続 すれば良い →もとの問題の解に戻すことができた!
解析 求められた答えがどれくらい近似できているかを解析する
解析 求められた答えがどれくらい近似できているかを解析する 都市の状況によって場合分けをする
解析 1. 出資を約束した or 接続宣言をした相手の施設が 開設されている場合 このような施設は高々1つしかなく、 都市はもとのa[j]で出資した施設に必ず接続できる → α[j]
がそのまま支出金額になる
解析 2. そのような施設が開設されていない場合 施設iを「騙した」頂点 j' が必ず存在する 施設iが開設宣言されたステップをt1、施設i'が開設宣言されたステップをt2とすると、 a[j'] <= min(t1,t2)
(施設iかjが開設されるステップ以前に都市j'は接続完了している) また、t1 <= a[j] (都市jが接続完了したのは施設iが開設されたとき以降) よって、a[j'] <= a[j]
解析 2. そのような施設が開設されていない場合 a[j']>=c[i'][j'],a[j']>=c[i][j'] a[j]>=c[i'][j'],a[j]>=c[i][j'],a[j]>=c[i][j]なので、三角不等式より c[i'][j]<=3*a[j] また、この都市が開設のために出資する金額は0
解析 まとめると... パターン1の場合、(支出金額)=a[j] パターン2の場合、(支出金額)<=3*a[j] 双対問題の定義より、a[j]の和は実際の最適解以下
解析 まとめると... パターン1の場合、(支出金額)=a[j] パターン2の場合、(支出金額)<=3*a[j] 双対問題の定義より、a[j]の和は実際の最適解以下 →3近似 (近似率3) が達成出来ている! (ただし、答えが最適解の3倍になるのは稀で、ランダムケースとか
だと最適解にかなり近い値が出る) 計算量: シミュレーション部分がボトルネックでO(MN log(MN))
解析 まとめると... パターン1の場合、(支出金額)=a[j] パターン2の場合、(支出金額)<=3*a[j] 双対問題の定義より、a[j]の和は実際の最適解以下 →3近似 (近似率3) が達成出来ている! (ただし、答えが最適解の3倍になるのは稀で、ランダムケースとか
だと最適解にかなり近い値が出る) 計算量: シミュレーション部分がボトルネックでO(MN log(MN)) 1000点
実演 実際に問題を解いているところのビジュアライズ C++で問題を解き、出力されたログを解析 https://autumn-eel.github.io/facility-location-problem/ 入出力のファイルを選択するか、「サンプルを実行」で動きます
小課題3 (累計869120点)
小課題3 (累計869120点) 施設配置問題はNP困難
小課題3 (累計869120点) 施設配置問題はNP困難 解けた人がいたらすごいと思います 僕は解けません
まとめ NP困難な問題には、整数計画問題として定式化できるもの がある 定式化した問題を線形計画問題に緩和し、 その双対をとってうまく解くと、 良い近似を得られることがある
ご清聴ありがとうございました