『線形計画法入門(文科系の)』

門前パソコン学習所
令和2年如月
更新 2020-05-06,2023-09-16
2024-03-01
ページ末尾

書籍番号最適化問題備考
14.1 石炭・電力・労力を用いた生産計画
14.2 バター製造計画
14.3 残業による生産計画
15.1 食パンと牛乳だけの食事
15.2 合金の製造
16.1 リンゴの輸送 2-D2
16.2 人員の配置
16.3 切符の割当て
17.1 海水浴とレストランでの食事
17.2 四半期単位の年間生産販売計画 2-E1
17.3 最短路問題

(4.1) 石炭・電力・労力を用いた生産計画
これは、 森口繁一著「線計画法入門」にある(巻頭の)例題である。
問題
ある会社で製品 A と製品 B の2種類の製品を作ろうとしている。
製品 A を 1 kg 作るには石炭が 9 トン、電力が 4 kWh、労力が 3 人日(1 日当たり 3 人)だけ必要である。
製品 B を 1 kg 作るには石炭が 4 トン、電力が 5 kWh、労力が 10 人日だけ必要である。
ところがその会社でいまのところ利用できるのは、石炭が 360 トン、電力 200 kWhが、労力が 300 人日までで、それ以上は使えない。
製品 A は 1 kg について 7 万円の利益を生じ、製品 B は 1 kg について 12 万円の利益を生む。
石炭、電力、労力について上記の制約の下で、利益が最大になるように製品 A および B の生産高を決めたい。
製品 A製品 B使用可能量
X1X2
石炭使用量(トン/kg)94360(トン)
電力使用量(kWh/kg)45200(kWh)
労力使用量(人日/kg)310300(人日)
利益(万円/kg)712(最大化問題)
制約条件式
9X1+4X2≦360
4X1+5X2≦200
3X1+10X2≦300
X1,X2≧0
目的関数
7X1+12X2=z
これを最大化する。
最適解
X1=20, X2=24, z=428
Python による結果
最適値= 428.0
主要変数=
X1 20.0
X2 24.0
(4.2) バター製造計画
問題
日吉乳業では、これまで「ピーナッツ入り」と「チョコレート入り」の2種類の「変わりバター」の製造を行ってきたが、今度新しく「果実入りバター」を製造することになった。
そこで、 これらの製品をどのくらいずつ製造したら利益が最大になるか見当をつけたいと思う。
調査の結果、製品 1 ケース当たりの利益は、ピーナッツ入りが 1.6 千円、チョコレート入りが 1.5 千円、果実入りが 1.7 千円で、また製造にあたっては、次のような制約が加わることが分かった。
ピーナッツ
入り
チョコレート
入り
果実入り使用可能量
X1X2X3
原料(kg/ケース)332900(kg)
工程Ⅰ(分/ケース)212580(分)
工程Ⅱ(分/ケース)121480(分)
冷蔵庫(P ケース/ケース)112500(P ケース)
利益(千円/ケース)1.61.51.7(最大化問題)
制約条件式
3X1+3X2+2X3≦900
2X1+1X2+2X3≦580
1X1+2X2+1X3≦480
1X1+1X2+2X3≦500
X1,X2,X3≧0
目的関数
z=1.6X1+1.5X2+1.7X3
最適解
X1 = 80.0, X2 = 120.0, X3 = 150.0, Z = 563.0
Python による結果
最適値= 563.0
主要変数=
X1 80.0
X2 120.0
X3 150.0
(4.3) 残業による生産計画
問題
住吉工業では、労働力と 2 種類の原料を用いて 3 種類の製品を生産することができる。
各製品 1 単位を生産するのに必要な労働力と各原料の量、 およびそれから得られる利益(万円)を表にまとめると、次のようになる。
製品
ABC最大値
X1X2X3
労働力11 120
原料 134 6100
原料 235 3100
利益68 10(最大化問題)
さて、来期の見通しによれば、労働力は 20 単位、2 種類の原料はともに 100 単位までなら確保できる。
この見通しにもとづいて、 来期の利益を最大にするための生産計画、すなわち、どの製品をどれだけ生産するかを決めたい
制約条件式
1X1+1X2+1X3≦20
3X1+4X2+6X3≦100
3X1+5X2+3X3≦100
X1,X2,X3≧0
目的関数
z=6X1+8X2+10X3
最適解
X1 = 0.0, X2 = 10.0, X3 = 10.0, Z = 180.0
Python による結果
最適値= 180.0
主要変数=
X2 10.0
X3 10.0
(5.1) 食パンと牛乳だけの食事
問題
食パンと牛乳だけで、熱量、蛋白質、カルシウムという3つの栄養素を1日に必要なだけ摂取しようとしたら、食パンを何グラム食べて、牛乳を何グラム飲めばよいか。
食パン(100g)牛乳(100g)最低必要量
X1X2
熱量(kcal)270602500
蛋白質(g)8370
カルシウム(mg)11100600
値段(円)4025
制約条件式
270X1+60X2≧2500
8X1+3X2≧70
11X1+100X2≧600
X1, X2≧0
目的関数
Z=40X1+25X2
最適解
X1 = 8.1245, X2 = 5.1063, Z = 452.6386
Python による結果
最適値= 452.63857099999996
主要変数=
X1 8.1245254
X2 5.1063022
(5.2) 合金の製造
問題
3つの金属を表のような比率で混合して合金を作るとする。
金属混合比率(重量)
L60 %
M20 % 以下
N20 % 以上
金属 L,M,N を作るには 5 種類の原料 A,B,C,D,E を用いることができるが、これらの原料には L,M,N 以外の不純物も混ざっている。
その成分比率は次のようである。また、各原料の費用として、不純物を除去するための費用も含めた値を最後の行に示しておく。
原料
ABCDE
金属X1X2X3X4X5
L (%)401020050
M (%)1030102020
N (%)2010201010
不純物 (%)3050507020
費用 (千円/kg)975610
さて、100 kg の合金を最小費用で作るためには、原料をどのように使えばよいか
原料 A,B,C,D,E の使用量をそれぞれ変数 X1,X2,X3,X4,X5 (単位 kg)とする。
(1) 100 kg の合金を作る:
まず、5つの原料 A,B,C,D,E から不純物を除去すると、各原料がどれだけ残るか。
原料 A を X1 kg 使用するとすれば、それは不純物を 30 % 含んでいるから、
不純物を除去すると、実際に使用できる量は X1 kg の 70 %、すなわち 0.7X1 kg となる。
原料に B,C,D,E ついても実際に使用できる量は、同様な考え方で
それぞれ 0.5X2,0.5X3,0.3X4,0.8X5 となる。これらを混合して 100 kg 合金を作る。
(2) 金属 L は 60 % 含まれる:
原料 A,B,C,D,E はそれぞれ金属 L を 40 %,10 %,20 %,0 %, 50 % 含んでいる。
それらを混合した時の金属 L の含有量をちょうど 60 % にしなければならないから、
100 kg の合金のうちちょうど 60 kg が金属 L でなければならない。
(3) 金属 M は 20 % 以下とする:
原料 A,B,C,D,E はそれぞれ金属 M を 10 %,30 %,10 %,20 %, 20 % 含んでいる。
それらを混合した時の金属 M の含有量を 20 % 以下にしなければならないから、
100 kg の合金のうち金属 M は 20 kg 以下でなければならない。
(4) 金属 N は 20 % 以上とする:
原料 A,B,C,D,E はそれぞれ金属 N を 20 %,10 %,20 %,10 %,10 % 含んでいる。
それらを混合した時の金属 N の含有量を 20 % 以上にしなければならないから、
100 kg の合金のうち金属 N は 20 kg 以上でなければならない。
制約条件式
0.7X1+0.5X2+0.5X3+0.3X4+0.8X5=100
0.4X1+0.1X2+0.2X3+0.0X4+0.5X5=60
0.1X1+0.3X2+0.1X3+0.2X4+0.2X5≦20
0.2X1+0.1X2+0.2X3+0.1X4+0.1X5≧20
X1, X2, X3, X4, X5≧0
目的関数
Z=9X1+7X2+5X3+6X4+10X5
最適解
X1 = 66.6667, X2 = 0.0000, X3 = 0.0000, X4 = 0.0000, X5 = 66.6667
Z = 1266.6667
Python による結果
(6.1) リンゴの輸送
これは、 森口繁一著「線計画法入門」にある演習問題 D 2 である。
問題
Ⅰ,Ⅱ,Ⅲの3個所で果樹園を経営している人が、三つの消費地 A, B, C にリンゴを輸送して販売しようとしている。
消費地 A, B および C での売価はそれぞれ1箱当たり 680 円, 655 円および 715 円である。
そして消費地 A の販売業者は最低 800 箱送ってほしいと要求しており、B および C からはそれぞれ最低 1200 箱および 1500 箱を要求してきている。
果樹園Ⅰ,ⅡおよびⅢの出荷能力はそれぞれ 1150 箱、 1900 箱および 1500 箱である。
製造原価は各地均一で、1箱 500円である。
利潤を最大にするためにはどのように出荷したらよいか、
ただし輸送費は生産者もちであって、1箱当たりの輸送費は次のようである。
消費地
出荷能力果樹園ABC
1150箱 X1 X2 X3
37 20 39
1900箱 X4 X5 X6
14 28 24
1500箱 X7 X8 X9
24 34 32
要求量 80012001500
売価 680655715
X1+X2+X3≦1150, X4+X5+X6≦1900, X7+X8+X9≦1500
X1+X4+X7≧800, X2+X5+X8≧1200, X3+X6+X9≧1500
利潤=売価-(製造原価+輸送費)
Z=(680-(500+37))X1+(655-(500+20))X2+(715-(500+39))X3+
(680-(500+14))X4+(655-(500+28))X5+(715-(500+24))X6+
(680-(500+24))X7+(655-(500+34))X8+(715-(500+32))X9
最良輸送計画
消費地
出荷地ABC
011500
80001100
0501450
別解
消費地
出荷地ABC
011500
001900
80050650
Z=769550
制約条件式
X1+X2+X3≦1150, X4+X5+X6≦1900, X7+X8+X9≦1500
X1+X4+X7≧800, X2+X5+X8≧1200, X3+X6+X9≧1500
目的関数
Z=(680-(500+37))X1+(655-(500+20))X2+(715-(500+39))X3+
 (680-(500+14))X4+(655-(500+28))X5+(715-(500+24))X6+
 (680-(500+24))X7+(655-(500+34))X8+(715-(500+32))X9
