制約を増やす
第1章 No.2 / 第3の制約と複数交点
では、問題を 拡張 してもう一つ制約となる要素があるとしよう。
加藤家は、赤ワインを 1 樽作るために葡萄 9 トン と 1 人 必要で、税金として 7 千円 払わなければならない。佐藤家は白ワインを 1 樽作るために葡萄が 5 トン と 5 人 必要で、税金は 20 千円 である。制約は前問と同じように葡萄は 50 トン 以内、人手も 10 人 以内であるが、さらに税金も 50 千円 以内におさえたい。赤ワインは 1 樽 5 万円、白ワインは 1 樽 10 万円 で売れる。どのようにワインを生産すれば、全体として最大の利益をあげることができるか。
解答例
前問と同じように、生産する赤ワインを x 樽、白ワインを y 樽 とすると以下のような式ができる。
- 9x + 5y ≦ 50
- x + 5y ≦ 10
- 7x + 20y ≦ 50
- x ≧ 0, y ≧ 0
- 5x + 10y → max
gnuplot> set arrow 1 from 4.2,3.5 to 3.33,1.33
gnuplot> set arrow 2 from 6,2 to 5,1
gnuplot> set arrow 3 from 7,1 to 5.17,0.689
gnuplot> set label 1 "(10/3,4/3)" at first 4.3,4
gnuplot> set label 2 "(5,1)" at first 6.2,2.2
gnuplot> set label 3 "(150/29,20/29)" at first 7.2,1.2
gnuplot> plot [0:10] [0:10] -0.2*x+2,-1.8*x+10,2.5-0.35*x
今度は交点が 2 つできていることがわかる。一つは (10/3, 4/3)、もう一つは (150/29, 20/29) である。
同様に 5x + 10y → max を変形した y = C/10 - (1/2)x をグラフで考えてみると、傾きが -0.5 の直線で、-0.35 < -0.5 < -1.8 であるため、交点 (150/29, 20/29) の場合が y 切片が最大となる解だとわかる。傾き -0.5 で (150/29, 20/29) を通る直線:
y - 20/29 = -0.5 · (x - 150/29)
y = -0.5 · x + 95/29
このときの利益の最大値は max = C = (95/29) × 10 = 950/29 ≒ 32.76 万円。結局、傾き -1.8 の 9x + 5y ≦ 50 と、傾き -0.35 の 7x + 20y ≦ 50 に制約されて最大値が決められたことがわかる。最大のときは赤ワイン 150/29 樽、白ワイン 20/29 樽 作ればよい。通常はこちらの個々の値 (x と y) が求めたい値である。
相場が変わったら?
では、次に相場が変わって、
3x + 10y → max
つまり赤ワインが 1 樽で 3 万円、白ワインは 1 樽で同じく 10 万円とする。赤ワインがさらに安くなった。
そうすると max を変数 D とおいた式は y = D/10 - (10/3)x となり、傾きが -0.3 だとわかる。
-0.25 < -0.3 < -0.35
であるので、この傾きで考えると y 切片が最大となるのは (10/3, 4/3) であることがわかる。
このように交点が複数ある場合は、目的関数の傾きにより最大値が異なる。一般に、目的関数の傾きによってどの交点が最大となるかが問題となる。
あるいは、交点のときに最大値にならない場合もある。傾きが -0.25 より小さい場合や -1.8 より大きい場合は、各々 (0, 2)、(50/9, 0) のとき最大となる。最大値はそれぞれ 20、1000/9。求めるのは各自の課題としよう。