こんにちは、日本情報通信株式会社の渡邊です。
今回は「数理最適化」と「IBM ILOG CPLEX」の活用を、初心者向けにわかりやすく解説する全3回シリーズの後編をお届けします。
シリーズ構成は以下になります。
前編では『数理最適化とは何か』、中編では『CPLEXの概要』を解説しました。後編はいよいよ実践編です。
これまでは概念的なお話が中心でしたが、今回は「実際にはどうやって最適化が行われるのか」に焦点を当てます。
IBMの「 IBM ILOG CPLEX 」を使い、ビジネス課題が解決されるプロセスを実際に追いかけてみましょう。
1. 今回解く問題:限られた資源で最大の利益を出す「生産計画」
まずは、今回取り組むテーマを具体的に設定しましょう。
最適化が特に力を発揮するのは、「複雑な条件が絡み合い、人間が全ての組み合わせを検討しきれない」ような状況です。
今回は、工場の「生産計画」を例にとってみます。
あなたは工場長として、以下の2つの製品(AとB)を作り、利益を最大化したいと考えています。資源に限りがある中で、製品AとBをそれぞれ何個作成すればよいでしょうか?
【製品のスペック】
-
製造時間:1時間(早い!)
-
材料消費:2kg(沢山使う…)
-
製造時間:2時間(遅い…)
-
材料消費:1.5kg(エコ!)
【工場の限界(制約条件)】
-
機械が動かせる時間:月間 40時間 まで
-
使える材料の在庫:月間 50kg まで
【悩みどころ】
単純に利益が高い「製品B」を優先して作りたくなりますが、Bは作るのに時間がかかります。時間を使い切ってしまうと数は作れません。
逆に「製品A」なら短時間で作れますが、今度は材料を多く消費してしまいます。
「時間」と「材料」、2つの限界ギリギリまで使い切り、最も儲かる組み合わせ(AとBの個数)は何個ずつなのか?
これをパズル感覚で解こうとすると、考慮すべきパターンが多く、意外と骨が折れる作業になります。
またこれは工場に限った話ではありません。皆様の業務でも、似たようなジレンマに頭を悩ませた経験はないでしょうか?
人員配置: 「ベテラン社員に頼めば早くて確実だが、人件費が高い(あるいは忙しすぎて捕まらない)」「若手に任せればコストは抑えられるが、時間がかかる」
予算配分: 「Web広告は広く届くが、成約率は低い」「ダイレクトメールは成約率が高いが、1件あたりのコストがかかる」
このように、ビジネスの現場は「限られたリソース(人・モノ・金・時間)を、どう配分するのが最も効果的か?」という悩みに満ちています。 今回の工場の例も、まさにその縮図です。
2. 現実の問題を「数式」に翻訳する
CPLEXを使うためには、上記のビジネスルールをコンピュータが理解できる形、「数理モデル」として記述する必要があります。
数理モデルでは、以下の3要素を定義します。まずは日本語で整理してみます。
-
決定変数
-
目的関数
-
制約条件
上記を数理モデルとして記述すると以下のようになります。
※画面は「IBM ILOG CPLEX Optimization Studio」の開発画面(OPL)です。

記述されたコードを見ると、基本的には「日本語で整理したシナリオ」をもとに一つ一つ記述されていることがわかると思います。
本稿では数理モデルの詳細な解説は実施しませんが、このように数理モデルを構築する際には前提として「業務を最適化シナリオとして整理すること」が非常に重要です。
3. 実行:最適解の導出
それでは上記の数理モデルを実行する方法を実際の画面で説明していきます。
CPLEXのインストール方法は中編の3章を確認してみてください。
手順
-
CPLEXを起動し、ファイル>新規>OPLプロジェクトをクリックします。

-
プロジェクト名をProduct等に変更し、デフォルトの実行構成の追加とモデルの作成にチェックボックスを入れてから終了をクリックします。

-
画面左上にできたProductフォルダから実行構成>構成1を右クリックし、名前の変更をクリック。名前をrunに変更します。


-
Product.modをクリックし、下記コードを貼り付けの上、保存(Ctrl+S)します。

