Я работаю над LP, написанным на Java, и использую cplex в качестве решателя.Нахождение оптимального решения занимает некоторое время.Было бы достаточно, если бы у меня было выполнимое решение, которое было бы рассчитано быстрее, или просто решение с пониженной оптимальностью.
В руководстве пользователя CPLEX я нашел следующие два параметра:
Для оптимальности: https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/Parameters/topics/EpOpt.html
cplex.setParam(IloCplex.Param.Simplex.Tolerances.Optimality, 1.0e-1);
Для первого возможногорешение:
cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 1);
Я использовал оба эти параметра в моей модели, но решение целевой функции остается таким же, как и время вычислений.
Кроме того, я использовал их в следующем небольшом альбоме, но безуспешно.
package cplexTest;
import ilog.concert.*;
import ilog.cplex.*;
public class TestC {
public static void main (String[] args) {
model1();
}
public static void model1() {
try {
IloCplex cplex = new IloCplex();
cplex.setParam(IloCplex.Param.Simplex.Tolerances.Optimality, 1.0e-1);
cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 100);
//variables
IloNumVar x = cplex.numVar(0, Double.MAX_VALUE, "x");
IloNumVar y = cplex.numVar(0, Double.MAX_VALUE, "y");
//expressions
IloLinearNumExpr objective = cplex.linearNumExpr();
objective.addTerm(0.12, x);
objective.addTerm(0.15, y);
// define objective
cplex.addMinimize(objective);
//define constraints
cplex.addGe(cplex.sum(cplex.prod(60, x), cplex.prod(60, y)),300);
cplex.addGe(cplex.sum(cplex.prod(12, x), cplex.prod(6, y)),36);
cplex.addGe(cplex.sum(cplex.prod(10, x), cplex.prod(30, y)),90);
//solve
if (cplex.solve()) {
System.out.println("obj = "+cplex.getObjValue());
System.out.println("x = "+cplex.getValue(x));
System.out.println("y = "+cplex.getValue(y));
}
else {
System.out.println("Model not solved");
}
}
catch (IloException exc) {
exc.printStackTrace();
}
}
}