From 9e812049c2df53172863aaf01fd857d30bdb9227 Mon Sep 17 00:00:00 2001 From: cafzal Date: Wed, 17 Jun 2026 14:57:27 -0700 Subject: [PATCH] cuopt-agent: add multi-objective supply-vs-cost what-if + cost-cap eval case Signed-off-by: cafzal --- .../eval/max_supply_what_ifs.csv | 22 ++++++++++++++ .../sample_prompts/scenario_4.md | 29 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 cuopt-agent/cuopt_agent/data/max_supply_what_ifs/sample_prompts/scenario_4.md diff --git a/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/eval/max_supply_what_ifs.csv b/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/eval/max_supply_what_ifs.csv index feab212..a6f87fe 100755 --- a/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/eval/max_supply_what_ifs.csv +++ b/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/eval/max_supply_what_ifs.csv @@ -83,3 +83,25 @@ Analyse the results: 2. How does the additional material improve the objective value? 3. Does RM4 inventory carry across multiple periods, or is it consumed quickly? 4. What would happen if the shipment were moved to week 5 instead of week 2?","3470065" +"max_supply_4","## Scenario + +The max-supply model maximizes priority-weighted finished-goods inventory but ignores what +production costs. Finance needs to know how much supply is reachable under a fixed budget. + +## Request + +Add a total-cost accounting to the model from `item_costs.csv` (`unit_cost`, `holding_cost`) and +`resource_costs.csv` (`production_cost_per_hour`), defined over the model's existing variables — no +new decisions: + +``` +total_cost = sum over procured i, period t of buy[i,t] * unit_cost[i] (procurement) + + sum over all items i, period t of inventory[i,t] * holding_cost[i] (holding) + + sum over (process p, resource r), period t of x[p,r,t] * hours_per_unit[p] * production_cost_per_hour[r] (production) +``` + +Constrain `total_cost <= 9149.8` and re-solve for the model's existing objective (maximize +priority-weighted finished-goods inventory at the end of the horizon) on the sample dataset +(10 periods). + +Report the resulting optimal objective value.","2660000" diff --git a/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/sample_prompts/scenario_4.md b/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/sample_prompts/scenario_4.md new file mode 100644 index 0000000..8f178b0 --- /dev/null +++ b/cuopt-agent/cuopt_agent/data/max_supply_what_ifs/sample_prompts/scenario_4.md @@ -0,0 +1,29 @@ +## Scenario + +Our max-supply model maximizes priority-weighted finished-goods inventory at the end of the +horizon — but it spends freely to do it. Procuring more raw material, running resources longer, +and carrying inventory all cost money (`item_costs.csv` has per-item `unit_cost` and `holding_cost`; +`resource_costs.csv` has `production_cost_per_hour`), and the base objective ignores all of it. + +Finance now wants the cost side on the table. There is **no agreed exchange rate** between a unit of +finished-goods supply and a dollar of cost — pushing supply up raises cost, and the right balance is +a judgment call, not a number we can hand the solver up front. So the answer finance needs isn't a +single plan; it's the tradeoff laid out so they can choose where to sit. + +## Request + +1. Bring cost into the picture as a reporting quantity built from `item_costs.csv` and + `resource_costs.csv` over the model's existing variables — no new decisions. + +2. Give finance the **whole supply-vs-cost tradeoff**, not one plan and not a single blended + objective: show how much finished-goods supply each budget level buys, from a tight budget up to + where more money stops buying more supply. + +3. Solve on the sample dataset (10 periods) and present it so finance can act: the tradeoff curve, + the rate at which supply is bought as the budget loosens and where that rate falls off (the knee), + what drives cost at the high-supply end, and two or three candidate operating points to choose + between — without calling any one of them "best." + +Watch two things about this model so the numbers mean what you claim: it's a **MILP**, and the +finished-goods priority weights span 10000:1 — so make sure your marginal rate is valid for the model +class and your supply figures are in terms finance can read, not just the weighted total.