2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CPLEX + Bob 輸送ルートの最適化

2
Last updated at Posted at 2026-07-13

皆さんこんにちは!この記事では、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. はじめに

はじめに当シナリオの説明をします。とある製造業の会社は3つの工場(川崎、熊谷、幕張)を持っており、製品を製造して供給することができます。この度5社の異なる顧客(A~E)から製品を納入して欲しいと依頼がありました。それぞれの顧客の需要量は以下になります。(CustomerRequiredQuantity.csv)

顧客の需要量

顧客 需要量(ユニット)
A 50
B 80
C 60
D 70
E 40

工場が供給できる量には限りがあり、以下になっています。(FactoryProductionAmount.csv)

工場が供給できる量

工場 供給量(ユニット)
川崎 120
熊谷 130
幕張 70

1ユニット当たりの輸送コスト(人件費、燃料費等を合計したユニット当たりのコスト)がわかっており、以下になっています。
(TransportationCosts.csv)

1ユニット当たりの輸送コスト

顧客 工場 1ユニット当たりの輸送コスト(円)
A 川崎 3000
A 熊谷 5000
A 幕張 7000
B 川崎 2000
B 熊谷 6000
B 幕張 3000
C 川崎 4000
C 熊谷 5000
C 幕張 1000
D 川崎 5000
D 熊谷 3000
D 幕張 2000
E 川崎 8000
E 熊谷 2000
E 幕張 3000

以下の制約条件があります。

制約①
道路状況などの影響で、ルート(工場から顧客への配送ルート)ごとに輸送個数の上限があり、以下になっています。(RouteCapacity.csv)

ルートごとの輸送ユニット数上限

工場 顧客 輸送ユニット数上限
川崎 A 60
熊谷 A 60
幕張 A 30
川崎 B 90
熊谷 B 50
幕張 B 60
川崎 C 40
熊谷 C 40
幕張 C 70
川崎 D 50
熊谷 D 80
幕張 D 60
川崎 E 50
熊谷 E 50
幕張 E 40

制約②
輸送費、人件費のコストを増加させないために、各顧客は需要量のユニット数すべてを1工場からのみ調達する。

制約③
リードタイムが納期を超えるルートは使用を禁止。(CustomerDeadline.csv, LeadTime.csv)

顧客別納期

顧客 納期(日)
A 2
B 2
C 2
D 3
E 4

リードタイム

工場 顧客 リードタイム(日)
川崎 A 1
熊谷 A 2
幕張 A 3
川崎 B 1
熊谷 B 3
幕張 B 2
川崎 C 2
熊谷 C 3
幕張 C 1
川崎 D 3
熊谷 D 2
幕張 D 1
川崎 E 4
熊谷 E 1
幕張 E 2

輸送コストが最も最小となる配送計画をCPLEXを使って立ててみましょう。

2. Bobと一緒に要件を整理しよう

2-1. 初めに、こちらのデータをダウンロードし、展開して、作業フォルダに配置します。

2-2. Bobにログイン後、左上のメニューから「ファイル」→「フォルダーをワークスペースに追加」をクリックします。
image.png

フォルダが追加されました。
image.png

2-3. PlanモードでBobと一緒に要件を整理します。
Planモードにして以下をプロンプトにペーストしてください。

とある製造業の会社は3つの工場(川崎、熊谷、幕張)を持っており、製品を製造して供給することができます。この度5社の異なる顧客(A~E)から製品を納入して欲しいと依頼がありました。それぞれの顧客の需要量は以下になります。(CustomerRequiredQuantity.csv)
工場が供給できる量には限りがあり、以下になっています。(FactoryProductionAmount.csv)
1ユニット当たりの輸送コスト(人件費、燃料費等を合計したユニット当たりのコスト)がわかっており、以下になっています。
(TransportationCosts.csv)


以下の制約条件があります。


制約①
道路状況などの影響で、ルート(工場から顧客への配送ルート)ごとに輸送個数の上限があり、以下になっています。(RouteCapacity.csv)
制約②
輸送費、人件費のコストを増加させないために、各顧客は需要量のユニット数すべてを1工場からのみ調達する。
制約③
リードタイムが納期を超えるルートは使用を禁止。(CustomerDeadline.csv, LeadTime.csv)

輸送コストが最も最小となる配送計画をCPLEX(docplex)を使って立ててください。
レポートをHTMLで出力してください。

image.png

承認待ちが表示されたら、内容を確認し、「一度だけ承認」をクリックします。
image.png

Bobにどこまで自動で実行させるか権限を与えるには、「権限」をクリックします。
スクリーンショット 2026-07-09 101149.png

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

フォローアップ質問がある場合は、回答して追加の要件を指定します。ここでは、「docplexがインストール済みで使用可能」 を選びます。
image.png

以下のような追加質問がある場合もあります。お好きなものを選んでください。
image.png

しばらくすると目的関数や制約の整理が始まります。
image.png

要件が確定すると実装を勧めていいか確認があります。
image.png

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

image.png

3. Agentモードでコーディングしよう

Planモードで要件が固まると、次にAgentモードでコーディングを始めます。
Bobが実装を開始するか聞いてきますので、応答して進めてください。

image.png

実装は、Todoで管理されます。

image.png

実装時に、docplexがインストールされていない場合は、pip install docplexが始まります。

実装が完了するとToDoリストを更新し、HTMLでレポートを出力します。
image.png

image.png

以下はBobのプロンプトに表示された結果サマリーです。
image.png
image.png

4. 結果を確認しよう

プロンプトに以下のようにHTMLレポートが表示されるので、「開く」をクリックして中身を確認します。
スクリーンショット 2026-07-09 172550.png

image.png

image.png

image.png
image.png

5. 追加のお願いをしてみよう

レポートの表示の変更や、要件の変更、追加など、Bobに追加のお願いをしてみましょう。
image.png

各工場と各顧客とをつなぐネットワーク図を追加してください。

画像が切れてしまった場合は、スクリーンショットを送ってBobに教えてあげてください。
image.png

image.png

その他、以下のような追加要件などお試しください。
image.png

コストが抑えられるか確認したいので、以下の制約条件を外して再計算してください。
制約②
輸送費、人件費のコストを増加させないために、各顧客は需要量のユニット数すべてを1工場からのみ調達する。

6. わからないことがあったら聞いてみよう

結果の解釈などでわからないことがあればBobを通じて聞いてみましょう。

image.png

川崎工場から顧客Aへ配送するルートはなぜ不採用ですか?

image.png

image.png

image.png

7. 新しいタスクを始めるには

これまでの問題と別の問題を解きたい場合は、「新しいタスク」をクリックして始めます。
image.png

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?