i trying dual values in java using cplex. getting wrong value. know it's wrong because have checked dual values using other solver. couldn't find problem code. can tell me what's wrong here? problem given below:
minimize 100000x1 + 0.869x2 + 299997x3 + 199998x4 + 199998x5 subject x1 = 1 x1+x2=1 x3 = 1 x3+x4=1 x5 = 1 x1+x2+x3+x4+x5 <= 500
and code:
public class dual_new { public static void main(string[] args) { model_1(); } public static void model_1() { try { //create new model ilocplex cplex = new ilocplex(); //define variables ilonumvar x1 = cplex.numvar(0, 1,"x1"); ilonumvar x2 = cplex.numvar(0, 1,"x2"); ilonumvar x3 = cplex.numvar(0, 1,"x3"); ilonumvar x4 = cplex.numvar(0, 1,"x4"); ilonumvar x5 = cplex.numvar(0, 1,"x5"); //define expressions ilolinearnumexpr objective = cplex.linearnumexpr(); objective.addterm(100000, x1); objective.addterm(0.869, x2); objective.addterm(299997, x3); objective.addterm(199998, x4); objective.addterm(199998, x5); //define objective cplex.addminimize(objective); //define constraints list<ilorange>constraints = new arraylist<ilorange>(); constraints.add(cplex.addeq(cplex.prod(1, x1),1)); constraints.add(cplex.addeq(cplex.sum(cplex.prod(1, x1),cplex.prod(1, x2)),1)); constraints.add(cplex.addeq(cplex.prod(1, x3),1)); constraints.add(cplex.addeq(cplex.sum(cplex.prod(1, x3),cplex.prod(1, x4)),1)); constraints.add(cplex.addeq(cplex.prod(1, x5),1)); constraints.add(cplex.addle(cplex.sum(cplex.prod(1, x1),cplex.prod(1, x2),cplex.prod(1, x3),cplex.prod(1, x4),cplex.prod(1, x5)),500)); //solve model if (cplex.solve()) { system.out.println("obj = "+cplex.getobjvalue()); system.out.println("x1 = "+cplex.getvalue(x1)); system.out.println("x2 = "+cplex.getvalue(x2)); system.out.println("x3 = "+cplex.getvalue(x3)); system.out.println("x4 = "+cplex.getvalue(x4)); system.out.println("x5 = "+cplex.getvalue(x5)); for(int i=0; i<constraints.size();i++) system.out.println("dual = "+(i+1) +" = " +cplex.getdual(constraints.get(i))); } else { system.out.println("model not solved"); } cplex.end(); } catch (iloexception exc) { exc.printstacktrace(); } } }
there nothing wrong. dual problem model has multiple optimal solutions; therefore, solver can give of solutions none of them wrong. way check compute objective of dual problem using dual values primal, should same objective value both problems.
Comments
Post a Comment