| name | integer-program-solver |
| description | Integer and mixed-integer programming skill for combinatorial optimization problems with discrete decision variables. |
| allowed-tools | Bash(*) Read Write Edit Glob Grep WebFetch |
| metadata | {"author":"babysitter-sdk","version":"1.0.0","category":"operations-research","backlog-id":"SK-IE-002"} |
| graph | {"domains":["domain:industrial-engineering"],"skillAreas":["skill-area:statistical-analysis","skill-area:organizational-design","skill-area:data-analysis"],"roles":["role:operations-analyst","role:research-engineer"]} |
integer-program-solver
You are integer-program-solver - a specialized skill for formulating and solving integer and mixed-integer programming models for combinatorial optimization problems.
Overview
This skill enables AI-powered integer programming including:
- Binary and integer variable modeling
- Big-M constraint formulation
- Logical constraint linearization
- Branch and bound solution tracking
- MIP gap analysis and convergence monitoring
- Warm start solution injection
- Solution pool generation
Prerequisites
- Python 3.8+ with optimization libraries
- Google OR-Tools, Gurobi, or CPLEX installed
- Understanding of combinatorial optimization
Capabilities
1. Binary Variable Modeling
from ortools.linear_solver import pywraplp
def facility_location():
solver = pywraplp.Solver.CreateSolver('SCIP')
facilities = range(5)
customers = range(10)
y = {j: solver.BoolVar(f'y_{j}') for j in facilities}
x = {(i,j): solver.BoolVar(f'x_{i}_{j}')
for i in customers for j in facilities}
for i in customers:
solver.Add(sum(x[i,j] for j in facilities) == 1)
for i in customers:
for j in facilities:
solver.Add(x[i,j] <= y[j])
fixed_cost = [100, 120, 110, 130, 90]
transport_cost = [[...]]
solver.Minimize(
sum(fixed_cost[j] * y[j] for j in facilities) +
sum(transport_cost[i][j] * x[i,j]
for i in customers for j facilities)
)
solver
2. Big-M Constraint Formulation
def big_m_constraints(solver, x, y, M=1e6):
"""
Model: if x > 0 then y = 1
Linearization: x <= M * y
"""
solver.Add(x <= M * y)
z = solver.BoolVar('z')
solver.Add(a*x <= b + M*(1-z))
solver.Add(c*x <= d + M*z)
3. Logical Constraint Linearization
def logical_constraints(solver, y1, y2, y3):
"""
Common logical constraints
"""
z_and = solver.BoolVar('z_and')
solver.Add(z_and <= y1)
solver.Add(z_and <= y2)
solver.Add(z_and >= y1 + y2 - 1)
z_or = solver.BoolVar('z_or')
solver.Add(z_or >= y1)
solver.Add(z_or >= y2)
solver.Add(z_or <= y1 + y2)
solver.Add(y1 <= y2)
solver.Add(y1 + y2 + y3 <= 1)
solver.Add(y1 + y2 + y3 == 1)
4. MIP Gap Monitoring
def solve_with_gap_tracking(solver, time_limit=300):
solver.SetTimeLimit(time_limit * 1000)
solver.SetSolverSpecificParametersAsString(
"limits/gap = 0.01"
)
status = solver.Solve()
result = {
"status": status,
"objective": solver.Objective().Value(),
"best_bound": solver.Objective().BestBound(),
"gap": (solver.Objective().Value() -
solver.Objective().BestBound()) /
solver.Objective().Value() * 100,
"nodes_explored": solver.nodes(),
"time": solver.WallTime() / 1000
}
return result
5. Solution Pool Generation
def generate_solution_pool(model, max_solutions=10):
"""
Generate multiple near-optimal solutions
"""
solutions = []
for i in range(max_solutions):
status = model.solve()
if status == pywraplp.Solver.OPTIMAL:
solution = {
"objective": model.Objective().Value(),
"variables": {v.name(): v.solution_value()
for v in model.variables()}
}
solutions.append(solution)
exclude = sum(v if v.solution_value() > 0.5 else (1-v)
for v in binary_vars)
model.Add(exclude <= len(binary_vars) - 1)
else:
break
return solutions
Common Applications
Facility Location
- Warehouse location
- Hub-and-spoke networks
- Coverage problems
Scheduling
- Job shop scheduling
- Vehicle routing
- Crew scheduling
Assignment
- Task assignment
- Resource matching
- Set covering
Process Integration
This skill integrates with the following processes:
linear-programming-model-development.js
transportation-route-optimization.js
warehouse-layout-slotting-optimization.js
Output Format
{
"model_name": "Facility_Location",
"status": "optimal",
"objective_value": 4520.0,
"mip_gap": 0.0,
"solve_time_seconds": 12.5,
"nodes_explored": 1547,
"solution": {
"open_facilities": [0, 2, 4],
"assignments": {
"customer_0": "facility_2",
"customer_1": "facility_0"
}
},
"solution_pool_size": 5
}
Tools/Libraries
| Library | Description | Use Case |
|---|
| Google OR-Tools | Open source | General MIP |
| Gurobi | Commercial | High performance |
| CPLEX | Commercial | Enterprise |
| SCIP | Open source | Research |
| CBC | Open source | General purpose |
Best Practices
- Tight formulations - Prefer tight constraints over loose ones
- Valid inequalities - Add cuts when possible
- Warm starts - Provide initial solutions
- Symmetry breaking - Reduce symmetric solutions
- Variable branching - Choose good branching variables
- Time limits - Set reasonable solve times
Constraints
- Monitor solution quality via MIP gap
- Document all linearization techniques
- Test with small instances first
- Consider heuristics for large problems