You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ran pyomo solve to optimize a model with one set of binary variables, using gurobi. The optimization was fine, but print(results) showed negative 'number of continuous variables'
Steps to reproduce the issue
$ command1 [options]
$ command2 [options]...
# example.py
import pyomo.environ as pyo
import numpy as np
# Problem data
flow_network = {
"f1": ("s1", "s2"),
"f2": ("s2", "s3"),
"f3": ("s2", "s3"),
"f4": ("s3", "s4"),
}
flow_cost = {"f1": 2, "f2": 7, "f3": 17, "f4": 1}
total_flow = 2
# penalty weights for binary constraints
K2 = 10
K3 = 4
# Model
model = pyo.ConcreteModel(doc="Flow Optimization Problem")
# Sets
model.nodes = pyo.Set(initialize=["s1", "s2", "s3", "s4"], doc="nodes")
model.edges = pyo.Set(initialize=flow_network.keys(), doc="edges")
# Decision Variables
model.f = pyo.Var(
model.edges, domain=pyo.Binary, doc="flow binary decision on each edge"
)
# Parameters
model.fcost = pyo.Param(
model.edges, initialize=flow_cost, doc="cost of flow on each edge", mutable=True
)
# Objective Function (minimize cost)
model.totalcost = pyo.Objective(
expr=sum(model.f[e] * model.fcost[e] for e in model.edges) * total_flow
+ K2 * model.f["f2"]
+ K3 * model.f["f3"],
sense=pyo.minimize,
)
# Constraints
# Disjunction Constraint
def disjunction_rule(model):
return model.f["f2"] + model.f["f3"] == 1
model.disjunction = pyo.Constraint(rule=disjunction_rule, doc="disjunction constraint")
# Flow Conservation Constraints
def flow_conservation_rule(model, node):
inflow = sum(model.f[edge] for edge in model.edges if flow_network[edge][1] == node)
outflow = sum(
model.f[edge] for edge in model.edges if flow_network[edge][0] == node
)
if node == "s1":
return outflow * total_flow == total_flow # source node
elif node == "s4":
return inflow * total_flow == total_flow # sink node
else:
return inflow == outflow # intermediate nodes
model.flow_conservation = pyo.Constraint(
model.nodes, rule=flow_conservation_rule, doc="flow conservation constraints"
)
model.xrd0 = pyo.Constraint(
expr=model.f["f2"] + model.f["f3"] == 1, doc="f2 or f3 constraint"
)
# Solve the model using a solver
solver = pyo.SolverFactory("gurobi", solver_io="python")
results = solver.solve(model, tee=True)
model.pprint()
print(results)
Error Message
$ # Gurobi Optimizer version 11.0.0 build v11.0.0rc2 (linux64 - "Ubuntu 22.04.3 LTS")CPU model: 13th Gen Intel(R) Core(TM) i7-1365U, instruction set [SSE2|AVX|AVX2]Thread count: 6 physical cores, 12 logical processors, using up to 12 threadsOptimize a model with 6 rows, 4 columns and 12 nonzerosModel fingerprint: 0x504aa310Variable types: 0 continuous, 4 integer (4 binary)Coefficient statistics: Matrix range [1e+00, 2e+00] Objective range [2e+00, 4e+01] Bounds range [1e+00, 1e+00] RHS range [1e+00, 2e+00]Presolve removed 6 rows and 4 columnsPresolve time: 0.00sPresolve: All rows and columns removedExplored 0 nodes (0 simplex iterations) in 0.01 seconds (0.00 work units)Thread count was 1 (of 12 available processors)Solution count 1: 30 Optimal solution found (tolerance 1.00e-04)Best objective 3.000000000000e+01, best bound 3.000000000000e+01, gap 0.0000%Flow Optimization Problem 2 Set Declarations edges : edges Size=1, Index=None, Ordered=Insertion Key : Dimen : Domain : Size : Members None : 1 : Any : 4 : {'f1', 'f2', 'f3', 'f4'} nodes : nodes Size=1, Index=None, Ordered=Insertion Key : Dimen : Domain : Size : Members None : 1 : Any : 4 : {'s1', 's2', 's3', 's4'} 1 Param Declarations fcost : cost of flow on each edge Size=4, Index=edges, Domain=Any, Default=None, Mutable=True Key : Value f1 : 2 f2 : 7 f3 : 17 f4 : 1 1 Var Declarations f : flow binary decision on each edge Size=4, Index=edges Key : Lower : Value : Upper : Fixed : Stale : Domain f1 : 0 : 1.0 : 1 : False : False : Binary f2 : 0 : 1.0 : 1 : False : False : Binary f3 : 0 : 0.0 : 1 : False : False : Binary f4 : 0 : 1.0 : 1 : False : False : Binary 1 Objective Declarations totalcost : Size=1, Index=None, Active=True Key : Active : Sense : Expression None : True : minimize : (fcost[f1]*f[f1] + fcost[f2]*f[f2] + fcost[f3]*f[f3] + fcost[f4]*f[f4])*2 + 10*f[f2] + 4*f[f3] 3 Constraint Declarations disjunction : disjunction constraint Size=1, Index=None, Active=True Key : Lower : Body : Upper : Active None : 1.0 : f[f2] + f[f3] : 1.0 : True flow_conservation : flow conservation constraints Size=4, Index=nodes, Active=True Key : Lower : Body : Upper : Active s1 : 2.0 : 2*f[f1] : 2.0 : True s2 : 0.0 : f[f1] - (f[f2] + f[f3]) : 0.0 : True s3 : 0.0 : f[f2] + f[f3] - f[f4] : 0.0 : True s4 : 2.0 : 2*f[f4] : 2.0 : True xrd0 : f2 or f3 constraint Size=1, Index=None, Active=True Key : Lower : Body : Upper : Active None : 1.0 : f[f2] + f[f3] : 1.0 : True 8 Declarations: nodes edges f fcost totalcost disjunction flow_conservation xrd0Problem: - Name: unknown Lower bound: 30.0 Upper bound: 30.0 Number of objectives: 1 Number of constraints: 6 Number of variables: 4 Number of binary variables: 4 Number of integer variables: 4 Number of continuous variables: -4 Number of nonzeros: 12 Sense: 1 Number of solutions: 1Solver: - Name: Gurobi 11.00 Status: ok Wallclock time: 0.015126943588256836 Termination condition: optimal Termination message: Model was solved to optimality (subject to tolerances), and an optimal solution is available.Solution: - number of solutions: 0 number of solutions displayed: 0
Information on your system
Pyomo version: 6.7.1
Python version: 3.9.18
Operating system: Linux
How Pyomo was installed (PyPI, conda, source): conda
Solver (if applicable): gurobi
Additional information
The text was updated successfully, but these errors were encountered:
Summary
Ran pyomo solve to optimize a model with one set of binary variables, using gurobi. The optimization was fine, but print(results) showed negative 'number of continuous variables'
Steps to reproduce the issue
Error Message
Information on your system
Pyomo version: 6.7.1
Python version: 3.9.18
Operating system: Linux
How Pyomo was installed (PyPI, conda, source): conda
Solver (if applicable): gurobi
Additional information
The text was updated successfully, but these errors were encountered: