5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Bob + CPLEX で タオル製造の最適化-予算内で収益率を最大化しつつ廃棄を最小化-

5
Last updated at Posted at 2026-03-13

皆さんこんにちは!この記事では、IBM BobとCPLEXを使って材料の廃棄を最も少なくし、収益率を最大化した場合に、予算内でタオルが何枚作れるか解を求めていきたいと思います。

image.png

既知の情報、決定変数、制約事項、目的関数の整理

8種類タオル製作最適化モデル(4柄バイアステープ・段階的送料・予算制約付き)
image.png

Bobへの指示

製造するタオルについて:

  • タオルを作りたい (タオルA、タオルB、各4柄の計8種)
  • タオルAの一つあたりに使う材料は、綿生地が横55cm、縦35cmである
  • タオルAの一つあたりに使う材料は、バイアステープは192cmである
  • タオルBの一つあたりに使う材料は、綿生地が横35cm、縦35cmである
  • タオルBの一つあたりに使う材料は、バイアステープは152cmである
  • バイアステープは花、鳥、草、猫柄の4種類がある
  • つまり、タオルA(花)、タオルA(鳥)、タオルA(草)、タオルA(猫)、タオルB(花)、タオルB(鳥)、タオルB(草)、タオルB(猫)の8種類を作成する
  • タオルAは1400円で販売、タオルBは1200円で販売する

材料と送料について:

  • カット前の綿生地は横幅110㎝、長さ100㎝で1200円である
  • 綿生地は100cm単位での購入ができる
  • バイアステープは300cmで330円である
  • バイアステープ300cm単位での購入ができる
  • 綿生地は4000円以上で送料が無料。4000円未満は980円。
  • バイアステープは1個から10個までは送料が250円、11個から20個までは480円、21個以上は680円
  • 各柄のバイアステープは同じ単位数購入する必要があります
  • バイアステープの送料は4柄の合計単位数で計算します

制約条件について:

  • 予算は50000円
  • タオルA、タオルB少なくとも1枚のタオルを製造
  • タオルAは必ず行を満杯にする(水平廃棄ゼロ)
  • タオルBも必ず行を満杯にする(水平廃棄は構造的に5cm)
  • 縦方向の綿生地廃棄はタオルA・B両方が作れない量
  • 各柄のバイアステープ廃棄はタオルA・B両方が作れない量
  • タオルAとタオルBの枚数バランス制約(±10以内)
  • タオルA内の柄バランス制約(各柄±2以内)
  • タオルB内の柄バランス制約(各柄±2以内)

目的関数:
‐ 綿生地、各バイアステープの廃棄を最も少なくし、且つ、最も収益率を高める場合、綿生地を何cm、各バイアステープを何cm購入するのが良いか

  • またその場合タオルA、タオルBは何枚できるか
  • タオルAとタオルBそれぞれのコストを出してください

その他:

  • このフォルダで作業してください。C:\Users\AsukaSaito\Documents\202603タオル最適化2種類Qiita2
  • CPLEXのOPLでコードを書いてください。
  • タオルA,タオルBの配置をCPLEXのログで絵で出力してください

Bobとのやり取り

はじめにPlanモードでBobに指示をしてみました。
image.png

不明点がある場合、Bobから追加で質問があります。

image.png

追加で以下の情報をインプットします。

  • 綿生地の配置ルール:タオルAは2枚/行、タオルBは3枚/行で、縦方向に交互または別々に配置する
  • 目的関数の優先順位は重み付けで両立 
  • バイアステープの「各柄同じ単位数購入」は、4柄すべてが同じ単位数という意味
  • image.png

計画が固まるとCodeモードに切り替わり、実装が始まります。
image.png

状況に応じ追加要件を入力しました。

  • コマンドラインからCPLEXを実行したい
    (ローカル環境にCPLEX Optimization Studioがインストールされており、実行できるため)
    image.png

Bob自身がエラーを自分自身で解析し修正を繰り返していました。
image.png

最終的にBobのプロンプトで最適化の結果を得ることができました。
image.png

Bobの生成したファイルを確認

oplrun towel_optimization.mod towel_optimization.dat を実行したところ、ログが文字化けしていましたので、結果をファイルに出力し、日本語が表示できるようにBobに指示しました。
image.png

実行結果を外部ファイルにエクスポートするように指示しました。
image.png

実行結果

IBM ILOG CPLEX Optimization Studio Community Edition.  The CPLEX Optimizers will solve problems up to 1000 variables and 1000 constraints.
Problem size limit exceeded.
CP Optimizer Community Edition solves problems with search spaces up to 2^1000.
Unrestricted version options (including academia) at https://ibm.co/2s0wqSa


<<< setup


<<< generate

Version identifier: 22.1.1.0 | 2022-11-26 | 9160aff4d
Tried aggregator 1 time.
MIP Presolve eliminated 23 rows and 4 columns.
MIP Presolve modified 20 coefficients.
Reduced MIP has 41 rows, 13 columns, and 121 nonzeros.
Reduced MIP has 0 binaries, 13 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.00 sec. (0.09 ticks)
Tried aggregator 1 time.
Detecting symmetries...
Reduced MIP has 41 rows, 13 columns, and 121 nonzeros.
Reduced MIP has 0 binaries, 13 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.00 sec. (0.09 ticks)
MIP emphasis: balance optimality and feasibility.
MIP search method: dynamic search.
Parallel mode: deterministic, using up to 8 threads.
Root relaxation solution time = 0.00 sec. (0.10 ticks)

        Nodes                                         Cuts/
   Node  Left     Objective  IInf  Best Integer    Best Bound    ItCnt     Gap

      0     0   -56112.8299    13                 -56112.8299       13         
      0     0   -52558.1395    12                     Cuts: 5       16         
