0
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?

Decision Optimizationでのlpファイルからの最適化

Last updated at Posted at 2025-09-18

LP ファイルの形式は、数理最適化問題(線形計画問題など)を記述するための拡張子「.lp」を持つテキストファイルです。docplexやpulpなどで作ったモデルもLPファイルで出力することができます。
このLPファイルをSaaS環境のwatsonx.ai StudioのDecision Optimizationで読み込んで最適解を得てみます。

Decision Optimizationのエクスペリメントの作成

あらかじめwatsonx.ai Runtimeにデプロイメント・スペースを作っておきます。

watsonx.ai Runtimeのデプロイメント・スペースの作成 #WML - Qiita

新規資産で 最適化問題の解決を選びます。
image.png

任意の名前をつけてMachine Learning(watsonx.ai Runtime)サービスの追加を選びます。
image.png

watsonx.ai Runtimeのサービスを関連付けます。
image.png

作っておいたデプロイメント・スペースを選び、「作成」します。
image.png

lpファイルの読み込み

モデルの作成を選びモデルのインポートをクリックします。
image.png

以下のサンプルのLPファイルを読み込みます。gz形式やbz2形式で圧縮されていても読み込むことができます。

sample.lp
Maximize
 obj: 2 x2 + 3 x3
Subject To
 c1: x2 + x3 - x1 <= 20
 c2: - 3 x2 + x3 + x1 <= 30
Bounds
 0 <= x1 <= 40
 All other variables are >= 0.

CPLEXのフォーマットを選びファイルを追加をクリックします。
image.png
sample.lpを選びます。
image.png
インポートをクリックします。
image.png
MODELタブに読み込まれます。実行ボタンで実行します。
image.png
以下のように実行を開始されます。
image.png
実行が完了すると、結果のタブに目的関数の値がでます。ここでは162.500が返っています。
詳細の確認のためにはソリューションのダウンロードを行います。

image.png
zipの形式で結果は得られます。
image.png

ソリューション

ソリューション(解)のzipの中身は以下です。
image.png

目的関数は162.5です。

kpis.csv
Name,Value
PROGRESS_CURRENT_OBJECTIVE,162.5

決定変数は以下です。

変数名
x1 40
x2 17.5
x3 42.5
solution.xml
<CPLEXSolution version="1.2">
<header primalFeasible="1" solutionTypeValue="1" solutionMethodString="dual" writeLevel="1" objectiveValue="162.5" solutionTypeString="basic" problemName="model.lp" solutionStatusString="optimal" solutionStatusValue="1" simplexIterations="3" dualFeasible="1"/>
<quality maxPi="2.75" maxRedCost="2.5" epRHS="9.9999999999999995e-07" maxDualResidual="0" maxX="42.5" maxPrimalResidual="0" maxPrimalInfeas="0" maxSlack="0" kappa="3" epOpt="9.9999999999999995e-07" maxDualInfeas="0"/>
<linearConstraints>
<constraint dual="2.75" slack="0" name="c1" index="0" status="LL"/>
<constraint dual="0.25" slack="0" name="c2" index="1" status="LL"/>
</linearConstraints>
<variables>
<variable reducedCost="0" name="x2" index="0" value="17.5" status="BS"/>
<variable reducedCost="0" name="x3" index="1" value="42.5" status="BS"/>
<variable reducedCost="2.5" name="x1" index="2" value="40" status="UL"/>
</variables>
</CPLEXSolution>

経過時間(elapsedTime)は約0.0010秒です。

stats.csv
Name,Value
job.coresCount,1
job.inputsReadMs,1901
job.memoryPeakKB,98860
cplex.size.integerVariables,0
cplex.size.linearConstraints,2
cplex.size.semiintegerVariables,0
cplex.size.quadraticConstraints,0
cplex.size.constraints,2
cplex.modelType,LP
cplex.size.variables,3
cplex.size.continuousVariables,3
cplex.size.booleanVariables,0
cplex.size.semicontinuousVariables,0
cplex.solve.elapsedTime,9.629726409912109E-4
cplex.solve.iterationCount,3
job.modelProcessingMs,677

