COIN-OR::LEMON - Graph Library

Ignore:
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • lemon/network_simplex.h

    r659 r665  
    11481148      // Run Circulation to check if a feasible solution exists
    11491149      typedef ConstMap<Arc, Flow> ConstArcMap;
     1150      ConstArcMap zero_arc_map(0), inf_arc_map(inf_cap);
    11501151      FlowNodeMap *csup = NULL;
    11511152      bool local_csup = false;
     
    11681169          } else {
    11691170            Circulation<GR, FlowArcMap, ConstArcMap, FlowNodeMap>
    1170               circ(_graph, *_plower, ConstArcMap(inf_cap), *csup);
     1171              circ(_graph, *_plower, inf_arc_map, *csup);
    11711172            circ_result = circ.run();
    11721173          }
     
    11741175          if (_pupper) {
    11751176            Circulation<GR, ConstArcMap, FlowArcMap, FlowNodeMap>
    1176               circ(_graph, ConstArcMap(0), *_pupper, *csup);
     1177              circ(_graph, zero_arc_map, *_pupper, *csup);
    11771178            circ_result = circ.run();
    11781179          } else {
    11791180            Circulation<GR, ConstArcMap, ConstArcMap, FlowNodeMap>
    1180               circ(_graph, ConstArcMap(0), ConstArcMap(inf_cap), *csup);
     1181              circ(_graph, zero_arc_map, inf_arc_map, *csup);
    11811182            circ_result = circ.run();
    11821183          }
     
    11951196          } else {
    11961197            Circulation<RevGraph, FlowArcMap, ConstArcMap, NegNodeMap>
    1197               circ(rgraph, *_plower, ConstArcMap(inf_cap), neg_csup);
     1198              circ(rgraph, *_plower, inf_arc_map, neg_csup);
    11981199            circ_result = circ.run();
    11991200          }
     
    12011202          if (_pupper) {
    12021203            Circulation<RevGraph, ConstArcMap, FlowArcMap, NegNodeMap>
    1203               circ(rgraph, ConstArcMap(0), *_pupper, neg_csup);
     1204              circ(rgraph, zero_arc_map, *_pupper, neg_csup);
    12041205            circ_result = circ.run();
    12051206          } else {
    12061207            Circulation<RevGraph, ConstArcMap, ConstArcMap, NegNodeMap>
    1207               circ(rgraph, ConstArcMap(0), ConstArcMap(inf_cap), neg_csup);
     1208              circ(rgraph, zero_arc_map, inf_arc_map, neg_csup);
    12081209            circ_result = circ.run();
    12091210          }
  • test/min_cost_flow_test.cc

    r656 r662  
    234234    typedef int Flow;
    235235    typedef int Cost;
    236     // TODO: This typedef should be enabled if the standard maps are
    237     // reference maps in the graph concepts (See #190).
    238 /**/
    239     //typedef concepts::Digraph GR;
    240     typedef ListDigraph GR;
    241 /**/
     236    typedef concepts::Digraph GR;
    242237    checkConcept< McfClassConcept<GR, Flow, Cost>,
    243238                  NetworkSimplex<GR, Flow, Cost> >();
  • tools/dimacs-solver.cc

    r658 r661  
    9494template<class Value>
    9595void solve_min(ArgParser &ap, std::istream &is, std::ostream &,
    96                DimacsDescriptor &desc)
     96               Value infty, DimacsDescriptor &desc)
    9797{
    9898  bool report = !ap.given("q");
     
    101101  Digraph::NodeMap<Value> sup(g);
    102102  Timer ti;
    103   ti.restart();
    104   readDimacsMin(is, g, lower, cap, cost, sup, 0, desc);
     103
     104  ti.restart();
     105  readDimacsMin(is, g, lower, cap, cost, sup, infty, desc);
     106  ti.stop();
     107  Value sum_sup = 0;
     108  for (Digraph::NodeIt n(g); n != INVALID; ++n) {
     109    sum_sup += sup[n];
     110  }
     111  if (report) {
     112    std::cerr << "Sum of supply values: " << sum_sup << "\n";
     113    if (sum_sup <= 0)
     114      std::cerr << "GEQ supply contraints are used for NetworkSimplex\n\n";
     115    else
     116      std::cerr << "LEQ supply contraints are used for NetworkSimplex\n\n";
     117  }
    105118  if (report) std::cerr << "Read the file: " << ti << '\n';
     119
    106120  ti.restart();
    107121  NetworkSimplex<Digraph, Value> ns(g);
    108122  ns.lowerMap(lower).capacityMap(cap).costMap(cost).supplyMap(sup);
     123  if (sum_sup > 0) ns.problemType(ns.LEQ);
    109124  if (report) std::cerr << "Setup NetworkSimplex class: " << ti << '\n';
    110125  ti.restart();
    111   ns.run();
    112   if (report) std::cerr << "Run NetworkSimplex: " << ti << '\n';
    113   if (report) std::cerr << "\nMin flow cost: " << ns.totalCost() << '\n';
     126  bool res = ns.run();
     127  if (report) {
     128    std::cerr << "Run NetworkSimplex: " << ti << "\n\n";
     129    std::cerr << "Feasible flow: " << (res ? "found" : "not found") << '\n';
     130    if (res) std::cerr << "Min flow cost: " << ns.totalCost() << '\n';
     131  }
    114132}
    115133
     
    152170    {
    153171    case DimacsDescriptor::MIN:
    154       solve_min<Value>(ap,is,os,desc);
     172      solve_min<Value>(ap,is,os,infty,desc);
    155173      break;
    156174    case DimacsDescriptor::MAX:
Note: See TracChangeset for help on using the changeset viewer.