[Dip-tickets] [Dip] #82: Infinite loop in DIP
Dip
coin-trac at coin-or.org
Mon Aug 15 21:46:20 EDT 2011
#82: Infinite loop in DIP
----------------------+-----------------------------------------------------
Reporter: mosu001 | Owner:
Type: defect | Status: new
Priority: major | Version: trunk
Resolution: | Keywords:
----------------------+-----------------------------------------------------
Comment (by mosu001):
Here is another file that has a similar error, but without the .relaxation
constraints. This hangs in Dippy/DIP, but solves in Gurobi:
import math
import coinor.pulp as pulp
from pulp import *
import coinor.dippy as dippy
NODES = ['O', 'A', 'B', 'C', 'D', 'E', 'T']
coords = {
'O': (0, 1),
'A': (1, 2),
'B': (2, 1),
'C': (1.75, 0),
'D': (4, 1),
'E': (3.75, 0),
'T': (5, 1.5),
}
DIR_ARCS = [
('O', 'A'),
('O', 'B'),
('O', 'C'),
('A', 'B'),
('A', 'D'),
('B', 'C'),
('B', 'D'),
('B', 'E'),
('C', 'E'),
('D', 'T'),
('E', 'D'),
('E', 'T'),
]
UNDIR_ARCS = []
ARCS = DIR_ARCS + UNDIR_ARCS + [(n, m) for (m, n) in UNDIR_ARCS]
cost = {
('O', 'A'):2,
('O', 'B'):5,
('O', 'C'):4,
('A', 'B'):2,
('A', 'D'):7,
('B', 'C'):1,
('B', 'D'):4,
('B', 'E'):3,
('C', 'E'):4,
('D', 'T'):5,
('E', 'D'):1,
('E', 'T'):7,
}
capacity = {
('O', 'A'):5,
('O', 'B'):7,
('O', 'C'):4,
('A', 'B'):1,
('A', 'D'):3,
('B', 'C'):2,
('B', 'D'):5,
('B', 'E'):5,
('C', 'E'):4,
('D', 'T'):9,
('E', 'D'):1,
('E', 'T'):6,
}
COMMODITIES = ['F1', 'F2', 'F3', 'F4', 'F5']
flow = {
'F1': 3,
'F2': 2,
'F3': 2,
'F4': 2,
'F5': 3,
'F6': 2,
}
TOL = 1e-6
prob = dippy.DipProblem("Multi-Commodity Flow")
flow_vars = LpVariable.dicts("Flows", [(a, c) for a in ARCS for c in
COMMODITIES],
cat=LpBinary)
prob += lpSum(cost[a] * flow[c] * flow_vars[(a, c)] for a in DIR_ARCS for
c in COMMODITIES) \
+ lpSum(cost[(m, n)] * flow[c] * (flow_vars[((m, n), c)] +
flow_vars[((n, m), c)]) for (m, n) in UNDIR_ARCS for c in COMMODITIES)
for c in COMMODITIES:
prob += lpSum(flow_vars[((m, n), c)] for (m, n) in ARCS if m == 'O')
== 1
for c in COMMODITIES:
prob += lpSum(flow_vars[((m, n), c)] for (m, n) in ARCS if n == 'T')
== 1
for c in COMMODITIES:
for p in NODES:
if (p != 'O') and (p != 'T'):
prob += lpSum(flow_vars[((m, n), c)] for (m, n) in ARCS if n
== p) == \
lpSum(flow_vars[((m, n), c)] for (m, n) in ARCS if m
== p)
for a in DIR_ARCS:
prob += lpSum(flow[c] * flow_vars[(a, c)] for c in COMMODITIES) <=
capacity[a]
for (m, n) in UNDIR_ARCS:
prob += lpSum(flow[c] * (flow_vars[((m, n), c)] + flow_vars[((n, m),
c)]) for c in COMMODITIES) <= capacity[(m, n)]
prob.writeLP('mc4.lp')
dippy.Solve(prob, {
'TolZero': '%s' % TOL,
})
--
Ticket URL: <https://projects.coin-or.org/Dip/ticket/82#comment:1>
Dip <https://projects.coin-or.org/Dip>
An extensible software framework for implementing decompositon-based bounding algorithms for use in solving large-scale discrete optimization problems.
More information about the Dip-tickets
mailing list