PCガジェットはいつでも安いAmazonで!

移動販売をどこに出店するかソルバーで求める

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

icon icon

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

今回もORの話です。

今回扱うのは施設配置問題。

様々な制約の上でどこに出店するのかという問題を扱います。

参考にしたのは以下。

松井泰子、根本俊男、宇野毅明(2008)『入門オペレーションズ・リサーチ』東海大学出版部.

例題は以下。

移動販売の出店地の問題

ある町で移動スーパーを出店することにした。

出店候補地は3か所あって、そのうち一日で2か所に午前と午後それぞれ出店することにした。例えば候補地①と②に出店する場合、午前に①、午後に②に出店するということである。

候補地の周りには4つの地区があって、それぞれの地区はどちらかの出店地で担当する。

地区Aの人口は30人、地区Bは20人、地区Cは10人、地区Dは5人である。

それぞれの出店地では合計50人までの人口を担当する。

移動のしやすさを考え、各地区から担当の出店地までの距離の合計が最小になるようにしたい。

どのように出店すればよいか。

候補地と地区の距離は以下。

A地区30人B地区20人C地区10人D地区5人
200m200m270m650m
550m250m250m250m
350m150m350m370m

この問題の数理計画問題は以下となります。
候補地①に出店するなら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にします。

デフォルトより変異率を高くすると求まりやすい傾向がありました。

解決ボタンを押した答えは

A1A2A3B1B2B3C1C2C3D1D2D3y1y2y3
100100010010110
objg1g2g3g*
900501502

候補地①と②に出店するのがよさそうです。

もう少し候補地と地区の数が増えると解が求まるかは微妙ですね。

変数の数が増えすぎると当然求まらない可能性も高まります。

一応こんなこともできますねというお話でした。

当ブログ(シルルスのコードおきば)ではエクセルソルバー関係の記事を他にも執筆しています。参考になりましたら幸いです。

●エクセルソルバーで複数解を求める方法【初期値を変えるしかないです】

●エクセルソルバーと組み合わせ最適化問題【解法例と基礎知識】

●エクセルソルバーとは【使い方と数理最適化の基礎】

●ソルバーで高校の化学平衡の問題を解いてみる

●輪作作物をソルバーで決定

●Calcのソルバーでどこまでできるか実験

●巡回セールスマン問題をソルバーで解く

●Support Vector Regressionをエクセルのソルバーで作ってみた

●ソルバーで正規分布の90%範囲を求める

●ソルバーとユーザー定義関数の連携

目次