NewMapWin has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.
2 * demo/lp_demo.cc - Part of LEMON, a generic C++ optimization library
4 * Copyright (C) 2005 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);