pyomo
Skill22 starsChanged 9 months agoMITView on GitHub
Python Optimization Modeling Objects. A high-level framework for formulating, solving, and analyzing optimization models. Supports Linear Programming (LP), Mixed-Integer Linear Programming (MILP), and Non-Linear Programming (NLP). Part of the COIN-OR project. Use for mathematical optimization, linear programming, mixed-integer programming, non-linear programming, strategic planning, process engineering, energy systems, supply chain optimization, stochastic programming, and solver integration with IPOPT, SCIP, Gurobi, CPLEX, or GLPK.
- Installs packages
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 7 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 26
Non-Linear Programming (NLP): When your constraints or objectives involve smooth curves (e.g., x², log(x)).
- Distinctive: line 28
Custom Solver Integration: When you need to use specific solvers like IPOPT, SCIP, or Baron.
- Very specific: line 103
Use pyo.value(): - Always wrap variables in pyo.value(model.x) to get their numerical result after solving.
- Very specific: line 104
Check Solver Status: - Verify the solver reached an optimal solution using results.solver.termination_condition.
- Very specific: line 106
Specify Solver Options: - Use solver.options['tm_limit'] = 60 (or similar depending on the solver) to manage execution time.
- Distinctive: line 107
Use model.dual: - If the solver supports it, enable dual suffix to get shadow prices (important for economic analysis).
- Very specific: line 111
Don't use Python math functions: - Use pyo.log(), pyo.exp(), pyo.sqrt() instead of math.log() or np.log() inside expressions.
- Distinctive: line 264
Always check why the solver stopped.
- Distinctive: line 278
If your NLP model has multiple local minima, IPOPT might get stuck.
- Distinctive: line 296
Always scale your problem - variables and constraints should be within similar orders of magnitude
- Very specific: line 297
Use pyo.value() to extract numerical results from variables after solving
- Distinctive: line 298
Check solver termination conditions to verify optimality or diagnose issues
- Very specific: line 299
Use pyo.Set and pyo.Param for organizing data in complex models
- Very specific: line 301
Use Pyomo-compatible functions (pyo.log(), pyo.exp(), etc.) instead of NumPy/math functions in expressions
- Very specific: line 303
Avoid non-smooth functions like abs() or max() - use reformulations
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Pyomo - Mathematical Optimization Modeling
Pyomo allows you to define optimization problems using a natural mathematical syntax (Sets, Parameters, Variables, Constraints). It decouples the model from the solver, allowing the same model to be solved by different engines without code changes.
FIRST: Verify Prerequisites
pip install pyomo
# Also install a solver (e.g., GLPK for linear/integer problems)
# Conda: conda install -c conda-forge glpk ipoptWhen to Use
- Strategic Planning: Long-term resource allocation or investment planning.
- Process Engineering: Optimizing chemical plants or refinery operations (Non-linear).
- Energy Systems: Power grid dispatch and unit commitment problems.
- Supply Chain Optimization: Multi-period, multi-commodity flow problems.
- Non-Linear Programming (NLP): When your constraints or objectives involve smooth curves (e.g., x², log(x)).
- Stochastic Programming: Modeling uncertainty in optimization.
- Custom Solver Integration: When you need to use specific solvers like IPOPT, SCIP, or Baron.
Reference Documentation
Official docs: http://www.pyomo.org/
GitHub: https://github.com/Pyomo/pyomo
Search patterns: pyo.ConcreteModel, pyo.Constraint, pyo.Objective, pyo.SolverFactory
Core Principles
Concrete vs. Abstract Models
- ConcreteModel: Data is defined at the time the model is built (most common in Python/Data Science).
- AbstractModel: The structure is defined first, and data is loaded later (standard for large-scale industrial models).
Components
- Var: Unknowns the solver needs to find.
- Set/Param: Data that defines the problem instance.
- Objective: The function to minimize or maximize.
- Constraint: Rules the variables must follow.
Solvers
Pyomo does not have its own solver. It requires external solvers (like glpk for LP/MIP or ipopt for NLP) installed on the system.
Quick Reference
Installation
pip install pyomo
# Also install a solver (e.g., GLPK for linear/integer problems)
# Conda: conda install -c conda-forge glpk ipoptStandard Imports
import pyomo.environ as pyo
from pyomo.opt import SolverFactoryBasic Pattern - Simple Linear Model (Concrete)
import pyomo.environ as pyo
# 1. Create Model
model = pyo.ConcreteModel()
# 2. Define Variables
model.x = pyo.Var(within=pyo.NonNegativeReals)
model.y = pyo.Var(within=pyo.NonNegativeReals)
# 3. Define Objective (Minimize x + 2*y)
model.obj = pyo.Objective(expr=model.x + 2*model.y, sense=pyo.minimize)
# 4. Define Constraints
model.con1 = pyo.Constraint(expr=3*model.x + 4*model.y >= 12)
model.con2 = pyo.Constraint(expr=2*model.x + 5*model.y >= 10)
# 5. Solve
solver = pyo.SolverFactory('glpk')
results = solver.solve(model)
# 6. Access Results
print(f"x = {pyo.value(model.x)}, y = {pyo.value(model.y)}")Critical Rules
✅ DO
- Scale your problem - Like all optimization, Pyomo works best if variables and constraints are within a similar order of magnitude (e.g., 0.1 to 100).
- Use pyo.value() - Always wrap variables in
pyo.value(model.x)to get their numerical result after solving. - Check Solver Status - Verify the solver reached an optimal solution using
results.solver.termination_condition. - Use pyo.Set and pyo.Param - For complex models, organize data using these components rather than raw Python lists/dicts.
- Specify Solver Options - Use
solver.options['tm_limit'] = 60(or similar depending on the solver) to manage execution time. - Use model.dual - If the solver supports it, enable dual suffix to get shadow prices (important for economic analysis).
❌ DON'T
- Don't use Python math functions - Use
pyo.log(),pyo.exp(),pyo.sqrt()instead ofmath.log()ornp.log()inside expressions. - Don't use if statements in constraints - Constraints must be algebraic. Use "Big-M" notation or logical reformulations for conditional logic.
- Avoid "Hard" non-linearities - Functions like
abs(x)ormax(x, y)are non-smooth and can break many solvers. Use reformulations. - Don't forget the Intercept/Constant - Constraints like
x + y = 10are fine, but ensure your units are consistent.
Anti-Patterns (NEVER)
import pyomo.environ as pyo
import numpy as np
# ❌ BAD: Using NumPy/Math functions in constraints
# model.con = pyo.Constraint(expr=np.sin(model.x) <= 0.5)
# ✅ GOOD: Use Pyomo-compatible functions
model.con = pyo.Constraint(expr=pyo.sin(model.x) <= 0.5)
# ❌ BAD: Using Python IF for conditional constraints
# if model.x > 10:
# model.con = pyo.Constraint(expr=model.y <= 5)
# ✅ GOOD: Using Big-M notation (for binary variable z)
# y <= 5 + M * (1 - z)
# x >= 10 - M * (1 - z)
# ❌ BAD: Printing a variable directly
# print(model.x) # Returns a reference object, not a number!
# ✅ GOOD: Use value()
print(pyo.value(model.x))Modeling with Sets and Indices
Large-Scale Model Construction
model = pyo.ConcreteModel()
# Data
products = ['A', 'B', 'C']
profit = {'A': 10, 'B': 20, 'C': 15}
limit = 100
# Components
model.P = pyo.Set(initialize=products)
model.x = pyo.Var(model.P, within=pyo.NonNegativeReals)
# Indexed Objective
def obj_rule(model):
return sum(profit[p] * model.x[p] for p in model.P)
model.obj = pyo.Objective(rule=obj_rule, sense=pyo.maximize)
# Indexed Constraint
def limit_rule(model):
return sum(model.x[p] for p in model.P) <= limit
model.con = pyo.Constraint(rule=limit_rule)Non-Linear Programming (NLP)
Using the IPOPT Solver
# Solving: Minimize (x-2)^2 + (y-2)^2
model = pyo.ConcreteModel()
model.x = pyo.Var(initialize=0) # Initialization is CRUCIAL for NLP
model.y = pyo.Var(initialize=0)
model.obj = pyo.Objective(expr=(model.x - 2)**2 + (model.y - 2)**2)
# Constraint: x^2 + y <= 1
model.con = pyo.Constraint(expr=model.x**2 + model.y <= 1)
# Solve with IPOPT
solver = pyo.SolverFactory('ipopt')
solver.solve(model)Mixed-Integer Linear Programming (MILP)
Discrete Decisions
# Binary variable: 1 if we open a warehouse, 0 otherwise
model.use_warehouse = pyo.Var(within=pyo.Binary)
# Integer variable: Number of trucks to buy
model.num_trucks = pyo.Var(within=pyo.NonNegativeIntegers)
# Conditional logic: If warehouse is not used, trucks must be 0
# trucks <= Capacity * use_warehouse
model.cap_con = pyo.Constraint(expr=model.num_trucks <= 100 * model.use_warehouse)Practical Workflows
1. Diet Problem (Classic Linear Programming)
def solve_diet(foods, nutrients, costs, requirements):
model = pyo.ConcreteModel()
model.F = pyo.Set(initialize=foods)
model.N = pyo.Set(initialize=nutrients)
model.x = pyo.Var(model.F, within=pyo.NonNegativeReals)
# Minimize cost
model.obj = pyo.Objective(expr=sum(costs[f] * model.x[f] for f in model.F))
# Meet nutrient requirements
def nutrient_rule(model, n):
return sum(nutrients[f][n] * model.x[f] for f in model.F) >= requirements[n]
model.con = pyo.Constraint(model.N, rule=nutrient_rule)
pyo.SolverFactory('glpk').solve(model)
return {f: pyo.value(model.x[f]) for f in model.F}2. Blending Problem (Chemical/Process Engineering)
# Balancing component fractions in a mixture
# Note: Often becomes non-linear (NLP) if both flow and fraction are variables
def blend_optimization(inputs, target_purity):
model = pyo.ConcreteModel()
# ... model setup ...
# con: sum(flow[i] * purity[i]) / sum(flow[i]) == target_purity
# becomes: sum(flow[i] * purity[i]) == target_purity * sum(flow[i]) (Linearized)Performance Optimization
Solver Choice
- GLPK/CBC: Good for free/open-source LP/MIP.
- Gurobi/CPLEX: Industrial standards (extremely fast for large MIP).
- IPOPT: Best for smooth Non-linear (NLP).
Warm Starts
For iterative optimizations, use the previous solution as a starting point.
# For NLP solvers like IPOPT
model.x.set_value(prev_x_value)
solver.solve(model)Common Pitfalls and Solutions
Termination Condition
Always check why the solver stopped.
from pyomo.opt import TerminationCondition
results = solver.solve(model)
if results.solver.termination_condition == TerminationCondition.optimal:
print("Success")
elif results.solver.termination_condition == TerminationCondition.infeasible:
print("Check your constraints!")Non-Convexity in NLP
If your NLP model has multiple local minima, IPOPT might get stuck.
# ✅ Solution:
# 1. Provide multiple different initial guesses (multistart).
# 2. Use a global solver like BARON or SCIP.Indexing with Variables
model.x[model.y] where y is a Var is illegal.
# ✅ Solution: Use model.AddElement or binary variable reformulations.Best Practices
- Always scale your problem - variables and constraints should be within similar orders of magnitude
- Use
pyo.value()to extract numerical results from variables after solving - Check solver termination conditions to verify optimality or diagnose issues
- Use
pyo.Setandpyo.Paramfor organizing data in complex models - Initialize variables for NLP problems - good starting points are crucial
- Use Pyomo-compatible functions (
pyo.log(),pyo.exp(), etc.) instead of NumPy/math functions in expressions - Reformulate conditional logic using Big-M notation or binary variables
- Avoid non-smooth functions like
abs()ormax()- use reformulations - Enable dual suffix for shadow prices when economic analysis is needed
- Set solver time limits and options appropriately for your problem size
Pyomo is the ultimate tool for turning high-level mathematical abstractions into solved business and scientific problems. Its ability to bridge the gap between algebraic modeling and high-performance solvers makes it the foundation of modern prescriptive analytics.
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- hua695/MathModeling-Skills-Arsenal★ 1274% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository69 other files it gives its agents.
- aseSkill
- astropySkill
- biopythonSkill
- chempySkill
- cobrapySkill
- dask-optimizationSkill
- daskSkill
- dowhySkill
- duckdbSkill
- example-skillSkill
- fastapi-streamlitSkill
- geopandasSkill
- gmsh-meshioSkill
- h5pySkill
- jax-pdeSkill
- jaxSkill
- lifelinesSkill
- matplotlib-proSkill
- matplotlibSkill
- mdanalysisSkill
- mneSkill
- networkxSkill
- numbaSkill
- numpy-low-levelSkill
- numpySkill
- openbabelSkill
- opencvSkill
- ortoolsSkill
- pandas-performanceSkill
- pennylaneSkill
- photutilsSkill
- plotlySkill
- polarsSkill
- prodySkill
- pydicomSkill
- pymcSkill
- pyprojSkill
- pysamSkill
- pyscfSkill
- pytorch-deploymentSkill
- pytorch-geometricSkill
- pytorch-researchSkill
- pytorchSkill
- qiskit-hardwareSkill
- qiskitSkill
- qutipSkill
- rasterioSkill
- rdkitSkill
- scanpySkill
- scikit-bioSkill
- scikit-imageSkill
- scikit-learnSkill
- scikit-videoSkill
- scipySkill
- seabornSkill
- shapelySkill
- simpySkill
- sklearn-advancedSkill
- sklearn-explainabilitySkill
- sktime-tsfreshSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