/*****************************************************************************
* モデル名:生産計画の最適化
*****************************************************************************/
// 1. 決定変数
// これから決めたい「製品を作る個数」です。
dvar int+ ProductA; // 製品Aの個数
dvar int+ ProductB; // 製品Bの個数
// 2. 目的関数
// 最大化したい目標(利益)を定義します。
maximize
// Aは3万円、Bは5万円の利益
30000 * ProductA + 50000 * ProductB;
// 3. 制約条件(Constraints)
// 守らなければならないルールを定義します。
subject to {
// (1) 時間の制約
// Aは1時間、Bは2時間かかる。合計で40時間以内。
ctTime:
1.0 * ProductA + 2.0 * ProductB <= 40;
// (2) 材料の制約
// Aは2kg、Bは1.5kg使う。合計で50kg以内。
ctMaterial:
2.0 * ProductA + 1.5 * ProductB <= 50;
}
-
画面左上のProduct>実行構成>runを右クリックし、これを実行をクリック

計算結果の確認
ここまで作業を進めると裏側では高度なアルゴリズムが走り、CPLEXが数ある組み合わせの中から「これ以上良い答えはない」という解(最適解)を探索します。
結果を見てみましょう。画面左下の問題ブラウザーに結果が表示されます。

【計算結果】
「Aを16個、Bを12個作るのがベスト」という答えが出ました。
試しに検算してみると、
-
時間:(1時間×16) + (2時間×12) = 40時間(制限ピッタリ!)
-
材料:(2kg×16) + (1.5kg×12) = 50kg(制限ピッタリ!)
-
利益の合計: (3万円 × 16個) + (5万円 × 12個) = 108万円
時間と材料、どちらも無駄なく限界まで使い切っています。 もしご自身で「Bをもっと増やそう」としてBを13個にすると、時間が足りなくなったり、あるいはAを減らすことになりトータルの利益(108万円)を下回ってしまったりします。 CPLEXは、この「ギリギリの正解」を一瞬で見つけ出してくれたのです。
4. CPLEX活用のメリット:トラブル発生!その時どうする?(What-if分析)
最適化の真価はここからです。 ビジネス環境は常に変化します。
さて、答えが出た後にトラブルが起きたとしましょう。
「機械の調子が悪く、今月は30時間しか動かせないことになった!」
手計算で計画を立てていた場合、また最初からやり直しです。
しかし、CPLEX上にモデルが構築できていれば、対応はシンプルです。制約条件の数値(40→30)を書き換えて、再実行するだけです。
※今回はプログラム上に直接値を入力していますが、実際の運用の際はExcel等を介して値を書き換えることが可能です。

もちろん、大規模な問題になれば計算に相応の時間がかかることもあります。
しかし、人間が「どうしよう」と悩み、計算ミスをするリスクと時間を考えれば、「条件を変えて何度でもシミュレーション(What-if分析)ができる」ことは、ビジネスにおける最適化の大きなメリットの1つです。
5. まとめ
今回の後編では、生産計画を題材に「最適化を実行するプロセス」を体験していただきました。 まずは、この本編で辿ったステップを整理します。
-
業務シナリオの整理:漠然とした課題を「決定変数・目的・制約」に言語化する 。
-
モデル化:CPLEXが理解できる数理モデルに落とし込む。
-
実行・活用:最適解を出し、条件変更(What-if)にも即応する 。
この一連の流れを通じて、最適化がどのように答えを出すのか、その「手触り」を掴んでいただけたかと思います。
しかし、これは数理最適化ができることの「ほんの一例」に過ぎません。
今回はわかりやすいように小規模な「生産計画」と「トラブル対応」を例にしましたが、前編でもお伝えした通り、最適化の本来のメリットはもっと広く、深い部分にあります。
-
意思決定の自動化・高速化 「トラブルが起きた時」だけでなく、日々の膨大な配送ルート決めやシフト作成を自動化し、人間が何十時間もかけていた苦労をゼロにします 。
-
業務の標準化(属人化の排除) 「ベテランの勘」に頼っていた計画業務を数式化することで、誰がやっても常に高品質な計画が作れるようになります 。
-
未知の「正解」の発見 人間には思いつかないような組み合わせ(新たな選択肢)を発見し、コスト削減や利益最大化の限界を突破します 。
そして、現実のビジネス課題は今回扱った例題よりもはるかに複雑で、規模も桁違いです。 だからこそ、中編でご紹介した IBM ILOG CPLEX のような強力なエンジンが必要になります 。 複雑な制約をすべて飲み込み、実用的なスピードで計算し続ける「パワー」があって初めて、上記のメリットを現場で享受できるのです。
もし本稿を読んで最適化に興味をお持ちになった方がいらっしゃればまずは身近な業務を「これって最適化で解けるかな?」という視点で眺めてみてください。 「自社のこの課題に使えそうだ」「もっと詳しく知りたい」と思われましたら、ぜひCPLEXを利用した課題解決への一歩を踏み出してみてください。
最後までお読みいただき、ありがとうございました。