nvidia/tabular-optimization-ingestion
Infer optimization structure from uploaded tables and identify minimal clarifications before cuOpt modeling.
npx skills add https://github.com/NVIDIA/cuopt-examples --skill tabular-optimization-ingestion
Use this skill when the user provides raw or semi-structured data and asks a question that may require optimization.
The purpose of this skill is to bridge the gap between messy uploaded data and solver-ready model construction.
This skill does not solve the optimization problem itself. It inspects the data, infers likely modeling roles, and identifies what still needs clarification.
**It does not authorize heuristic, greedy, or backtracking schedules as
answers.** In the NemoClaw sandbox, read cuopt-sandbox: the first solver
that produces assignments or a schedule must be cuOpt after probe → env →
smoke gates pass. Ingestion output is a modeling interpretation (entities,
objective fields, constraints) — never a completed plan.
This skill refines the optimization interpretation using the uploaded data; it does not replace the earlier intent decision unless the data clearly contradicts it.
Users do not upload:
They upload things like:
This skill turns raw tables into a candidate optimization interpretation.
After inspection, produce a compact working interpretation containing:
For each uploaded source, determine:
Examples:
Always state the candidate row meaning before modeling from it.
Inspect column names and values for roles such as:
Objective-like fields:
Constraint-like fields:
Identifier / relationship fields:
Infer what the model is probably deciding.
Examples:
Do not overcommit when the data supports multiple plausible decisions. Note the candidates and ask one focused question if needed.
Use common table patterns:
Typical signs:
Typical signs:
Typical signs:
Before handing off, identify the smallest set of unanswered questions that block valid model construction.
Examples:
Do not ask broad generic questions if the data already strongly suggests the answer.
Summarize findings compactly:
This summary should be short enough that a downstream formulation skill can use it directly.
Use these heuristics carefully. They guide interpretation but do not prove it.
cost, unit_cost, shipping_cost, expense → likely minimization coefficientprofit, margin, contribution → likely maximization coefficientdistance, travel_time, duration → likely routing objective term or service constraintrisk, variance, covariance → likely QP signalcapacity, available, limit, max_* → upper bound / resource constraintdemand, required, need → demand fulfillment or service requirementmin_*, minimum_* → lower bound or service ruleTreat MILP as likely when the data or request suggests:
Treat routing as likely when the core question depends on path construction, not merely allocation.
Signs include:
Duplicate values in a foreign-key column across rows of a parent table usually signal a shared agent or resource — one entity serving multiple parents. Shared resources need a mutual-exclusion constraint that no other column states.
coach_id, driver_id, instructor_id, nurse_id, operator_id → shared agent; can serve only one parent at a timemachine_id, bay_id, tool_id → shared resource; can host only one job at a timedistinct_values < row_count → check whether simultaneous assignment is allowedA *_unavailability (or *_availability) table documents *known absences*; duplicated FK values document *implicit conflicts*. Treat both as constraint sources. Concrete check: for every FK-looking column in a parent table, compare distinct value count to row count, and surface the column when distinct < rows.
Before handing off to formulation, compare aggregate requirements against
upper bounds implied by the tables:
If required appearances exceed what the time structure can host, flag the
conflict before building the full MILP. Example: 8 required games per team
with at most 1 game per team per week over 5 weeks allows only 5 games —
infeasible without relaxing the weekly cap.
Files include:
products.csv with columns like product, profit, labor_hours, steel_unitscapacity.csv with columns like resource, availableLikely interpretation:
products.csv = one productcapacity.csv = one resource limitFiles include:
customers.csv with customer_id, demand, time_window_start, time_window_endvehicles.csv with vehicle_id, capacitytravel_times.csv with origin/destination or matrix-style travel timesLikely interpretation:
Files include patterns such as:
games.csv or jobs.csv — items to place (events, tasks, orders)time_slots.csv or shifts.csv — when placement can occurcourts.csv, machines.csv, or rooms.csv — resourcesteams.csv or workers.csv — entities tied to shared agents (coaches, operators)*_unavailability.csv — blocked (resource, slot) or (agent, slot) pairsLikely interpretation:
optimization-from-data-orchestrator + cuopt-sandbox before any custom scheduler codeFile includes:
sales_history.csv with order_id, date, region, revenue, units_soldLikely interpretation:
cost and capacity is automatically a valid optimization model.numerical-optimization-formulationcuopt-numerical-optimization-api-python (orcuopt-numerical-optimization-api-cli for MPS inputs)
numerical-optimization-formulationcuopt-numerical-optimization-api-pythonrouting-formulationcuopt-routing-api-pythonoptimization-mode-router before deep model constructionoptimization-intent-routerThis skill succeeds when the downstream model-building step can proceed with either:
It fails when it produces a vague restatement of the table without narrowing the modeling interpretation.
Take nvidia/tabular-optimization-ingestion from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.