Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
2 * demo/lp_demo.cc - Part of LEMON, a generic C++ optimization library
4 * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Research Group on Combinatorial Optimization, EGRES).
7 * Permission to use, modify and distribute this software is granted
8 * provided that this copyright notice appears in all copies. For
9 * precise terms see the accompanying LICENSE file.
11 * This software is provided "AS IS" with no warranty of any kind,
12 * express or implied, and with no claim as to its suitability for any
19 /// \brief A program demonstrating the LEMON LP solver interface
21 /// This program is a simple application of the LEMON LP solver
22 /// interface: we formulate a linear programming (LP) problem and then
23 /// solve it using the underlying solver (GLPK or CPLEX for
24 /// example). For the detailed documentation of the LEMON LP solver
25 /// interface read \ref lemon::LpSolverBase "this".
27 /// \include lp_demo.cc
33 using namespace lemon;
37 //The following example is taken from the documentation of the GLPK library.
38 //See it in the GLPK reference manual and among the GLPK sample files (sample.c)
40 //A default solver is taken
46 std::cout<<"A program demonstrating the LEMON LP solver interface"<<std::endl;
47 std::cout<<"Solver used: "<<default_solver_name<<std::endl;
49 //This will be a maximization
52 //We add coloumns (variables) to our problem
58 lp.addRow(x1+x2+x3 <=100);
59 lp.addRow(10*x1+4*x2+5*x3<=600);
60 lp.addRow(2*x1+2*x2+6*x3<=300);
61 //Nonnegativity of the variables
62 lp.colLowerBound(x1, 0);
63 lp.colLowerBound(x2, 0);
64 lp.colLowerBound(x3, 0);
66 lp.setObj(10*x1+6*x2+4*x3);
68 //Call the routine of the underlying LP solver
72 if (lp.primalStatus()==LpSolverBase::OPTIMAL){
73 std::cout<<"Optimal solution found!"<<std::endl;
74 printf("optimum value = %g; x1 = %g; x2 = %g; x3 = %g\n",
76 lp.primal(x1), lp.primal(x2), lp.primal(x3));
79 std::cout<<"Optimal solution not found!"<<std::endl;
82 //End of LEMON style code
84 //Here comes the same problem written in C using GLPK API routines
87 // int ia[1+1000], ja[1+1000];
88 // double ar[1+1000], Z, x1, x2, x3;
89 // s1: lp = lpx_create_prob();
90 // s2: lpx_set_prob_name(lp, "sample");
91 // s3: lpx_set_obj_dir(lp, LPX_MAX);
92 // s4: lpx_add_rows(lp, 3);
93 // s5: lpx_set_row_name(lp, 1, "p");
94 // s6: lpx_set_row_bnds(lp, 1, LPX_UP, 0.0, 100.0);
95 // s7: lpx_set_row_name(lp, 2, "q");
96 // s8: lpx_set_row_bnds(lp, 2, LPX_UP, 0.0, 600.0);
97 // s9: lpx_set_row_name(lp, 3, "r");
98 // s10: lpx_set_row_bnds(lp, 3, LPX_UP, 0.0, 300.0);
99 // s11: lpx_add_cols(lp, 3);
100 // s12: lpx_set_col_name(lp, 1, "x1");
101 // s13: lpx_set_col_bnds(lp, 1, LPX_LO, 0.0, 0.0);
102 // s14: lpx_set_obj_coef(lp, 1, 10.0);
103 // s15: lpx_set_col_name(lp, 2, "x2");
104 // s16: lpx_set_col_bnds(lp, 2, LPX_LO, 0.0, 0.0);
105 // s17: lpx_set_obj_coef(lp, 2, 6.0);
106 // s18: lpx_set_col_name(lp, 3, "x3");
107 // s19: lpx_set_col_bnds(lp, 3, LPX_LO, 0.0, 0.0);
108 // s20: lpx_set_obj_coef(lp, 3, 4.0);
109 // s21: ia[1] = 1, ja[1] = 1, ar[1] = 1.0; /* a[1,1] = 1 */
110 // s22: ia[2] = 1, ja[2] = 2, ar[2] = 1.0; /* a[1,2] = 1 */
111 // s23: ia[3] = 1, ja[3] = 3, ar[3] = 1.0; /* a[1,3] = 1 */
112 // s24: ia[4] = 2, ja[4] = 1, ar[4] = 10.0; /* a[2,1] = 10 */
113 // s25: ia[5] = 3, ja[5] = 1, ar[5] = 2.0; /* a[3,1] = 2 */
114 // s26: ia[6] = 2, ja[6] = 2, ar[6] = 4.0; /* a[2,2] = 4 */
115 // s27: ia[7] = 3, ja[7] = 2, ar[7] = 2.0; /* a[3,2] = 2 */
116 // s28: ia[8] = 2, ja[8] = 3, ar[8] = 5.0; /* a[2,3] = 5 */
117 // s29: ia[9] = 3, ja[9] = 3, ar[9] = 6.0; /* a[3,3] = 6 */
118 // s30: lpx_load_matrix(lp, 9, ia, ja, ar);
119 // s31: lpx_simplex(lp);
120 // s32: Z = lpx_get_obj_val(lp);
121 // s33: x1 = lpx_get_col_prim(lp, 1);
122 // s34: x2 = lpx_get_col_prim(lp, 2);
123 // s35: x3 = lpx_get_col_prim(lp, 3);
124 // s36: printf("\nZ = %g; x1 = %g; x2 = %g; x3 = %g\n", Z, x1, x2, x3);
125 // s37: lpx_delete_prob(lp);