皆さんこんにちは!この記事では、IBM BobとCPLEXを使って数理最適化計算で解を求める方法をご紹介したいと思います。
IBM Bobとは
IBM Bob は、開発者のパートナーとして、単にコードを書くだけでなく、要件定義から実装、テスト、デプロイまで、ソフトウェア開発ライフサイクル全体を効率化し、最適化するように設計された、AIファーストで設計された統合開発環境です。
オープンソースのAIソフトウェア・エンジニア・エージェントと、VS Code(Visual Studio Code)を拡張して、COBOLやPRGなどの基幹システム向け言語に対応し、セキュリティー、コンプライアンス、高品質を実現することができます。
CPLEXとは
CPLEX(IBM ILOG CPLEX)は、数理最適化(Optimization)を実現するソフトウェアであり、業務上のさまざまな制約条件のもとで最適な意思決定を支援します。
線形計画法(LP)、混合整数計画法(MIP)、二次計画法(QP)、制約プログラミング(CP)などの高度な最適化問題を高速に解くことができ、製造計画、サプライチェーン最適化、人員配置、物流ルート最適化、スケジューリングなど、幅広い業務領域で活用されています。
1. はじめに
はじめに当シナリオの説明をします。とある化学薬品メーカーは顧客企業から化学薬品の製造を受注し、製造し、期限内に納品しています。
注文によって製造期間が異なります。薬品は反応槽 → 蒸留塔 → 遠心分離機を経て製造されます。注文によって必要な設備の数は異なります。また、設備の数に限りがあるので、同時に動かせる数が決まっています。(設備上限:反応槽 8台 / 蒸留塔 5台 / 遠心分離機 4台)
今回3つの注文を受注しました。
それぞれの注文は製造する薬品別にジョブで管理されています。処理週数、必要な設備の数の情報は以下です。
薬品の製造にかかる週数、先行ジョブ等
| 注文ID | ジョブID | 先行ジョブ | 処理週数 |
|---|---|---|---|
| AK14 | AK14-1 | なし | 4 |
| AK14 | AK14-2 | AK14-1 | 3 |
| AK14 | AK14-3 | なし | 3 |
| AK15 | AK15-1 | なし | 3 |
| AK15 | AK15-2 | なし | 2 |
| AK15 | AK15-3 | AK15-1 | 2 |
| AK16 | AK16-1 | なし | 5 |
| AK16 | AK16-2 | なし | 1 |
必要な設備の数
| 注文ID | ジョブID | 反応槽 | 蒸留塔 | 遠心分離機 |
|---|---|---|---|---|
| AK14 | AK14-1 | 5 | 3 | 2 |
| AK14 | AK14-2 | 0 | 1 | 1 |
| AK14 | AK14-3 | 2 | 0 | 2 |
| AK15 | AK15-1 | 1 | 1 | 1 |
| AK15 | AK15-2 | 2 | 0 | 0 |
| AK15 | AK15-3 | 2 | 2 | 0 |
| AK16 | AK16-1 | 2 | 1 | 1 |
| AK16 | AK16-2 | 1 | 3 | 0 |
(上記2つの情報を連結したデータがこちらです。)
このような制約がある中で、どのようにスケジュールを組めば、すべてのジョブを最も短期間で終了させることができるか解を求めましょう。
2. Bobと一緒に要件を整理しよう
2-1. 初めに、こちらのデータをダウンロードし、作業フォルダに配置します。
2-2. Bobにログイン後、左上のメニューから「ファイル」→「フォルダーをワークスペースに追加」をクリックします。

2-3. PlanモードでBobと一緒に要件を整理します。
Planモードにして以下をプロンプトにペーストしてください。
以下の製造スケジューリング問題をCPLEX(docplex)を使って解き、最適なスケジュールを提案してください。
【背景】
化学品受注製造メーカーが複数の顧客注文を処理します。
工場には反応槽・蒸留塔・遠心分離機という3種類の設備があり、
複数のジョブが同時に設備を使うことができますが、台数の上限があります。
スケジュールの開始は2026年の第31週(7月27日)としてください。
【設備上限】
・反応槽 :最大 8台
・蒸留塔 :最大 5台
・遠心分離機 :最大 4台
【その他制約条件】
・「先行ジョブあり」のジョブは、指定された先行ジョブが終わった後に開始すること
・ 任意の週において、稼働中の全ジョブが使う設備の合計台数が上限を超えてはならない
【ジョブデータ】
sched_production.csv
【最適化の目的】
全ジョブが完了する期間を最小化してください。
【出力形式】
・各ジョブの開始週・終了週を表形式とガントチャートをHTMLレポートで示してください
・週ごとの設備使用量の確認表も添えてください
承認待ちが表示されたら、内容を確認し、「一度だけ承認」をクリックします。

Bobにどこまで自動で実行させるか権限を与えるには、「権限」をクリックします。

Bobが問題の整理を始めます。以降は、表現やアプローチはその時々で変わります。以下を参考にBobとやり取りを進めてください。

フォローアップ質問がある場合は、回答して追加の要件を指定します。ここでは、「Python+docplexがインストール済み」 を選びます。
以下のような追加質問がある場合もあります。お好きなものを選んでください。

要件が確定するとAgentモードに切り替えていいか確認があります。

実装前にmdファイルに記載されている要件をプレビューして確認しましょう。

3. Agentモードでコーディングしよう
Planモードで要件が固まると、次にAgentモードでコーディングを始めます。
Bobが実装を開始するか聞いてきますので、応答して進めてください。
実装時に、docplexがインストールされていない場合は、pip install docplexが始まります。
実装が完了するとToDoリストを更新し、HTMLでレポートを出力します。


4. 結果を確認しよう
プロンプトに以下のようにHTMLレポートが表示されるので、「開く」をクリックして中身を確認します。
5. 追加のお願いをしてみよう
レポートの表示の変更や、要件の変更、追加など、Bobに追加のお願いをしてみましょう。

受注ID「AK16」は早めに納品したい。再度スケジュールを計算してください。
同じ注文IDのジョブは間をあけず、続けて製造するようにスケジュールを見直しできますか?
6. わからないことがあったら聞いてみよう
結果の解釈などでわからないことがあればBobを通じて聞いてみましょう。
7. 新しいタスクを始めるには
これまでの問題と別の問題を解きたい場合は、「新しいタスク」をクリックして始めます。

本記事は以上になります。

















