Add cuopt-multi-objective-exploration skill (Pareto frontier)#1355
Add cuopt-multi-objective-exploration skill (Pareto frontier)#1355cafzal wants to merge 12 commits into
Conversation
Signed-off-by: cafzal <cameron.afzal@gmail.com>
Signed-off-by: cafzal <cameron.afzal@gmail.com>
Signed-off-by: cafzal <cameron.afzal@gmail.com>
- Remove forward-ref to the not-yet-existent cuopt-examples/multi_objective_frontier/ from the goal-programming pointer (the worked example is a separate, in-flight effort) - Inline the publication next-steps in BENCHMARK.md (CONTRIBUTION_NEXT_STEPS.md is not in the repo) - Add a per-solve MILP time-limit note to Step 3 so points are reported optimal to the gap you set, not certified optimal Signed-off-by: cafzal <cameron.afzal@gmail.com>
…ifications) Signed-off-by: cafzal <cameron.afzal@gmail.com>
- Objectives and constraints are interchangeable: read a single-objective model's hard constraints as candidate objectives to promote to parametric ε-constraints - Recognition cue: a hand-coded loop over a target/budget value is already the ε-constraint method - Verify, don't assume: measure method-vs-method claims rather than asserting them; flag feasible-but-not-Optimal solves Signed-off-by: cafzal <cameron.afzal@gmail.com>
- Guard the constraint→objective note: promote a fixed constraint only when its level was an assumption; a genuinely non-negotiable limit (hard budget cap, regulatory minimum) stays a constraint. Keeps Add A from undercutting the single-objective decoy eval. - Correct the BENCHMARK caveat: the shipped SKILL.md also gained three method/discipline notes the A/B didn't exercise, not just the feasibility clarifications; the numbers reflect the tested text, and NVSkills-Eval gates the final text. Signed-off-by: cafzal <cameron.afzal@gmail.com>
- SKILL.md: cuOpt now solves convex quadratic constraints (barrier solver converts xᵀQx ≤ ε to a second-order cone; add_quadratic_constraint, inequality only) per the SOCP work (NVIDIA#1290). A convex quadratic objective can therefore be ε-constrained, not only kept as the objective. The prior "constraints are linear, not quadratically-constrained" claim was outdated. - evals.json: eval-002 supplier count ~25 → 12 to match the validated A/B exploration instance (BENCHMARK says 12 suppliers; "of 24 non-supported portfolios" corroborates a ~12-supplier instance), since the skill-card states the A/B was run over these eval tasks. Signed-off-by: cafzal <cameron.afzal@gmail.com>
Signed-off-by: cafzal <cameron.afzal@gmail.com>
The skill's BENCHMARK and skill-card said NVSkills-Eval "runs on the fork" / via a "fork-based draft PR with CI", but request-nvskills-ci.yml states fork PRs are not supported and the run is maintainer-triggered (/nvskills-ci by an OWNER/MEMBER/COLLABORATOR) on a non-fork NVIDIA/cuopt branch; its bot attaches the skill.oms.sig signature. Reworded to match. Signed-off-by: cafzal <cameron.afzal@gmail.com>
Signed-off-by: cafzal <cameron.afzal@gmail.com>
|
@cafzal Thank you for the draft PR, do you have access to push PR branch to main repo? Currently there is a requirement for skill related PRs to be made available in main repo to trigger CI pipe line. Once you have done that, pipeline will validate and eval. It will also create BENCHMARK.md and skill card. |
These are generated by the NVSkills onboarding pipeline (as for the sibling skills, e.g. cuopt-numerical-optimization-formulation), not authored by the contributor. Leaving just SKILL.md + evals/evals.json so the pipeline produces BENCHMARK.md, the skill card, and skill.oms.sig cleanly once the branch is on the main repo. Signed-off-by: cafzal <cameron.afzal@gmail.com>
@rgsl888prabhu I don't have write access to NVIDIA/cuopt ( Could you either:
Either works for me. Thanks. |
Description
Adds
cuopt-multi-objective-exploration— a concept skill for problems with two or more objectives and no fixed weighting, where the user wants to see the tradeoff instead of accepting one weighted answer. It turns repeated single-objective cuOpt solves into a Pareto frontier (payoff table → ε-constraint / weighted-sum sweep → filter dominated) and supplies the discipline to read it: exchange rates, knee points, deferring the final choice. It adds no solver features and invents no API — it sits above the api-* and formulation skills, and is linked from the goal-programming pattern incuopt-numerical-optimization-formulation(which already covers the fixed-priority case).cuOpt-specific correctness points
xᵀΣx) can simply stay the objective. A convex one can also be ε-constrained directly — cuOpt routesxᵀQx ≤ εthrough the barrier solver as a second-order cone (add_quadratic_constraint, inequality only), though SOCP support is beta.User testing
Used the skill to enrich two existing examples and confirmed it drove the right calls — companion PR NVIDIA/cuopt-examples#151:
max_shiftscap → cost vs. fairness), chose ε-constraint over weighted-sum, anchored objective ranges, filtered dominated points, capped each solve, and reported no MILP duals.The skill drives the method; runnable code still needs
cuopt-numerical-optimization-api-pythonplus the worked notebooks, which are Colab-GPU validated (T4, clean end-to-end).Validation & gating
Registered in
AGENTS.md+marketplace.json;ci/utils/validate_skills.shpasses. The contribution isSKILL.md+evals/evals.json—BENCHMARK.md, the skill card, andskill.oms.sigare generated by the NVSkills onboarding pipeline. The official NVSkills-Eval is the gate (PENDING).Checklist