0
cplexを使用してJavaで二重の値を取得しようとしています。しかし、私は間違った価値を得ています。私はそれが間違っていることを知っています。私は他のソルバーを使って二重の値をチェックしています私は自分のコードで何の問題も見つけられませんでした。誰が私に何が間違っているか教えてもらえますか?私の問題は、以下の通りである:Cplexを使用してJavaで二重の値を取得
minimize 100000x1 + 0.869x2 + 299997x3 + 199998x4 + 199998x5
subject to x1 = 1
x1+x2=1
x3 = 1
x3+x4=1
x5 = 1
x1+x2+X3+x4+x5 <= 500
そして、これは私のコードです:
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();
}
}
}
ありがとう:) – Dipta