\スタッフ厳選!日本HP おすすめパソコン/

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
今回もORの話です。
今回扱うのは施設配置問題。
様々な制約の上でどこに出店するのかという問題を扱います。
参考にしたのは以下。
松井泰子、根本俊男、宇野毅明(2008)『入門オペレーションズ・リサーチ』東海大学出版部.
例題は以下。
移動販売の出店地の問題
ある町で移動スーパーを出店することにした。
出店候補地は3か所あって、そのうち一日で2か所に午前と午後それぞれ出店することにした。例えば候補地①と②に出店する場合、午前に①、午後に②に出店するということである。
候補地の周りには4つの地区があって、それぞれの地区はどちらかの出店地で担当する。
地区Aの人口は30人、地区Bは20人、地区Cは10人、地区Dは5人である。
それぞれの出店地では合計50人までの人口を担当する。
移動のしやすさを考え、各地区から担当の出店地までの距離の合計が最小になるようにしたい。
どのように出店すればよいか。

候補地と地区の距離は以下。
| A地区30人 | B地区20人 | C地区10人 | D地区5人 | |
| ① | 200m | 200m | 270m | 650m |
| ② | 550m | 250m | 250m | 250m |
| ③ | 350m | 150m | 350m | 370m |
この問題の数理計画問題は以下となります。
候補地①に出店するならy1=1、②に出店しないならy2=0と考えます。
候補地①で地区Aを担当するときxA1=1、候補地③で地区Cを担当しないときxC3=0と考えます。
目的:
200*xA1+550*xA2+350*xA3+200*xB1+250*xB2+150*xB3+270*xC1+250*xC2+350*xC3+650*xD1+250*xD2+370*xD3
の最小化。
y1+y2+y3=2
各地区(A,B,C,D)と候補地jについて
xAj<=yj xBj<=yj xCj<=yj xDj<=yj 30xA1+20xB1+10xC1+5xD1 <= 50 30xA2+20xB2+10xC2+5xD2 <= 50 30xA3+20xB3+10xC3+5xD3 <= 50 xA1,…,xD3,y1,y2,y3は0か1 それぞれの地区はどちらかの候補地のうちより近いほうを利用する これを解くために以下のエクセルを作成します。
この問題の数理計画問題は以下となります。
候補地①に出店するならy1=1、②に出店しないならy2=0と考えます。
候補地①で地区Aを担当するときxA1=1、候補地③で地区Cを担当しないときxC3=0と考えます。
目的:
200*xA1+550*xA2+350*xA3+200*xB1+250*xB2+150*xB3+270*xC1+250*xC2+350*xC3+650*xD1+250*xD2+370*xD3
の最小化。
y1+y2+y3=2
各地区(A,B,C,D)と候補地jについて
xAj<=yj
xBj<=yj
xCj<=yj
xDj<=yj
30xA1+20xB1+10xC1+5xD1 <= 50
30xA2+20xB2+10xC2+5xD2 <= 50
30xA3+20xB3+10xC3+5xD3 <= 50
xA1,…,xD3,y1,y2,y3は0か1
それぞれの地区はどちらかの候補地のうちより近いほうを利用する これを解くために以下のエクセルを作成します。

各セルの設定は以下。
B4 =200*B2+550*C2+350*D2+200*E2+250*F2+150*G2+270*H2+250*I2+350*J2+650*K2+250*L2+370*M2
C4 =30*B2+20*E2+10*H2+5*K2
D4 =30*C2+20*F2+10*I2+5*L2
E4 =30*D2+20*G2+10*J2+5*M2
F4 =SUM(N2:P2)
それぞれの地区はどちらかの候補地のうちより近いほうを利用するという制約は以下で対応。
B8=IF(AND($N$2=1,$O$2=1,$P$2=0),B2,0)
C8=IF(AND($N$2=1,$O$2=1,$P$2=0),E2,0)
D8=IF(AND($N$2=1,$O$2=1,P2=0),I2,0)
E8=IF(AND($N$2=1,$O$2=1,P2=0),L2,0)
B9=IF(AND($N$2=1,$P$2=1,O2=0),B2,0)
C9=IF(AND($N$2=1,$P$2=1,O2=0),G2,0)
D9=IF(AND($N$2=1,$P$2=1,O2=0),H2,0)
E9=IF(AND($N$2=1,$P$2=1,O2=0),M2,0)
B10=IF(AND($O$2=1,$P$2=1,N2=0),D2,0)
C10=IF(AND($O$2=1,$P$2=1,N2=0),G2,0)
D10=IF(AND($O$2=1,$P$2=1,N2=0),I2,0)
E10=IF(AND($O$2=1,$P$2=1,N2=0),L2,0)
F8=SUM(B8:E8)
F9=SUM(B9:E9)
F10=SUM(B10:E10)
F11=SUM(F8:F10)
ソルバーの設定は以下。
目的セル:$B$4
目標値:最小化
変数セル:$B$2:$P$2
制約条件
B2<=N2
B2:P2=バイナリ
C2<=O2
C4:E4<=50
D2<=P2
E2<=N2
F11=4
F2<=O2
F4=2
G2<=P2
H2<=N2
I2<=O2
J2<=P2
K2<=N2
L2<=O2
M2<=P2
エボリューショナリーのオプションで変異率を0.5にします。
デフォルトより変異率を高くすると求まりやすい傾向がありました。
解決ボタンを押した答えは
| A1 | A2 | A3 | B1 | B2 | B3 | C1 | C2 | C3 | D1 | D2 | D3 | y1 | y2 | y3 |
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| obj | g1 | g2 | g3 | g* |
| 900 | 50 | 15 | 0 | 2 |
候補地①と②に出店するのがよさそうです。
もう少し候補地と地区の数が増えると解が求まるかは微妙ですね。
変数の数が増えすぎると当然求まらない可能性も高まります。
一応こんなこともできますねというお話でした。
当ブログ(シルルスのコードおきば)ではエクセルソルバー関係の記事を他にも執筆しています。参考になりましたら幸いです。
●エクセルソルバーで複数解を求める方法【初期値を変えるしかないです】
●エクセルソルバーと組み合わせ最適化問題【解法例と基礎知識】