У меня проблема, в которой я хочу вставить новые решения в CPLEX. Первоначально я делал это с помощью обратного вызова Heuristi c. Проблема здесь в том, что игнорируется следующее:
model.setParam(IloCplex.Param.Preprocessing.Linear,1);
(я знаю, что это происходит из-за обратного вызова управления). Проблема в следующем: нелинейная предварительная обработка очень помогла бы мне снизить нижнюю границу стоимости (иначе я не смогу доказать оптимальность).
Я провел небольшое исследование в Интернете и обнаружил, что могу также добавить решение, используя Цели, в частности Цели решения.
Теперь я использую цель решения, которая вкратце выглядит следующим образом:
private class InsertSolution2 extends IloCplex.Goal {
@Override
public IloCplex.Goal execute(IloCplex iloCplex) throws IloException {
if (nextSolution != null) {
System.out.println("In Solution Goal: Next Solution Exists");
//inject solution
//set values for vars and vals
nextSolution = null;
return cplex.solutionGoal(vars, vals);
}
return null;
}
}
Затем я добавляю это к cplex.solve(new InsertSolution2())
Это вызывает у меня несколько проблем (но я полный новичок с целями ...)
- Правильно ли указанное выше?
- Как это реализовано в серверной части ? Он по-прежнему игнорирует предварительную обработку ... Есть ли альтернатива, которая допускает нелинейную предварительную обработку?
- Это противоречит стартовым решениям? Мои стартовые решения теперь игнорируются ...
Спасибо! Лейла