bchfcnet.gms : Fixed Cost Network Flow Problem with Cuts using BCH Facility

Description

Francisco Ortega, Laurence Wolsey
A branch-and-cut algorithm for the single-commodity, uncapacitated,
fixed-charge network flow problem.
Networks 41 (2003), no. 3, 143--158.

https://dial.uclouvain.be/pr/boreal/en/object/boreal%3A4138

Michael Bussieck, Hua Ni, Alexey Koptsevich
Technical Note: Solving the Steiner Tree Problem with GAMS Branch-and-Cut Facility.
Technical report, GAMS Development Corp. 2003.

Keywords: mixed integer linear programming, minimum cost flow problem,
          branch and cut and heuristic facility, network optimization,
          fixed charge


Large Model of Type : MIP


Category : GAMS Model library


Main file : bchfcnet.gms   includes :  bchdicut.inc  berlin2.inc

$title Fixed Cost Network Flow Problem with Cuts using BCH Facility (BCHFCNET,SEQ=287)

$onText
Francisco Ortega, Laurence Wolsey
A branch-and-cut algorithm for the single-commodity, uncapacitated,
fixed-charge network flow problem.
Networks 41 (2003), no. 3, 143--158.

https://dial.uclouvain.be/pr/boreal/en/object/boreal%3A4138

Michael Bussieck, Hua Ni, Alexey Koptsevich
Technical Note: Solving the Steiner Tree Problem with GAMS Branch-and-Cut Facility.
Technical report, GAMS Development Corp. 2003.

Keywords: mixed integer linear programming, minimum cost flow problem,
          branch and cut and heuristic facility, network optimization,
          fixed charge
$offText

$eolCom //

Set
   n          'nodes'
   s          'sub arcs index'
   arc(n,n,s) 'arcs';

Alias (n,nn,m), (s,ss);

Parameter
   demand(n)    'node demand'
   fcost(n,n,s) 'fixed cost'
   vcost(n,n,s) 'variable cost'
   xupp(n,n,s)  'upper bound on flow'
   yupp(n,n,s)  'upper bound on build';

Scalar
   u       'sum of demand'
   usetree 'whether the additional equation is present' / 0 /
   usett1  'same'                                       / 0 /
   usett2  'same'                                       / 0 /;

$include berlin2.inc

arc(m,n,s)$(fcost(m,n,s) or vcost(m,n,s) or xupp(m,n,s) or yupp(m,n,s)) = yes;

* Export data for use in the cut generator
execute_unload 'net.gdx', nn ss arc demand fcost vcost u usetree usett1 usett2 xupp yupp;

Variable
   cost
   x(n,n,s) 'flow over the arc'
   y(n,n,s) 'usage of the arc';

Positive Variable x;
Binary   Variable y;

Equation
   obj       'objective'
   tt2(n)    'no flow through non-demanding nodes'
   bf(n,n,s) 'binary forcing constraints'
   bal(n)    'flow conservation constraints'
   tree(n)   'outflow via one arc only'
   tt1(n)    'demanding nodes are fed via one arc only';

obj..     sum(arc, vcost(arc)*x(arc) + fcost(arc)*y(arc)) =e= cost;

bal(n)..  sum(arc(m,n,s), x(m,n,s)) - sum(arc(n,m,s), x(n,m,s)) =e= demand(n);

bf(arc).. x(arc) =l= xupp(arc)*y(arc);

tree(n)$usetree.. sum(arc(n,m,s), y(n,m,s)) =l= 1;

tt1(n)$(usett1 and demand(n) > 0).. sum((m,s), y(m,n,s)) =e= 1;

tt2(n)$(usett2 and demand(n) = 0).. sum((m,s), y(m,n,s)) =l= 1;

Model master / all /;

$ifThenI %system.mip% == cplex $set solver cplex
$else
$abort 'BCH Facility not available for MIP solver %system.mip%.'
$endif

master.optFile = 1;
$onEcho > %solver%.opt
mipInterval 1
userCutCall bchdicut.inc minlp baron optCr 0.0 optCa 0.5 resLim 10 optFile = 1 lo = 2 --cplex = 1
userCutFirst 100
$offEcho

$onEcho > baron.opt
iSolTol 0.99
numSol 20
gdxOut bchdicut
firstFeas 1
$offEcho

xupp(arc) = min(u,xupp(arc));
x.up(arc) = xupp(arc);
y.up(arc)$yupp(arc) = yupp(arc);

master.optCr = 0;
solve master minimizing cost using mip;