mcpField
C
cuopt-numerical-optimization-api

cuopt-numerical-optimization-api

github.com/nvidiaデータ・データベース3.8k1.0k 回インストール今日更新
リポジトリ

cuopt-numerical-optimization-api について

NVIDIA cuOpt で線形、混合整数線形、二次最適化問題をモデル化して解くためのスキルです。Python、C/C++、CLI の利用者向けに、複数のモデリング言語から使う方法も説明します。

主な機能

  1. 01LP、MILP、QP の定式化ガイド
  2. 02Python、C/C++、CLI インターフェース
  3. 03サードパーティ製モデリング言語のバックエンド
  4. 04変数型とソルバーの選択
  5. 05設定と問題のトラブルシューティング

活用シーン

  1. 01最適化モデルに適したソルバーの選択
  2. 02CLI からの MPS ファイルの解決
  3. 03既存のモデリングツールでの cuOpt 利用
  4. 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.md
assets/c/lp_basic/
lp_simple.c
README.md
assets/c/lp_duals/
lp_duals.c
README.md
assets/c/lp_warmstart/
README.md
assets/c/milp_basic/
milp_simple.c
README.md
assets/c/milp_production_planning/
milp_production.c
README.md
assets/c/mps_solver/
mps_solver.c
README.md
assets/c/mps_solver/data/
sample.mps
assets/cli/
README.md
assets/cli/lp_production/
production.mps
README.md
assets/cli/lp_simple/
README.md
sample.mps
assets/cli/milp_facility/
facility.mps
README.md
assets/python/least_squares/
model.py
README.md
assets/python/lp_basic/
model.py
README.md
assets/python/lp_duals/
model.py
README.md
assets/python/lp_warmstart/
model.py
README.md
assets/python/maximization_workaround/
model.py
README.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_limitN 秒後に停止します
mip_relative_gap最適値との差が X% 以内になった時点で MILP を停止します
mip_absolute_tolerance絶対 MIP ギャップに基づいて停止します
log_to_consoleソルバーのログ出力を有効にします

構文はインターフェースによって異なります。インターフェースのリファレンスファイルを参照してください。

コメント