本気で学ぶ 数理最適化
高校数学から、現実の「決める」まで。全30講
「明日は忙しそうだ」と分かっても、生産数は決まりません。未来を当てるのが予測、限られた資源のなかで何をどれだけやるか選ぶのが数理最適化です。この講座は、式・不等式・Σ・微分の学び直しからはじめて、線形計画、整数計画、輸送と経路、工程の順番、凸最適化、そしてPythonでの実装と検証までを30講で扱います。
全30講1講 約25分実験室 5つ
卒業制作 3つ第1〜3講は無料
講座を開く
全30講の本文・演習・実験室・卒業制作・学習記録は、プレミアム会員(月額500円)の中でご利用いただけます。追加料金はありません。解約はいつでも会員ページからできます。
この講座が向いている方
- 生産計画・配送・シフト・在庫など、限られた資源の配分を決める仕事をしている方
- 機械学習は少し触ったが、「予測のあと、どう決めるか」で止まっている方
- 数式が並ぶ教科書で挫折した経験があり、言葉と数値例から入りたい方
- ソルバーの出力を、自分の言葉で説明できるようになりたい方
前提知識は高校数学までです。プログラミングは第26講から扱いますが、変数・繰り返し・条件分岐の説明から始めます。
6つのステップで、実践へ
STEP 1/01–05現実を数式にする
高校数学をつなぎ直し、最初の生産モデルを完成させる。
- 01最適化は「決める」ための数学予測と意思決定を分ける現実の相談を、決めること・良さ・守る条件に分けられる。
- 02式・不等式・単位を整える高校数学からの準備①文章から不等式を作り、単位と不等号の向きを説明できる。
- 03Σ・添字・ベクトルを読む高校数学からの準備②製品が増えても、同じ意味をΣと添字で書ける。
- 04関数と微分を「変化」で理解する高校数学からの準備③目的関数の傾きと、制約付きの最小値を区別できる。
- 05最初の生産計画をモデルにする文章 → 変数 → 目的 → 制約生産計画を、単位・仮定を含む一つの数理モデルにまとめられる。
STEP 2/06–10線形計画を理解する
図・単体法・双対・感度分析から、最適の理由を説明する。
- 06実行可能領域を目で見るLP:線形計画法の入口不等式の重なりとして実行可能領域を描ける。
- 07頂点から最適解を見つける実行可能・実行不能・非有界図で最適性を説明し、解がない場合の理由を区別できる。
- 08単体法を、二回の移動で理解するスラック・入る変数・出る変数単体法の改善と、これ以上改善できない証拠を説明できる。
- 09双対:資源の値段で最適性を証明する影の価格と弱双対性生産量側の解と資源価格側の解で、最適値を挟める。
- 10感度分析:能力を増やす価値は?条件を変えたら、解も確かめ直す影の価格の有効範囲を意識して、変更の影響を見積もれる。
STEP 3/11–15整数で組み合わせを選ぶ
0/1、論理、動的計画法、分枝限定法、担当割当を学ぶ。
- 11整数と0/1で「選ぶ」を表す連続量と離散的な判断分割できない数量と、採用するかどうかを正しくモデル化できる。
- 12論理条件とBig-Mを安全に書く「ならば」を式にする排他・依存・稼働条件を、必要十分な大きさの係数で表せる。
- 13ナップサック:選び方を組み合わせる貪欲法と動的計画法一つずつの効率では決まらない理由と、部分問題の再利用を理解できる。
- 14分枝限定法とギャップを読む最良の候補と、まだ届くかもしれない上限緩和・分枝・枝刈りを追い、最適性未証明の解を説明できる。
- 15割当:得意な人へ任せるだけでは足りない人・機械・AGVと作業を結ぶ一対一の割当を0/1変数で書き、全体の費用を比較できる。
STEP 4/16–20物流と工程を計画する
輸送・経路・巡回・スケジュール・在庫へ応用する。
- 16輸送とフロー:出入りの数を合わせる保存則がモデルを作る供給・需要・流量保存を使って輸送計画を立てられる。
- 17最短路:一つ先ではなく、その先まで見る経路探索とネットワーク経路の総費用を比較し、最短路の更新の意味を理解できる。
- 18巡回と配送:小さな輪を見逃さないTSP・部分巡回・車両容量訪問回数だけでは不十分な理由と、配送条件の足し方を理解できる。
- 19スケジューリング:同じ機械は同時に使えない時間・先行関係・区間ガント図と数式で、実行できる工程順を作れる。
- 20在庫と複数日:今日の判断が明日につながる生産・保管・需要のバランス在庫の保存式で期間をつなぎ、前倒し生産の価値を比較できる。
STEP 5/21–25非線形と不確実さを扱う
凸性・勾配・KKT・多目的・シナリオへ視野を広げる。
- 21凸最適化:谷が一つの世界局所最適と大域最適「近くでは良い」と「全体で最良」を分け、凸問題の意味を説明できる。
- 22勾配降下法を自分で動かす一歩の大きさが成否を分ける勾配方向とステップ幅で更新し、収束・振動・発散を見分けられる。
- 23ラグランジュとKKTの入口制約がある谷底の条件制約が効いている場合の傾きと、KKTの4条件を小さな例で確認できる。
- 24複数の目的と、守るべき条件安さ・速さ・公平さを分ける目的の重みと、絶対条件を区別してモデル化できる。
- 25不確実さを含めて決める平均だけでなく、困る場面も見る期待値と最悪時の基準を比較し、モデルの保証範囲を説明できる。
STEP 6/26–30実装し、検証し、伝える
Python、ソルバー、運用検証を学び、3つの卒業課題へ。
- 26Python:まず全列挙で正しさを確かめるコード未経験からの実装準備変数・繰り返し・条件分岐で、小さな整数モデルを自力で確認できる。
- 27SciPyでLPと整数計画を解く戻り値を読むところまでが実装目的の符号・行列・範囲・終了状態を対応させ、出力を検証できる。
- 28CP-SATで工程の順序を実装する区間変数と終了状態開始・終了・区間・非重複をコードへ対応させられる。
- 29現場へ渡す前の検証と運用設計モデルの外まで責任を持つデータ・結果・運用の三つを検証し、無理な案を自動実行しない設計ができる。
- 30卒業制作:相談から意思決定資料まで自分でモデルを書き、解き、説明するモデル化・計算・検証・改善提案を、一つの案件としてまとめられる。
ここから3講は、無料で読めます
実際の講義本文です。会員になると、この続き(第4講〜第30講)に加えて、各講の確認問題・段階ヒント・復習・実験室・卒業制作・学習記録がご利用いただけます。
第1講
最適化は「決める」ための数学
予測と意思決定を分ける
この講のゴール:現実の相談を、決めること・良さ・守る条件に分けられる。
まず、何を決めるのか
工場で「明日は忙しそう」と分かっても、生産数は決まりません。需要を見積もるのが予測、限られた設備で何をいくつ作るか選ぶのが最適化です。予測値は最適化への入力になることがありますが、最適化は必ずしも機械学習を必要としません。
三つの箱に分ける
決定変数は自分が選ぶ量。目的関数は案の良さを数値にする式。制約条件は守る約束です。条件を全部満たす案を実行可能解、その中で目的が最も良い案を最適解と呼びます。「良い案」と「最適だと確認された案」は別です。
最適とは、モデルの中での最適
利益だけを目的にすれば、安全や働きやすさが自動的に守られるわけではありません。書かなかった条件は、通常ソルバーには伝わりません。計算より前に現場の人と条件を確認し、計算の後にも実行できるか確かめます。
この講座で毎回使う順序
相談を読む → 決める量と単位を書く → 評価式を書く → 条件を書く → 小さく手計算する → 計算で探す → 元の条件に代入して確かめる。この順序を繰り返します。難しい式を先に覚える必要はありません。
一緒に解いてみましょう
配送案Aは費用100、所要5時間。Bは費用90、所要7時間。締切は6時間。費用を最小にしたい。
- 先に締切を確認する。Aは5 ≤ 6で実行可能、Bは7 > 6で実行不可。
- 実行可能な案だけで費用を比較する。この2案ではAを選ぶ。
- 締切を無視してBを選ぶのは、違う問題を解いていることになる。
つまずきやすいところ 「一番安い」だけで選ばない。比較対象は制約を満たす案です。
この講には理解を確かめる問題が4問あります(会員限定)。目安 25分。
第2講
式・不等式・単位を整える
高校数学からの準備①
この講のゴール:文章から不等式を作り、単位と不等号の向きを説明できる。
単位は式の設計図
製品Aを1個作るのに2分、Bに3分かかり、合計60分使えます。x,yを個数にすると、2x + 3yは分です。左辺が使用量、右辺が使える量なので 2x + 3y ≤ 60 です。時間と個数をそのまま足すことはできません。
「以下」「以上」「ちょうど」を使い分ける
設備は60分までなら「≤」。需要を少なくとも20個満たすなら「≥」。全員をちょうど1回担当にするなら「=」。需要が20個と書かれているだけでは、過剰生産が許されるか決まりません。文脈を確認します。
負の数を掛けると向きが変わる
x ≥ 3を「≤」の形に直すなら −x ≤ −3です。両辺に−1を掛けると数直線の大小が逆になります。ソフトウェアの入力形式に合わせる際によく使います。
変数の範囲も条件
生産量ならx ≥ 0。台数なら0以上の整数。配合比なら0から1までの実数、選ぶかどうかなら0か1です。非負条件や整数条件を書き忘れると、現実には使えない解が出ることがあります。
一緒に解いてみましょう
Aを10個、Bを8個作る。Aは2分/個、Bは3分/個、能力60分。何分余るか。
- 使用時間を2 × 10 + 3 × 8 = 44分と計算する。
- 余りは60 − 44 = 16分。44 ≤ 60なので時間制約を満たす。
- 生産量が整数か、需要や材料など他の条件も満たすかは別に確認する。
つまずきやすいところ 60分を1時間に変えるなら、左辺の係数も2/60、3/60時間にそろえます。
この講には理解を確かめる問題が4問あります(会員限定)。目安 25分。
第3講
Σ・添字・ベクトルを読む
高校数学からの準備②
この講のゴール:製品が増えても、同じ意味をΣと添字で書ける。
添字は住所
x₁,x₂,x₃は3製品の生産量です。xᵢは「i番の製品の量」を表します。xᵢⱼなら「i工場からj顧客へ運ぶ量」のように二つの番号を使います。xᵢⱼはx×i×jではありません。
Σは、同じ形の足し算をまとめる記号
利益係数をc₁,c₂,c₃とすると、利益はc₁x₁ + c₂x₂ + c₃x₃。これを Σᵢ cᵢxᵢ と書きます。iがどの集合を動くかを最初に決めます。Σの外に残る添字があれば、その添字ごとに別の式です。
ベクトルと行列は整理箱
x = (x₁,x₂,x₃)、c = (c₁,c₂,c₃)とまとめると、利益はcᵀxと書けます。cᵀxは対応する成分を掛けて足す「内積」。A x ≤ bは、設備ごとの使用量を行に並べた不等式の束です。行列の掛け算は各行との内積です。
実務の表から式へ
行を設備、列を製品にした表を用意します。aᵣᵢは設備rが製品iに使う時間。設備rの制約はΣᵢ aᵣᵢxᵢ ≤ bᵣ。式を一つ書けたら、設備の行数だけ繰り返します。
一緒に解いてみましょう
利益係数c=(3,2,4)、生産量x=(2,5,1)。設備使用係数の1行が(2,1,3)なら?
- 利益cᵀx = 3×2 + 2×5 + 4×1 = 20。
- 設備使用量 = 2×2 + 1×5 + 3×1 = 12。
- 設備能力が11なら、この生産案は利益に関係なく実行不可。
つまずきやすいところ 同じ文字iを製品と設備の両方に使わない。集合と単位を先に定義します。
この講には理解を確かめる問題が4問あります(会員限定)。目安 25分。
第4講から先へ
ここから先は、線形計画の図解と単体法、双対と影の価格、整数計画と分枝限定法、輸送・最短路・巡回、スケジューリングと在庫、凸最適化とKKT、多目的と不確実さ、そしてPython実装と運用検証まで続きます。
会員になると、できること
① 全30講の本文と確認問題
各講に4問前後の確認問題(選択・数値・並べ替え)があり、まちがえた理由と段階ヒントが出ます。
② 5つの実験室
手を動かして確かめる仕組みです。荷物の選び方を比べる、モデルを書いて数値で検証する、といった操作ができます。
③ 卒業制作(3課題)
- 01|整数の生産計画
利益を増やしたい工場から相談を受けました。AとBを何ロットずつ生産するか決め、設備を1時間追加する価値も報告してください。 - 02|資格を守る担当割当
3人に3作業を一つずつ担当してもらいます。安さだけでなく、資格で禁止されている組合せを確実に避けてください。 - 03|2日間の生産と在庫
需要を切らさず、先に作る費用と在庫費を含めて2日間の生産を決めてください。
④ 実行できるPythonコード
- 全列挙で整数計画を解く(01_enumeration.py)
- SciPyでLPとMILPを解く(02_scipy_models.py)
- CP-SATで工程を並べる(03_cpsat_schedule.py)
- 卒業課題の独立検証(04_capstone_checks.py)
⑤ 復習と学習記録
まちがえた問題が復習に貯まります。記録の保存・復元・ノートのまとめ出力もできます。
この講座で覚える用語(抜粋)
- 決定変数
- これから決める数量や選択。単位と許される範囲を定義する。
- パラメータ
- 需要・能力・単価など、モデルへ入力する既知の値。
- 目的関数
- 案の良さを数値で比較する式。最大化か最小化かを指定する。
- 制約条件
- 実行できる案が守らなければならない条件。
- 実行可能解
- 全ての制約を満たす案。最適とは限らない。
- 最適解
- 実行可能な案の中で目的関数が最良になる案。複数あることもある。
- LP/線形計画
- 連続変数と線形の目的・制約を持つ最適化。
- MILP/混合整数線形計画
- 変数の一部または全部が整数で、目的・制約が線形の最適化。
- スラック
- 上限型制約における、能力から使用量を引いた余り。
- 双対問題
- 元の問題の目的値を反対側から評価する、対応する最適化問題。
- 影の価格
- 適用できる範囲で資源量を少し変えたときの最適値の変化率。
- 緩和
- 一部の条件を外して候補集合を広げること。
- 暫定解
- 探索途中までに見つかった最良の実行可能解。
- 上界・下界
- 真の最適値を上または下から押さえる値。最大化と最小化で役割が変わる。
- ギャップ
- 暫定値と限界値の間の差。絶対差と相対差がある。
- Big-M
- 条件の有効/無効を切り替える定式化の係数。根拠のある有限の値を使う。
- 動的計画法
- 部分問題の解を保存して組み合わせ、同じ計算を再利用する方法。
- 貪欲法
- その時点で最も良さそうな選択を順番に行う方法。最適性は問題に依存する。
- 流量保存
- 供給や需要のない点では流入量と流出量が同じになる条件。
- TSP/巡回セールスパーソン問題
- 全地点を訪れて出発点へ戻る巡回の費用を最小化する問題。
このほかにも用語を収録しています(会員限定の用語集)。
よくあるご質問
高校数学までしか勉強していませんが、ついていけますか?
第2〜4講で、式・不等式・単位、Σと添字、関数と微分を学び直してから本題に入ります。数式は毎回、言葉と数値例をならべて説明します。
プログラミングは必要ですか?
第25講までは紙と電卓で進められます。第26講からPythonを扱いますが、変数・繰り返し・条件分岐から始め、まず全列挙で答えを確かめる方法を学びます。
どんな場面で使える知識ですか?
生産計画、担当の割当、配送ルート、工程の順番、在庫の持ち方など「限られた資源のなかで、何をどれだけやるか決める」場面です。予測(機械学習)とは役割が違います。
料金はいくらですか?
プレミアム会員(月額500円)の中でご利用いただけます。この講座のための追加料金はありません。解約はいつでも会員ページからできます。
どのくらいの時間がかかりますか?
1講あたり25分前後が目安です。全30講に加えて、5つの実験室と3つの卒業制作があります。
スマートフォンでも学べますか?
はい。パソコン・タブレット・スマートフォンのブラウザでご利用いただけます。学習記録はお使いの端末に保存されます。
参考にした資料
本講座はまなびのもりのオリジナル教材です。特定の試験の公式教材ではありません。