Skip to main content

tabular-optimization-ingestion

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

معلومات المصدر

المستودع
NVIDIA/cuopt-examples
آخر نشاط في المصدر
٢٩ يوليو ٢٠٢٦ في ١٨:٣٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٤٧٢
التفرعات
٩٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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.
عرض على GitHub