Skip to main content

tabular-optimization-ingestion

Infer optimization structure from uploaded tables and identify minimal clarifications before cuOpt modeling.

Source facts

Repository
NVIDIA/cuopt-examples
Last source activity
July 29, 2026 at 18:35
Detected SKILL.md language
English
Stars
472
Forks
90

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
tabular-optimization-ingestion
version
26.06.01
description
Infer optimization structure from uploaded tables and identify minimal clarifications before cuOpt modeling.
license
Apache-2.0
metadata
{"author":"NVIDIA cuOpt Team","tags":["cuopt","nemoclaw","orchestration"]}
origin
skill-evolution
# 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. ## Purpose Users do not upload: - objective vectors - sparse matrices - explicit decision variable definitions They upload things like: - products.csv - capacity.xlsx - orders.json - travel_times.csv - dealers.csv - depots.csv This skill turns raw tables into a candidate optimization interpretation. ## What this skill should produce After inspection, produce a compact working interpretation containing: - likely problem type: LP / MILP / QP / routing / unclear - likely entities: products, resources, orders, locations, vehicles, customers, depots, time periods, etc. - likely objective fields: profit, cost, margin, time, risk, distance, penalty - likely constraint fields: capacity, demand, budget, inventory, hours, availability, limits, min/max bounds - likely decision grain: per product, per route, per order, per plant, per vehicle-stop, etc. - minimum unresolved ambiguities that require a user clarification ## Ingestion workflow ### 1. Identify table shape and grain For each uploaded source, determine: - what one row appears to represent - whether the table is entity-level, transaction-level, matrix-like, or parameter-like Examples: - one row per product - one row per plant - one row per customer order - one row per location pair - one row per vehicle - one row per time period Always state the candidate row meaning before modeling from it. ### 2. Identify likely optimization roles by column meaning Inspect column names and values for roles such as: Objective-like fields: - profit - revenue - margin - cost - travel_time - distance - risk - penalty Constraint-like fields: - capacity - demand - available_hours - budget - max_load - min_order - inventory - time_window_start - time_window_end Identifier / relationship fields: - product_id - plant_id - order_id - customer_id - vehicle_id - depot_id - location_id - origin / destination - pickup / delivery ### 3. Infer candidate decision structure Infer what the model is probably deciding. Examples: - units to produce by product - units to ship from origin to destination - whether to open a facility - which vehicle serves which stops - route sequence through locations - allocation of budget across campaigns Do not overcommit when the data supports multiple plausible decisions. Note the candidates and ask one focused question if needed. ### 4. Match the data pattern to a problem family Use common table patterns: #### LP / MILP patterns Typical signs: - product/resource tables - profit and resource consumption by product - capacity tables - demand tables - assignment tables - open/close or yes/no columns implying integrality #### QP patterns Typical signs: - covariance matrix - risk matrix - variance terms - squared error context - portfolio weights or regression-style structure #### Routing patterns Typical signs: - locations / coordinates - travel time or distance matrix - depot + customer tables - vehicle tables - demands and capacities - time windows - pickup and delivery pairs ### 5. Identify only the critical ambiguities Before handing off, identify the smallest set of unanswered questions that block valid model construction. Examples: - Are demands mandatory or forecast-only? - Must decisions be integers? - Are these time windows hard constraints? - Can unmet demand be allowed with penalty? - Is profit net profit or revenue only? Do **not** ask broad generic questions if the data already strongly suggests the answer. ## Preferred output format Summarize findings compactly: - **Candidate problem family:** ... - **Row meanings:** ... - **Likely decision:** ... - **Likely objective:** ... - **Likely constraints:** ... - **Unresolved blockers:** ... This summary should be short enough that a downstream formulation skill can use it directly. ## Column-role heuristics Use these heuristics carefully. They guide interpretation but do not prove it. ### Cost / objective heuristics - `cost`, `unit_cost`, `shipping_cost`, `expense` → likely minimization coefficient - `profit`, `margin`, `contribution` → likely maximization coefficient - `distance`, `travel_time`, `duration` → likely routing objective term or service constraint - `risk`, `variance`, `covariance` → likely QP signal ### Capacity / demand heuristics - `capacity`, `available`, `limit`, `max_*` → upper bound / resource constraint - `demand`, `required`, `need` → demand fulfillment or service requirement - `min_*`, `minimum_*` → lower bound or service rule ### Integrality heuristics Treat MILP as likely when the data or request suggests: - whole units - counts of vehicles, workers, facilities, shifts, items - yes/no choices - on/off decisions - assignment indicators ### Routing heuristics Treat routing as likely when the core question depends on **path construction**, not merely allocation. Signs include: - stop sequence matters - travel between locations matters - vehicles start/end at depots - travel matrix or coordinates are present - pickup and delivery relationships appear ### Cross-row coupling heuristics 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 time - `machine_id`, `bay_id`, `tool_id` → shared resource; can host only one job at a time - any FK column where `distinct_values < row_count` → check whether simultaneous assignment is allowed A `*_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`. ### Pre-solve capacity arithmetic Before handing off to formulation, compare aggregate requirements against upper bounds implied by the tables: - required events or appearances per entity (e.g. round-robin games per team) - maximum placements allowed by per-week, per-day, or per-slot caps - total court/slot/machine capacity across the horizon 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. ## Examples ### Example 1: product mix tables Files include: - `products.csv` with columns like `product`, `profit`, `labor_hours`, `steel_units` - `capacity.csv` with columns like `resource`, `available` Likely interpretation: - one row in `products.csv` = one product - one row in `capacity.csv` = one resource limit - decision = how much of each product to produce - objective = maximize profit - constraints = labor and steel capacities ### Example 2: routing tables Files include: - `customers.csv` with `customer_id`, `demand`, `time_window_start`, `time_window_end` - `vehicles.csv` with `vehicle_id`, `capacity` - `travel_times.csv` with origin/destination or matrix-style travel times Likely interpretation: - customer rows are stops with demand and optional time windows - vehicle rows define fleet capacity - travel table defines movement cost/time - likely problem family = routing ### Example 3: time-slot / resource assignment (scheduling MILP) 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 occur - `courts.csv`, `machines.csv`, or `rooms.csv` — resources - `teams.csv` or `workers.csv` — entities tied to shared agents (coaches, operators) - `*_unavailability.csv` — blocked (resource, slot) or (agent, slot) pairs Likely interpretation: - decision = assign each item to a (slot, resource) or similar binary/integer placement - hard constraints = no double-booking, unavailability, capacity, one game per team per slot - likely problem family = **MILP** (even if user only says "build a schedule" or "valid plan") - **NemoClaw:** read `optimization-from-data-orchestrator` + `cuopt-sandbox` before any custom scheduler code ### Example 4: historical transaction table File includes: - `sales_history.csv` with `order_id`, `date`, `region`, `revenue`, `units_sold` Likely interpretation: - this may be analytics, not optimization, unless the user asks for a future decision under constraints - do not invent decision variables from history alone without a decision-focused question ## Guardrails - Do not assume every table with `cost` and `capacity` is automatically a valid optimization model. - Do not mistake transaction history for decision variables without evidence. - Do not treat forecast data as hard constraints unless the user implies that. - Do not infer QP unless there is a real quadratic signal. - Do not infer routing unless movement between locations is central to the decision. - Prefer one precise clarification over a long list of speculative questions. ## Handoff guidance - If the data suggests LP / MILP: - hand off to `numerical-optimization-formulation` - then to `cuopt-numerical-optimization-api-python` (or `cuopt-numerical-optimization-api-cli` for MPS inputs) - If the data suggests QP: - hand off to `numerical-optimization-formulation` - then to `cuopt-numerical-optimization-api-python` - If the data suggests routing: - hand off to `routing-formulation` - then to `cuopt-routing-api-python` - If mode selection is still needed because replayability, audit, export, or reuse may matter: - use `optimization-mode-router` before deep model construction - If optimization intent itself is still uncertain: - use `optimization-intent-router` ## Success criterion This skill succeeds when the downstream model-building step can proceed with either: - no clarification, or - one or a few narrowly targeted clarifying questions It fails when it produces a vague restatement of the table without narrowing the modeling interpretation.
View on GitHub