クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

最適化の基礎

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

仮想マシンラボ読了目安 9分コマンド4個

探すのはソルバーに任せる

家具職人は机と椅子を作れますが、木材も時間も限りがあります。どの組み合わせがいちばん儲かるでしょうか。午後いっぱいかけて計画を試すこともできます。それとも、制限を書き出して、ソルバーに最善の計画を見つけさせる、あるいは計画がないことを証明させることもできます。

このレッスンが終わると

メモ

最適化モデルを動かして、そのステータス、計画、影の価格を読めます。

キーワード

  • モデル:目的と制限を書き出したもの。
  • ソルバー:モデルの最善の答えを見つけるプログラム。
  • 余裕:制限の残り。
  • 影の価格:制限があと 1 単位増えたときの価値。
  • 整数:小数のない数。

ウォームアップ:すでに知っていること

メモ

頭の中で答えてください。1. 変数とは何ですか。2. 何かを最大にするとはどういう意味ですか。3. 椅子を 2.5 脚作れますか。3 つ目の答えは、すぐあとで使います。

始める前に

メモ

このレッスンの上のバーでラボを起動を押します。このラボは自分専用のUbuntu マシンまるごと 1 台なので、コンテナーより起動に少し時間がかかり、初回はソルバーも入れます。各実行ボタンは、コマンドをマシンのターミナルに順番に、同じセッションの中で入力します。マシンがまだ起動中と出たら、数秒待ってからもう一度押してください。動きを見たり、自分で入力したりしたいときは、バーのターミナルを開くを押します。

モデルは目的と制限である

ファイルはフォルダー optimisation にあります。最初のコマンドでそこに移ります。lp.py は PuLP で書いたモデルで、机と椅子、最大にしたい利益、木材と時間と保管場所の制限があります。opt は、ソルバーが使える状態で Python のファイルを動かします。最初の行にOptimalと出ます。ソルバーが最後まで終わり、答えが信頼できるという意味です。計画は机 20 台と椅子 60 脚で、利益は 2800 です。

コマンド
cd optimisation

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
opt lp.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

余裕がある制限はどれで、その影の価格はいくつですか。答え:保管場所は 60 余っているので、あと 1 単位増えても価値はありません。木材と時間は使い切られていて、影の価格は 20 と 10 です。木材があと 1 単位あれば、利益が 20 増えます。

よくある間違い

注意

使い切った制限が、利益が低い原因だといつでも思い込む人が多くいます。そうとは限りません。影の価格を読んでください。使い切っていて価格が 20 の制限は増やす価値があり、余裕のある制限は、大きくてもそれ以上の価値はありません。

整数には別のソルバーがいる

integer.py はプロジェクトを選びます。プロジェクトは丸ごとやるか、やらないかです。モデルを 2 回解きます。小数を許すと値は 45.17 で、計画はプロジェクトを 0.67 だけやります。この計画を丸ごとのプロジェクトに丸めると、予算 19 に対して費用が 22 になり、計画になりません。丸ごとのプロジェクトだけを求めると、値は 42 で、プロジェクトは bridge、garden、theatre の 3 つです。

コマンド
opt integer.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

チェック

ヒント

小数を許した答えのほうが、整数の答えより価値が大きいのはなぜですか。答え:規則が少ないからです。プロジェクトの一部を許すことは助けにしかならないので、整数の答えの上限になります。

制約ソルバーがシフト表を作る

shifts.py は OR-Tools CP-SAT を使います。看護師 3 人が 1 日 3 つの勤務を 4 日間分け合い、それぞれに入りたくない勤務の希望があります。夜勤の次の日の朝勤には誰も入りません。ソルバーはOPTIMALと答え、希望を 1 つ破る必要があると伝えます。初日に、2 人が同じ勤務を避けることはできないからです。各日のシフト表が表示されます。

コマンド
opt shifts.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最後のチェック

ヒント

見返さずに答えてください。1. ソルバーは何をしますか。2. ステータスが Optimal だと何が分かりますか。3. 影の価格とは何ですか。4. 小数を含む計画を丸められないのはなぜですか。答え:モデルの最善の答えを見つける、ソルバーが終わり答えが最善だと分かる、制限があと 1 単位増えたときの価値、丸めた計画が制限を破ることがあるから。では、ホームフォルダーのREADME.mdを cat ~/README.md で開いてください。2 つのモデルを書きます。

先生へ

ヒント

手順と実行ボタンがレッスンで、ラボは生徒一人ひとりの専用コピーです。これは VM ラボで行います。生徒はそれぞれ、PuLP、CBC、OR-Tools が入った自分専用の Ubuntu マシンを持ち、実行ボタンはそのターミナルに入力して、表示された内容を見せます。要点:1. モデルは目的と制限で、ソルバーが最善の答えを見つける。2. 数字より先にステータスを読む。3. 余裕と影の価格が、どの制限が大事かを教える。4. 整数には整数用のソルバーが必要で、丸めると制限を破ることがある。よくある間違い:価格を読まずに、使い切った制限のせいにすること。準備:ラボとブラウザー。ヒント:2 つ目の実行の前に、プロジェクトの 0.67 を自分で丸めてみるようクラスに言ってください。ラボ自体には、見えないインスタンスで 2 つのモデルを採点するチェックがあります。オペレーションズ・リサーチのモジュールは SciPy で問題を解きますが、このラボは、クラスが PuLP と OR-Tools に出会う場所です。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: 最適化のラボ:PuLP と OR-Tools で線形・整数・制約のモデルを 1 台の専用 Ubuntu VM で

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。