*     0+    0                       -17800.0000   -52558.1395           195.27%
      0     0   -52550.0000    11   -17800.0000      Fract: 1       17  195.22%
      0     2   -52550.0000    11   -17800.0000   -52550.0000       17  195.22%
Elapsed time = 0.03 sec. (1.32 ticks, tree = 0.02 MB, solutions = 1)

Gomory fractional cuts applied:  2

Root node processing (before b&c):
  Real time             =    0.02 sec. (1.30 ticks)
Parallel b&c, 8 threads:
  Real time             =    0.08 sec. (3.89 ticks)
  Sync time (average)   =    0.05 sec.
  Wait time (average)   =    0.00 sec.
                          ------------
Total (root+branch&cut) =    0.09 sec. (5.20 ticks)

<<< solve


OBJECTIVE: -17800
=== タオル製造最適化結果 ===

【購入材料】
綿生地A: 1200cm (12単位) - 14400円
綿生地B: 1500cm (15単位) - 18000円
バイアステープ: 3300cm (11単位×4柄) - 14520円
綿生地送料: 0円
バイアステープ送料: 480円
総コスト: 47400円

【製造枚数】
タオルA: 34枚 (花:9, 鳥:9, 草:7, 猫:9)
タオルB: 42枚 (花:10, 鳥:10, 草:12, 猫:10)
合計: 76枚

【収益】
タオルA売上: 47600円
タオルB売上: 50400円
総売上: 98000円
総利益: 50600円
収益率: 206.8%

【廃棄量】
綿生地A廃棄: 10cm
綿生地B廃棄: 30cm
バイアステープ(花)廃棄: 52cm
バイアステープ(鳥)廃棄: 52cm
バイアステープ(草)廃棄: 132cm
バイアステープ(猫)廃棄: 52cm
総廃棄量: 328cm

【タオルAのコスト】
綿生地コスト/枚: 423.53円
バイアステープコスト/枚: 211.2円
送料/枚: 6.32円
合計コスト/枚: 641.05円
利益/枚: 758.95円

【タオルBのコスト】
綿生地コスト/枚: 428.57円
バイアステープコスト/枚: 167.2円
送料/枚: 6.32円
合計コスト/枚: 602.09円
利益/枚: 597.91円

【タオルA配置図】
綿生地: 幅110cm × 長さ1200cm

タオルA配置 (2枚/行):
  行1: [花] [花] 
  行2: [花] [花] 
  行3: [花] [花] 
  行4: [花] [花] 
  行5: [花] [鳥] 
  行6: [鳥] [鳥] 
  行7: [鳥] [鳥] 
  行8: [鳥] [鳥] 
  行9: [鳥] [鳥] 
  行10: [草] [草] 
  行11: [草] [草] 
  行12: [草] [草] 
  行13: [草] [猫] 
  行14: [猫] [猫] 
  行15: [猫] [猫] 
  行16: [猫] [猫] 
  行17: [猫] [猫] 
  [廃棄: 10cm]

【タオルB配置図】
綿生地: 幅110cm × 長さ1500cm

タオルB配置 (3枚/行 + 横廃棄5cm):
  行1: [花] [花] [花]  [廃棄5cm]
  行2: [花] [花] [花]  [廃棄5cm]
  行3: [花] [花] [花]  [廃棄5cm]
  行4: [花] [鳥] [鳥]  [廃棄5cm]
  行5: [鳥] [鳥] [鳥]  [廃棄5cm]
  行6: [鳥] [鳥] [鳥]  [廃棄5cm]
  行7: [鳥] [鳥] [草]  [廃棄5cm]
  行8: [草] [草] [草]  [廃棄5cm]
  行9: [草] [草] [草]  [廃棄5cm]
  行10: [草] [草] [草]  [廃棄5cm]
  行11: [草] [草] [猫]  [廃棄5cm]
  行12: [猫] [猫] [猫]  [廃棄5cm]
  行13: [猫] [猫] [猫]  [廃棄5cm]
  行14: [猫] [猫] [猫]  [廃棄5cm]
  [縦廃棄: 30cm]

注: タオルBの右側5cmは横方向の構造的廃棄です

<<< post process


<<< done

以上「IBM Bob + CPLEX で タオル製造の最適化-予算内で収益率を最大化しつつ廃棄を最小化-」でした。

タオルの合計枚数100枚以内で最も収益率が高くそして廃棄を少なくするというケースも面白そうです。今回は小規模な例でしたが、より大規模より複雑な制約などを段階的に加えてみてみるのもいいかもしれません。

完成したモデルを見たい方はこちらをご参考ください。
https://github.com/AsukaSaito0222/qiita/blob/main/202603%E3%82%BF%E3%82%AA%E3%83%AB%E6%9C%80%E9%81%A9%E5%8C%962%E7%A8%AE%E9%A1%9EQiita2.zip

:relaxed:

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?