Multi-objective Pareto-frontier examples (workforce + portfolio)#151
Draft
cafzal wants to merge 6 commits into
Draft
Multi-objective Pareto-frontier examples (workforce + portfolio)#151cafzal wants to merge 6 commits into
cafzal wants to merge 6 commits into
Conversation
…io QP duals) Signed-off-by: cafzal <cameron.afzal@gmail.com>
8 tasks
…-sum gotcha demo) Signed-off-by: cafzal <cameron.afzal@gmail.com>
…older READMEs Signed-off-by: cafzal <cameron.afzal@gmail.com>
… sweeps Signed-off-by: cafzal <cameron.afzal@gmail.com>
Signed-off-by: cafzal <cameron.afzal@gmail.com>
…onvention) Signed-off-by: cafzal <cameron.afzal@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Multi-objective (Pareto frontier) examples — companion to the cuOpt skill PR
Two examples that extend existing folders to demonstrate multi-objective Pareto-frontier exploration with cuOpt — the workflow proposed as the
cuopt-multi-objective-explorationskill in NVIDIA/cuopt#1355 (discussion NVIDIA/cuopt#1351).workforce_optimization/workforce_optimization_multiobjective.ipynb(MILP) — turns the cost-minimizing workforce model into a tradeoff surface: cost vs. coverage (relaxcoverage == requiredand sweep a coverage floor) and cost vs. fairness (promote the base model's fixedmax_shiftscap to a swept ε-constraint — a fixed constraint treated as a candidate objective). Reads the frontier as an exchange rate (marginal $ per shift), caps every MILP solve with atime_limit, and shows that an integer program has no constraint duals. ε-constraint is the default; weighted-sum is a one-line method note, not a demo.portfolio_optimization/QP_portfolio_frontier_duals.ipynb(QP) — recognizes the base QP notebook's hand-coded target-return loop as the ε-constraint method, rebuilds it as the named workflow, and adds the piece the manual sweep omits: the return-constraint dual (shadow price d(variance)/d(return)) along the efficient frontier, with the PDLP-tolerance caveat.Both reuse the base notebooks' data, run on cuOpt alone (Colab GPU), and follow the repo's notebook idiom (GPU check →
cuopt-cu12install → solve). Notebooks ship output-stripped (repo convention — every existing cuopt-examples notebook has 0 cell outputs); the run evidence is below.User testing
Both notebooks were built by following the skill, then run end-to-end on Colab T4, cuOpt 26.4.0 — clean, no API errors:
Optimal(0FeasibleFound). A single solve was only ever the right-most point.max_shiftscap (the constraint-as-objective move): full coverage holds at $468 down to a cap of 11, then $470 / $473 / $484 at caps 10 / 9 / 8, and goes infeasible at ≤ 7 — a clean price-of-fairness curve plus a feasibility cliff.Optimal(0PrimalFeasible), so the PDLP-tolerance caveat is mild here.Notes
Optimal(0FeasibleFound) — optimal to cuOpt's gap tolerance (exact here, since labor cost is integer-valued); the per-solvetime_limitis a guard that didn't bind.PrimalFeasiblepoint is flagged (none here).Draft — cross-linked to the skill PR NVIDIA/cuopt#1355; no reviewers pinged yet.
pre-commit/ CI to run before un-drafting.