制約を増やす

第1章 No.2 / 第3の制約と複数交点

では、問題を 拡張 してもう一つ制約となる要素があるとしよう。

Problem

加藤家は、赤ワインを 1 樽作るために葡萄 9 トン1 人 必要で、税金として 7 千円 払わなければならない。佐藤家は白ワインを 1 樽作るために葡萄が 5 トン5 人 必要で、税金は 20 千円 である。制約は前問と同じように葡萄は 50 トン 以内、人手も 10 人 以内であるが、さらに税金も 50 千円 以内におさえたい。赤ワインは 1 樽 5 万円、白ワインは 1 樽 10 万円 で売れる。どのようにワインを生産すれば、全体として最大の利益をあげることができるか。

解答例

前問と同じように、生産する赤ワインを x 樽、白ワインを y 樽 とすると以下のような式ができる。

3つの制約条件のグラフ
3 本の制約直線で囲まれる許容領域
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。求めるのは各自の課題としよう。