log.txt
[2025-09-18T06:27:31.803Z, INFO] CPLEX version 22010200
[2025-09-18T06:27:32.327Z, WARNING] Changed parameter CPX_PARAM_THREADS from 0 to 1
[2025-09-18T06:27:32.328Z, INFO] Param[1,067] = 1
[2025-09-18T06:27:32.342Z, INFO] Param[1,130] = UTF-8
[2025-09-18T06:27:32.343Z, INFO] Param[1,132] = -1
[2025-09-18T06:27:32.344Z, WARNING] Warning, line 7: Name 'Allothervariablesare' does not exist.
[2025-09-18T06:27:32.345Z, WARNING] Warning: 'End' missing.
[2025-09-18T06:27:32.347Z, INFO] Version identifier: 22.1.2.0 | 2024-11-26 | 0edbb82fd
[2025-09-18T06:27:32.363Z, INFO] CPXPARAM_Threads                                 1
[2025-09-18T06:27:32.364Z, INFO] CPXPARAM_Output_CloneLog                         -1
[2025-09-18T06:27:32.365Z, INFO] CPXPARAM_Read_APIEncoding                        "UTF-8"
[2025-09-18T06:27:32.366Z, INFO] Tried aggregator 1 time.
[2025-09-18T06:27:32.367Z, INFO] No LP presolve or aggregator reductions.
[2025-09-18T06:27:32.367Z, INFO] Presolve time = 0.00 sec. (0.00 ticks)
[2025-09-18T06:27:32.368Z, INFO] Iteration log . . .
[2025-09-18T06:27:32.370Z, INFO] Iteration:     1   Dual infeasibility =             2.999999
[2025-09-18T06:27:32.387Z, INFO] There are no bound infeasibilities.
[2025-09-18T06:27:32.388Z, INFO] There are no reduced-cost infeasibilities.
[2025-09-18T06:27:32.402Z, INFO] Maximum Ax-b residual              = 0
[2025-09-18T06:27:32.403Z, INFO] Maximum c-B'pi residual            = 0
[2025-09-18T06:27:32.403Z, INFO] Maximum |x|                        = 42.5
[2025-09-18T06:27:32.404Z, INFO] Maximum |slack|                    = 0
[2025-09-18T06:27:32.405Z, INFO] Maximum |pi|                       = 2.75
[2025-09-18T06:27:32.406Z, INFO] Maximum |red-cost|                 = 2.5
[2025-09-18T06:27:32.407Z, INFO] Condition number of unscaled basis = 3.0e+00
[2025-09-18T06:27:32.408Z, INFO] optimal (1)

パラメーターの指定

CPLEXのパラメーターを指定して実行したい場合「.prm」のファイルにCのパラメーターを記述して準備します。
例えば以下のパラメーターCPXPARAM_MIP_Tolerances_MIPGapを変更してみます。

myparam.prm
CPXPARAM_MIP_Tolerances_MIPGap 0.5

+をクリックしてファイルのインポートを選びます。

image.png

「.prm」のファイルを選びます。
image.png

パラメーターが読み込まれました。実行をしてみます。
image.png
ログをみると以下のようにパラメーターが変更されて実行されたことがわかります。
image.png

サンプルファイル

  • テスト環境
    • CP4DaaS 20-25-09-18
    • CPLEX version 22010200

参考

Decision OptimizationのエクスペリメントでのCPU数メモリの変更 #cp4daas - Qiita

Decision Optimization エクスペリメント へのモデルのインポート - IBM Documentation

CPLEXのInteractive OptimizerでLPファイルの問題を解く

ローカルのコマンドでLPファイルの問題を解く記事です。

0
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
0
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?