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

無料レッスン

数理モデルの作り方

このレッスンのあとで: 決めたいことを、変数、目的関数、制約条件として書くことができる。

60分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

決め方を数と式で書く

数理モデルとは、決めたいことを、変数、目的関数、制約条件の3つで書き表したものです。このモデルがあれば、パン屋の「何をいくつ焼けばいちばん儲かるか」を、勘ではなく計算で探せます。

この学問は、オペレーションズ・リサーチ(OR)と呼ばれます。限られた材料や時間の中で、よい決め方を数で探します。

このレッスンのゴール

メモ

決めたいことを、変数、目的関数、制約条件として書くことができる。

キーワード

ことばいみれい
変数自分で決めたい数焼く食パンの本数 x
目的関数いちばんよくしたい値を表す式利益 = 200x + 300y
制約条件守らなければならない限り小麦粉は8kgまで
実行可能制約条件をすべて守っていること
最適解実行可能な決め方のうち、目的がいちばんよいもの

学生が入力するセルは、このプレビューでは空白です。

決めたい数が変数になる

パン屋は、1日に食パンを x 本、ロールパンを y 袋焼きます。この x と y が変数です。

x と y を決めると、その日の作り方が1つ決まります。これを計画と呼びます。たとえば、食パン4本とロールパン2袋が1つの計画です。

パン屋の条件を表にする

項目食パン1本ロールパン1袋1日の上限
利益200円300円なし
小麦粉1kg2kg8kg
オーブン30分20分180分

学生が入力するセルは、このプレビューでは空白です。

目的関数は、よくしたい値の式

パン屋がよくしたいのは利益です。利益は、食パンの本数に200をかけ、ロールパンの袋数に300をかけて足した値です。

これを「200x + 300y」と書き、目的関数と呼びます。利益なら大きく、費用なら小さくしたいので、目的は最大化か最小化のどちらかです。

制約条件は、守る限りの式

小麦粉は8kgまでなので、「x + 2y ≤ 8」と書けます。オーブンは180分までなので、「30x + 20y ≤ 180」です。

パンの数がマイナスになることはないので、「x ≥ 0」と「y ≥ 0」も制約条件です。これらを全部守る計画が実行可能です。

パン屋のモデル全体

部品式意味
変数x と y食パンの本数と、ロールパンの袋数
目的関数200x + 300y を最大にする利益をいちばん大きくする
制約条件x + 2y ≤ 8小麦粉は8kgまで
制約条件30x + 20y ≤ 180オーブンは180分まで
制約条件x ≥ 0、y ≥ 0作る数はマイナスにならない

学生が入力するセルは、このプレビューでは空白です。

計画4と2を確かめる

コマンド
docker exec jupyter python3 -c "x = 4; y = 2; print(x + 2 * y <= 8, 30 * x + 20 * y <= 180, 200 * x + 300 * y)"

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

計画5と2を確かめる

コマンド
docker exec jupyter python3 -c "x = 5; y = 2; print(x + 2 * y <= 8, 30 * x + 20 * y <= 180, 200 * x + 300 * y)"

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

よくある間違い

注意

多くの人は、利益がいちばん大きい計画を最適解だと考えます。しかし、制約条件を1つでも破る計画は、実行可能ではありません。まず実行可能かどうかを調べ、そのうえで利益を比べます。

計画を変えて確かめる

コード: python
# 計画を変えて、実行可能か、利益はいくらかを確かめます。
x = 4
y = 2
flour = x + 2 * y
oven = 30 * x + 20 * y
print("小麦粉:", flour, "kg、オーブン:", oven, "分")
print("実行可能:", flour <= 8 and oven <= 180)
print("利益:", 200 * x + 300 * y, "円")
# x を 5、y を 2 に変えて、もう一度実行してください。

ほかの決定も3つの部品で書ける

決めたいこと変数目的関数制約条件
1日の献立各食品を食べる量食費を小さくする栄養の量の下限、食べられる量の上限
週の時間割各時間にどの授業を入れるか空き時間を小さくする先生は同時に2か所にいられない
配達の担当誰がどの地区を回るか合計の時間を小さくする1人1地区、1地区1人

学生が入力するセルは、このプレビューでは空白です。

さらに挑戦: 自分の決定を書く

ノートか JupyterLab のノートブックに、自分の決定を1つ選んで書いてください。部活の練習メニューでも、アルバイトの予定でも構いません。

変数、目的関数、制約条件を1行ずつ書きます。数字は仮のもので構いません。次のレッスンで、変数が2つのモデルを図で解きます。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。