|
From: | Zong, Yi |
Subject: | [Help-glpk] help! I need a small example to use GLPK java for MIP |
Date: | Fri, 20 Nov 2009 21:09:19 +0300 |
To it may concern, I want to use GLPK-java to solve a simple MIP. // Maximize z = 17 * x1 + 12* x2 // subject to // 10*x1+7*x2 <= 40 // x1+ x2 <= 5 // where, // 0.0 <= x1 integer // 0.0 <= x2 integer // result: max=68: x1=4, x2=0; ?? The code is shown as following. The problem is how I can get integer solution? The result I got is: Problem created * 0: obj = 0.000000000e+000 infeas = 0.000e+000 (0) * 2: obj = 6.833333333e+001 infeas = 0.000e+000 (0) OPTIMAL SOLUTION FOUND z = 68.33333333333334 x1 = 1.6666666666666676 x2 = 3.3333333333333326 %%%%%%%%%%%%%%%%%%source code%%%%%%%%%%%%%% import java.io.File; import java.io.IOException; import org.gnu.glpk.GLPK; import org.gnu.glpk.GLPKConstants; import org.gnu.glpk.SWIGTYPE_p_double; import org.gnu.glpk.SWIGTYPE_p_int; import org.gnu.glpk.glp_prob; import org.gnu.glpk.glp_smcp; //import org.gnu.glpk.glp_intopt; //import org.gnu.glpk.glp_iocp; publicclassInteger1 { // Maximize z = 17 * x1 + 12* x2 // subject to // 10*x1+7*x2 <= 40 // x1+ x2 <= 5 // where, // 0.0 <= x1 integer // 0.0 <= x2 integer // result: max=68: x1=4, x2=0; ?? static { try { // try to load Linux library System.loadLibrary( "glpk_java" ); } catch (UnsatisfiedLinkErrore) { // try to load Windows library System.loadLibrary("glpk_4_39_java"); } } publicstaticvoidmain(String[] arg) { glp_probmip; glp_smcpparm; SWIGTYPE_p_intind; SWIGTYPE_p_doubleval; intret; // Create problem mip = GLPK.glp_create_prob(); System.out.println("Problem created"); GLPK.glp_set_prob_name(mip, "myProblem"); // Define columns GLPK.glp_add_cols(mip, 2); GLPK.glp_set_col_name(mip, 1, "x1"); GLPK.glp_set_col_kind(mip, 1, GLPKConstants.GLP_IV); GLPK.glp_set_col_bnds(mip, 1, GLPKConstants.GLP_LO, 0,0); GLPK.glp_set_col_name(mip, 2, "x2"); GLPK.glp_set_col_kind(mip, 2, GLPKConstants.GLP_IV); GLPK.glp_set_col_bnds(mip, 2, GLPKConstants.GLP_LO, 0,0); // Create constraints GLPK.glp_add_rows(mip, 3); GLPK.glp_set_row_name(mip, 1, "c1"); GLPK.glp_set_row_bnds(mip, 1, GLPKConstants.GLP_UP, 0, 40); ind = GLPK.new_intArray(3); GLPK.intArray_setitem(ind, 1, 1); GLPK.intArray_setitem(ind, 2, 2); val = GLPK.new_doubleArray(3); GLPK.doubleArray_setitem(val, 1, 10); GLPK.doubleArray_setitem(val, 2, 7); GLPK.glp_set_mat_row(mip, 1, 2, ind, val); // GLPK.glp_set_row_name(mip, 2, "c2"); GLPK.glp_set_row_bnds(mip, 2, GLPKConstants.GLP_UP, 0, 5); ind = GLPK.new_intArray(3); GLPK.intArray_setitem(ind, 1, 1); GLPK.intArray_setitem(ind, 2, 2); val = GLPK.new_doubleArray(3); GLPK.doubleArray_setitem(val, 1, 1); GLPK.doubleArray_setitem(val, 2, 1); GLPK.glp_set_mat_row(mip, 2, 2, ind, val); // Define objective GLPK.glp_set_obj_name(mip, "z"); GLPK.glp_set_obj_dir(mip, GLPKConstants.GLP_MAX); // GLPK.glp_set_obj_coef(mip, 0, 0); GLPK.glp_set_obj_coef(mip, 1, 17); GLPK.glp_set_obj_coef(mip, 2, 12); // solve model parm = newglp_smcp(); GLPK.glp_init_smcp(parm); ret = GLPK.glp_simplex(mip, parm); // Retrieve solution if (ret == 0) { write_lp_solution(mip); } else { System.out.println("The problem could not be solved"); }; // free memory GLPK.glp_delete_prob(mip); } /** *writesimplexsolution address@hidden */ staticvoidwrite_lp_solution(glp_probmip) { inti; intn; Stringname; doubleval; //int val; name = GLPK.glp_get_obj_name(mip); val = GLPK.glp_get_obj_val(mip); //val = GLPK.glp_mip_obj_val(mip); System.out.print(name); System.out.print(" = "); System.out.println(val); n = GLPK.glp_get_num_cols(mip); for(i=1; i <= n; i++) { name = GLPK.glp_get_col_name(mip, i); val = GLPK.glp_get_col_prim(mip, i); //val = GLPK.glp_mip_col_val(mip, i); System.out.print(name); System.out.print(" = "); System.out.println(val); } } } Yi Zong Post doc Phone direct +45 4677 5045 Mobile address@hidden Wind Energy Department Risш National Laboratory for Sustainable Energy TechnicalUniversityof Denmark #8211; DTU Building 118, P.O. Box49 DK-4000 Roskilde, Denmark Tel +45 4677 4677 Fax +45 4677 5083 www.risoe.dtu.dk
To it may concern, I want to use GLPK-java to solve a
simple MIP. // Maximize z = 17 * x1 + 12* x2 // subject to // 10*x1+7*x2 <= 40 // x1+ x2 <= 5 // where, // 0.0 <= x1 integer // 0.0 <= x2 integer // result: max=68: x1=4, x2=0; ?? The code is shown as following. The
problem is how I can get integer solution? The result I got is: Problem created * 0: obj = 0.000000000e+000 infeas = 0.000e+000 (0) * 2: obj = 6.833333333e+001 infeas = 0.000e+000 (0) OPTIMAL SOLUTION FOUND z = 68.33333333333334 x1 = 1.6666666666666676 x2 = 3.3333333333333326 %%%%%%%%%%%%%%%%%%source
code%%%%%%%%%%%%%% import java.io.File; import java.io.IOException; import org.gnu.glpk.GLPK; import org.gnu.glpk.GLPKConstants; import org.gnu.glpk.SWIGTYPE_p_double; import org.gnu.glpk.SWIGTYPE_p_int; import org.gnu.glpk.glp_prob; import org.gnu.glpk.glp_smcp; //import org.gnu.glpk.glp_intopt; //import org.gnu.glpk.glp_iocp; public class Integer1 { // Maximize z = 17 * x1 + 12* x2 // subject to // 10*x1+7*x2 <= 40 // x1+ x2 <= 5 // where, // 0.0 <= x1 integer // 0.0 <= x2 integer // result: max=68: x1=4, x2=0; ?? static { try { // try to load Linux library System.loadLibrary( "glpk_java" ); } catch (UnsatisfiedLinkError e) { // try to load Windows library System.loadLibrary("glpk_4_39_java"); } } public static void main(String[] arg) { glp_prob mip; glp_smcp parm; SWIGTYPE_p_int SWIGTYPE_p_double val; int ret; // Create problem mip = GLPK.glp_create_prob(); System.out.println("Problem created"); GLPK.glp_set_prob_name(mip, "myProblem"); // Define columns GLPK.glp_add_cols(mip, 2); GLPK.glp_set_col_name(mip, 1, "x1"); GLPK.glp_set_col_kind(mip, 1, GLPKConstants.GLP_IV); GLPK.glp_set_col_bnds(mip, 1, GLPKConstants.GLP_LO, 0,0); GLPK.glp_set_col_name(mip, 2, "x2"); GLPK.glp_set_col_kind(mip, 2, GLPKConstants.GLP_IV); GLPK.glp_set_col_bnds(mip, 2, GLPKConstants.GLP_LO, 0,0); // Create constraints GLPK.glp_add_rows(mip, 3); GLPK.glp_set_row_name(mip, 1, "c1"); GLPK.glp_set_row_bnds(mip, 1, GLPKConstants.GLP_UP, 0, 40); GLPK.intArray_setitem( GLPK.intArray_setitem( val = GLPK.new_doubleArray(3); GLPK.doubleArray_setitem(val, 1, 10); GLPK.doubleArray_setitem(val, 2, 7); GLPK.glp_set_mat_row(mip, 1, 2, // GLPK.glp_set_row_name(mip, 2, "c2"); GLPK.glp_set_row_bnds(mip, 2, GLPKConstants.GLP_UP, 0, 5); GLPK.intArray_setitem( GLPK.intArray_setitem( val = GLPK.new_doubleArray(3); GLPK.doubleArray_setitem(val, 1, 1); GLPK.doubleArray_setitem(val, 2, 1); GLPK.glp_set_mat_row(mip, 2, 2, // Define objective GLPK.glp_set_obj_name(mip, "z"); GLPK.glp_set_obj_dir(mip, GLPKConstants.GLP_MAX); // GLPK.glp_set_obj_coef(mip,
0, 0); GLPK.glp_set_obj_coef(mip, 1, 17); GLPK.glp_set_obj_coef(mip, 2, 12); // solve model parm = new glp_smcp(); GLPK.glp_init_smcp(parm); ret = GLPK.glp_simplex(mip, parm); // Retrieve solution if (ret == 0) { write_lp_solution(mip); } else { System.out.println("The problem could not be solved"); }; // free memory GLPK.glp_delete_prob(mip); } /** * write simplex solution * @param lp problem */ static void write_lp_solution(glp_prob mip) { int i; int n; String name; double val; //int val; name = GLPK.glp_get_obj_name(mip); val = GLPK.glp_get_obj_val(mip); //val = GLPK.glp_mip_obj_val(mip); System.out.print(name); System.out.print(" = "); System.out.println(val); n = GLPK.glp_get_num_cols(mip); for(i=1; i <= n; i++) { name = GLPK.glp_get_col_name(mip, i); val = GLPK.glp_get_col_prim(mip, i); //val = GLPK.glp_mip_col_val(mip, i); System.out.print(name); System.out.print(" = "); System.out.println(val); } } }
|
[Prev in Thread] | Current Thread | [Next in Thread] |