最適解
X1 = 0.0000, X2 = 1150.0000, X3 = 0.0000,
X4 = 800.0000, X5 = 0.0000, X6 = 1100.0000,
X7 = 0.0000, X8 = 50.0000, X9 = 1450.0000
Z = 769550.0000
Python による結果
(6.2) 人員の配置
問題
アーベル、ベーカ、チャーリという3人の候補者を、無線士、プログラマ、事務職員という
3つの職種の養成所に配置する問題を考える。
彼らは、3つの職種に対する適性検査を受けたが、その成績は表のとおりである。
3つの職種に対する適性検査成績表
候補者/職種無線士プログラマ事務職員
アーベル547
ベーカ673
チャーリ8112
点数が高ければ高いほど、対応する職種に対する適性が高いものとする。
アーベルは、プログラマには向かないが、事務職員か無線士ならまあまあである。
ベーカは、事務が苦手でプログラマか無線士のほうが向いている。
チャーリは、プログラマとしては抜群で、無線士としても適性があるが、事務は全く駄目である。
このような3人のうち1人を無線士養成所に、1人をプログラマ養成所に、1人を事務職員養成所に配置しなければならない。
もしアーベルを無線士に、ベーカをプログラマに、チャーリを事務職員に配置したとすれば、
適性検査の点数の合計、すなわち、総点数は
である。 各人を各職種に配置した場合の点数の合計が大きいほど良い配置であるとする。
候補者が職種の養成所に配置されるかされないかを変数 Xk で表すことにする。
例えば、変数 X1 は、アーベルが無線士に配置されるかされないかを表し、配置される場合は 1、配置されない場合は 0 となる。
このようにすると候補者が3人で、職種が3つだから、変数は全部で X1,X2,X3,X4,X5,X6,X7,X8,X9 の9個となる。
9個の変数の番号 k が、どの候補者とどの職種に対応した配置であるかは下の表のとおりである。
決定変数
候補者/職種無線士プログラマ事務職員
アーベルX1X2X3
ベーカX4X5X6
チャーリX7X8X9
アーベルの無線士に対する変数は X1、プログラマに対する変数は X2、事務職員に対する変数は X3 である。
アーベルの各職種に対する合計は X1+X2+X3 となる。
ところで、アーベルがどれか一つの職種に配置されると、その職種に対する変数は 1 となり、
その他の職種に対する変数は 0 となる。
したがって X1 と X2,X3 のうちどれか1つだけ1となるから次の等式が成立する。
X1+X2+X3=1
ベーカもチャーリも同様である。
次に、3種類の職種について考える。
無線士のアーベルに対する変数は X1、ベーカに対する変数は X4、チャーリに対する変数は X7 だから、無線士に対する3人の候補者の変数の合計は、 X1+X4+X7 となる。
無線士には1人しか配置されないので、候補者のうちの誰か1人が配置されると、その人に対する変数は 1 となり、他の人に対する変数はすべて 0 とならなければならない。次の等式が成り立つ。
X1+X4+X7=1
制約条件式
X1+X2+X3=1
X4+X5+X6=1
X7+X8+X9=1
X1+X4+X7=1
X2+X5+X8=1
X3+X6+X9=1
X1, X2, X3, X4, X5, X6, X7, X8, X9≧0
目的関数
Z=5X1+4X2+7X3+6X4+7X5+3X6+8X7+11X8+2X9
最適解
X1 = 0.0, X2 = 0.0, X3 = 1.0
X4 = 1.0, X5 = 0.0, X6 = 0.0
X7 = 0.0, X8 = 1.0, X9 = 0.0
Z = 24.0
Python による結果
(6.3) 切符の割当て
問題
4人の同窓生が10年ぶりに東京に集まって旧交を温めることにした。
その4人は博多、青森、新潟、金沢に住んでいる。東京に集まって会食したのち、
それぞれ自宅に帰る予定である。
博多、青森、金沢の東京往復運賃は、片道が600㎞を超えるので往復割引になっている。
それぞれの人が東京までの往復切符を買うことにすると、全体では、
23720+17980+10720+16500=68920(円)
である。 もっと安くできないか考える。
発/着博多青森新潟金沢
博多23720184401555017510
X1X2X3X4
青森18440179801236014630
X5X6X7X8
新潟15550123601072011430
X9X10X11X12
金沢17510146301143016500
X13X14X15X16
それぞれが自分の駅からどこかの駅までの切符を東京経由で買い、東京で会食した折にお互いに切符を交換し合い、帰りは交換した切符を使って帰ることにする。
変数Xkは、特定の出発駅から東京経由で特定の帰着駅までの切符を買うか買わないかを表す。
制約条件式
目的関数
最適解
X1 = 0.0, X2 = 1.0, X3 = 0.0, X4 = 0.0
X5 = 1.0, X6 = 0.0, X7 = 0.0, X8 = 0.0
X9 = 0.0, X10= 0.0, X11= 0.0, X12= 1.0
X13= 0.0, X14= 0.0, X15= 1.0, X16= 0.0
Z = 59740.0
別解
X1 = 0.0, X2 = 0.0, X3 = 0.0, X4 = 1.0
X5 = 0.0, X6 = 0.0, X7 = 1.0, X8 = 0.0
X9 = 0.0, X10= 1.0, X11= 0.0, X12= 0.0
X13= 1.0, X14= 0.0, X15= 0.0, X16= 0.0
Z = 59740.0
Python による結果
(7.1) 海水浴とレストランでの食事
問題
1週間の夏休みが取れたので、その間に、海水浴に何回か行きたいし、また何回かレストランで食事もしたい。
さて、海水浴に何回行き、レストランで何回食事をとったらよいかを考える。
暇とお金がいくらでもあれば何も問題はないのだが、現実はそうはいかない。
そこで、「限られた日数と小遣いの範囲内で、2つの活動、
すなわち海水浴とレストランでの食事から得られる満足度の総和を最大にするためには、
海水浴に何回行き、レストランで何回食事をとったらよいか」が問題になる。
次のようなデータがある。
海水浴レストラン
での食事
使用頻度
X1X2
日数(日)217
小遣い(万円)125
満足度32
制約条件式
2X1+1X2≦7
1X1+2X2≦5
X1, X2≧0
目的関数
3X1+2X2=Z
最適解
X1 = 3.0, X2 = 1.0, Z = 11.0
Python による結果
分析
双対変数の値を見れば、夏休み一日は 1.3 で、小遣い一万円の値は 0.3 である。
夏休みが1日増えて8日間になれば満足度が 12.3 になる。
小遣いが増えて6万円になっても満足度は 11.3 にしかならない。
(7.2) 四半期単位の年間生産販売計画
これは、 森口繁一著「線形計画法入門」にある演習問題 (E 1) である。
問題
ある工場で造っている製品 X の四半期ごとの需要高が毎年表のように変動する。
この工場の正規の生産能力は各四半期とも 1000 トンまでである。
だから第3四半期と第4四半期の需要は残業生産によるか、
または前の期から倉庫に貯蔵して繰り越したものでまかなわなければならない。
残業生産の能力は各四半期とも 1000 トンまでである。
残業生産をすると、トン当たり 600 円だけ余計にコストがかかる。
また在庫繰越に要するコストは1期につきトン当たり 400 円である。
四半期需要高通常
生産力
残業
生産力
残業
コスト
在庫
コスト
繰越
第15001000 1000600 400
X1 X2 X3
第27001000 1000600 400
X4 X5 X6
第315001000 1000600 400
X7 X8 X9
第420001000 1000600 400
X10 X11 X12
制約条件式
X1 ≦ 1000, X2 ≦ 1000, X4 ≦ 1000, X5 ≦ 1000
X7 ≦ 1000, X8 ≦ 1000, X10 ≦ 1000, X11 ≦ 1000
X12+X1 +X2 -X3= 500
X3 +X4 +X5 -X6= 700
X6 +X7 +X8 -X9=1500
X9 +X10+X11-X12=2000
目的関数
600(X2+X5+X8+X11)+400(X3+X6+X9+X12)=z
最適解
四半期需要高 通常生産量残業生産量繰越在庫
第1500500 00
第27001000 0300
第315001000 2000
第420001000 10000
Z=840000
Python による結果
(7.3) 最短路問題
問題
A 町から B 町へ行くのにいくつかの経路がある。
道は図のようになっていて、A, C, D, B 各地点間の所要時間は分単位で分かっている。
AC = 20 分, AD = 35 分, DC = 10 分, CB = 40 分, DB =15 分である。
変数 Xk は経路の流量で 1 または 0 である。
この場合、 最も早く B 町へ行くためにはどのようなルートをとればよいか。
                      X6 →               ↗
                 D ―――――――――――――― B
                /\                        /
              /    \                    /
            /        \                /
      X2↑/        X3↑\ X4↓       / X5↑
        /                \        /
      /                    \    /
    /                        \/
→ A ―――――――――――――― C
            X1 →
制約条件式
X1+X2=1
X1-X3+X4-X5=0
X2+X3-X4-X6=0
X5+X6=1
X1, X2, X3, X4, X5, X6 ≧ 0
目的関数
20X1+35X2+10X3+10X4+40X5+15X6=1
最適解
X1 = 1.0, X2 = 0.0, X3 = 1.0, X4 = 0.0, X5 = 0.0, X6 = 1.0
Z = 45.0
Python による結果

ページ先頭