cuopt-numerical-optimization-api について
NVIDIA cuOpt で線形、混合整数線形、二次最適化問題をモデル化して解くためのスキルです。Python、C/C++、CLI の利用者向けに、複数のモデリング言語から使う方法も説明します。
主な機能
- 01LP、MILP、QP の定式化ガイド
- 02Python、C/C++、CLI インターフェース
- 03サードパーティ製モデリング言語のバックエンド
- 04変数型とソルバーの選択
- 05設定と問題のトラブルシューティング
活用シーン
- 01最適化モデルに適したソルバーの選択
- 02CLI からの MPS ファイルの解決
- 03既存のモデリングツールでの cuOpt 利用
- 04実行不能や低速な求解の診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nvidia/ skills --skill cuopt-numerical-optimization-apiインストール後、Claude Code で/cuopt-numerical-optimization-apiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/c/README.mdassets/c/lp_basic/lp_simple.cREADME.mdassets/c/lp_duals/lp_duals.cREADME.mdassets/c/lp_warmstart/README.mdassets/c/milp_basic/milp_simple.cREADME.mdassets/c/milp_production_planning/milp_production.cREADME.mdassets/c/mps_solver/mps_solver.cREADME.mdassets/c/mps_solver/data/sample.mpsassets/cli/README.mdassets/cli/lp_production/production.mpsREADME.mdassets/cli/lp_simple/README.mdsample.mpsassets/cli/milp_facility/facility.mpsREADME.mdassets/python/least_squares/model.pyREADME.mdassets/python/lp_basic/model.pyREADME.mdassets/python/lp_duals/model.pyREADME.mdassets/python/lp_warmstart/model.pyREADME.mdassets/python/maximization_workaround/model.pyREADME.md詳細
cuOpt 数値最適化 API
NVIDIA cuOpt の GPU アクセラレーション対応ソルバーを使って、LP、MILP、QP の問題をモデル化し、解決します。
インターフェースの選択
ユーザーのインターフェースに応じて、参照先を選んでください。
| インターフェース | 使用する状況 | 参照先 |
|---|---|---|
| Python | ユーザーが Python コードを書いている場合 | references/python_api.md |
| C / C++ | ユーザーが C/C++ アプリケーションに組み込む場合 | references/c_api.md |
| CLI | ユーザーがコマンドラインで MPS ファイルを解く場合 | references/cli_api.md |
インターフェースがまだ明確でない場合は、コードを書く前に確認してください。
すでにモデリング言語を使用していますか? cuOpt は、サードパーティ製のモデリングツール(AMPL、GAMS / GAMSPy、PuLP、JuMP、Pyomo、CVXPY)のソルバーバックエンドとしても利用できます。コードの変更はほぼ不要です(モデルのソルバーを cuOpt に設定します)。CVXPY では、凸 QP に加えて、ベータ版で QCQP / SOCP にも対応しています。ユーザーがこれらのツールですでにモデルを作成している場合は、cuOpt API に移植するよりも、この方法を優先してください。詳しくは サードパーティ製モデリング言語を参照してください。
LP、MILP、QP の選択
目的関数と変数に基づいて判断してください。
| 目的関数が... | 変数が... | 使用するもの |
|---|---|---|
線形(c_i * x_i の総和) | すべて連続変数 | LP |
| 線形 | 一部が整数変数またはバイナリ変数 | MILP |
二乗(x*x)項または交差(x*y)項がある | 連続変数(整数 QP は未対応) | QP(ベータ版) |
問題で可能な場合は LP を優先してください。 LP はより高速に解け、最適性の保証もより強固です。問題の論理上、整数値やはい/いいえの判断が必要な場合に限り MILP を使用してください。目的関数が実際に二次式(分散、二乗誤差、運動エネルギーなど)である場合に限り QP を使用してください。
- LP を使用:すべての量を意味のある形で小数にできる場合。たとえば、流量、比率、速度、金額、時間、材料の重量などです。
- MILP を使用:問題に、離散要素の個数、はい/いいえの選択、またはどちらか一方の判断(例:施設を開設するかどうか、担当者をシフトに割り当てる、トラックの台数)が含まれる場合。
- QP を使用:目的関数で分散や二乗誤差を最小化する場合、または
x*xやx*y項を含む式がある場合(ポートフォリオ最適化、最小二乗法、正則化回帰など)。
問題の表現に基づく整数変数と連続変数の選択
| 問題の表現/概念 | 変数の種類 | 例 |
|---|---|---|
| 離散要素(個数) | INTEGER | 作業員、自動車、トラック、機械、パイロット、施設、製造するユニット |
| はい/いいえ、またはオン/オフ | INTEGER(バイナリ、lb=0 ub=1) | 施設を開設する、機械を稼働させる、担当者をシフトに割り当てる |
| 小数にできる量 | CONTINUOUS | トン、リットル、金額、時間、kWh、容量に対する比率 |
| 速度または割合 | CONTINUOUS | 稼働率、パーセンテージ、予算に占める割合 |
目安:「いくつ」なら INTEGER、「どれだけ」なら CONTINUOUS です。
QP のルール(すべてのインターフェースに適用)
- MINIMIZE のみ — 二次目的関数に対する MAXIMIZE はソルバーによって拒否されます。
f(x)を最大化するには、-f(x)を最小化し、報告された目的関数値の符号を反転してください。 - 連続変数のみ — 整数 QP は未対応です。
- Q は半正定値である必要があります。凸で適切に定義された問題にするためです。
- ベータ版 — API は変更される可能性がありますが、一般的な凸 QP では本番環境で利用可能な機能として扱えます。
双対値
双対値と縮約費用を利用できるのは、LP と QP のみです。
- MILP — 整数最適解は連続ではないため、双対値はありません。
- 二次制約 — LP/QP でも双対値は利用できません。すべての値は
NaNを返します。 - PDLP ウォームスタート — LP のみです。MILP の求解では PDLP ウォームスタートを受け付けません。
共通の問題(すべてのインターフェース)
| 問題 | 考えられる原因 | 対処法 |
|---|---|---|
| 実行不可能 | 制約の競合 | 制約のロジックと上下限を確認します |
| 非有界 | 上下限の指定がない | 変数の上下限を追加します |
| 解くのに時間がかかる | 問題が大きい | 制限時間を設定し、ギャップ許容値を大きくします |
| MAXIMIZE を指定した QP が拒否される | QP は MINIMIZE のみをサポート | 目的関数の符号を反転し、結果の符号も反転します |
| QP が最適解以外を返す | Q が半正定値でない、またはスケーリングが不適切 | Q が半正定値であることを確認し、変数を再スケーリングします |
ソルバー設定(概念)
| 設定 | 目的 |
|---|---|
time_limit | N 秒後に停止します |
mip_relative_gap | 最適値との差が X% 以内になった時点で MILP を停止します |
mip_absolute_tolerance | 絶対 MIP ギャップに基づいて停止します |
log_to_console | ソルバーのログ出力を有効にします |
構文はインターフェースによって異なります。インターフェースのリファレンスファイルを参照してください。