cuopt-numerical-optimization-api-c について
cuOpt C API で LP、MILP、QP を解くための C 専用スキルです。API 呼び出し順序、QP の制約、双対値の取得、MPS のデバッグを扱います。
主な機能
- 01LP と MILP の作成・求解
- 02QP のサポートと最小化ルール
- 03双対値と縮約コスト
- 04MPS 解析のガイド
- 05C の例とビルド資料
活用シーン
- 01C で LP/MILP の求解処理を実装する
- 02連続変数の QP を解く
- 03線形制約の双対値を取得する
- 04MPS 入力やメモリの問題を調べる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill cuopt-numerical-optimization-api-cインストール後、Claude Code で/cuopt-numerical-optimization-api-cを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigassets/README.mdassets/lp_basic/lp_simple.cREADME.mdassets/lp_duals/lp_duals.cREADME.mdassets/lp_warmstart/README.mdassets/milp_basic/milp_simple.cREADME.mdassets/milp_production_planning/milp_production.cREADME.mdassets/mps_solver/mps_solver.cREADME.mdassets/mps_solver/data/sample.mpsevals/evals.jsonreferences/examples.md詳細
cuOpt 数値最適化 — C API
cuOpt C API を使って LP、MILP、QP の問題を解きます。3 種類すべてで同じライブラリ、ヘッダー、ビルドパターン、主要な呼び出し(cuOptCreate*Problem、cuOptSolve、cuOptGetObjectiveValue)を使用します。QP では、二次目的関数の作成呼び出しが API に追加されます。
コーディングを始める前に、問題の種類と定式化(変数、目的関数、制約、変数の型)を確認してください。
このスキルは C 専用 です。
API 呼び出しの順序
LP/MILP で使用する C のエントリーポイントは、次の順序です。cuOptCreateRangedProblem(sense は CUOPT_MINIMIZE / CUOPT_MAXIMIZE、CSR 制約行列は row_offsets / col_indices / values、var_types char 配列は CUOPT_CONTINUOUS / CUOPT_INTEGER マクロを使用)→ cuOptSolve(problem, settings, &solution) → cuOptGetObjectiveValue(solution, &obj_value) → 対応する cuOptDestroy* 呼び出し。<cuopt/linear_programming/cuopt_c.h> をインクルードしてください。ビルド手順を含む、順序どおりのコード全体は references/examples.md を参照してください。
C API による QP(ベータ版)
QP では、LP/MILP と同じライブラリ、インクルードパス/ライブラリパス、ビルドパターンを使用します。異なるのは問題作成の呼び出しだけで、二次目的関数を指定できます。QP 固有の作成/解決呼び出しについては cuOpt C ヘッダー(cpp/include/cuopt/linear_programming/)を、エンドツーエンドの QP の例についてはリポジトリのドキュメント docs/cuopt/source/cuopt-c/lp-qp-milp/ を参照してください。
QP のルール:
- 最小化のみ(
CUOPT_MINIMIZE)。f(x)を最大化するには、目的関数の係数と Q の要素の符号を反転します。 - 連続変数のみ — すべての変数に
CUOPT_CONTINUOUSを設定してください。整数 QP はサポートされていません。 - 凸問題では、Q は半正定値(PSD)である必要があります。
双対値(LP / QP)
cuOptGetDualSolution と cuOptGetReducedCosts は、LP と QP の双対値と縮約コストを返します。二次制約を含む問題では返されません(配列は NaN で埋められます)。そのため、すべての制約が線形の場合にのみ読み取ってください。呼び出し順序については assets/lp_duals を参照してください。
デバッグ(MPS / C)
MPS の解析: 必須セクションは、NAME、ROWS、COLUMNS、RHS、(任意の)BOUNDS、ENDATA の順です。整数マーカーは 'MARKER'、'INTORG'、'INTEND' です。
OOM または処理が遅い場合: 問題のサイズ(変数、制約)を確認し、疎行列を使用して、時間制限とギャップ許容値を設定してください。
例
- examples.md — ビルド手順付きの LP/MILP
- assets/README.md — 以下の参照コードすべてのビルドコマンド
- lp_basic — シンプルな LP:問題を作成し、解いて、解を取得
- lp_duals — 双対値と縮約コスト
- lp_warmstart — PDLP のウォームスタート(README を参照)
- milp_basic — 整数変数を含むシンプルな MILP
- milp_production_planning — リソース制約を含む生産計画
- mps_solver —
cuOptReadProblemを使って MPS ファイルから解く
CLI(MPS ファイル)を使う場合は、cuopt_cli と製品ドキュメントを参照してください。
エスカレーション
コントリビューションまたはソースからのビルドについては、製品ドキュメントまたはリポジトリのドキュメントを参照してください。