Я разрабатываю инструмент оптимизации для домашней энергосистемы, которая также содержит аккумулятор. Все значения верны, и решение имеет смысл. Проблема в том, что раствор содержит очень сильные колебания. Это означает, что переменная решения часто равна 0 или максимальному значению. Чтобы избежать этого, я хотел бы добавить квадратичное ограничение, которое штрафует разницу двух значений (что-то вроде производной). Должно выглядеть примерно так:
((x [t] - x [t-1]) / шаг) ^ 2
Где x - интересующая переменная решения. Например. power_g_h[t]
.
Моя целевая функция (пока) определяется следующим образом:
IloLQNumExpr expr = model.lqNumExpr();
for (int t = 0; t < timesteps; t++) {
expr.addTerm(problem.getCosts().getElectricityCosts(t), power_g_h[t]);
expr.addTerm(problem.getCosts().getElectricityCosts(t), power_g_b[t]);
expr.addTerm(problem.getCosts().getElectricityCosts(t), power_g_bev[t]);
expr.addTerm(problem.getCosts().getFeedCompensation(), power_pv_g[t]);
}
Я надеюсь, что это было в некоторой степени понятно, и кто-нибудь сможет сказать, возможно ли это вообще в CPLEX.
Если это невозможно, я был бы очень рад подсказкам, как «сгладить» решение в CPLEX.
С наилучшими пожеланиями,
L.
QPex1.java
, поставляемый с CPLEX. Это то, о чем вы спрашивали? Вы должны просто попробовать его, чтобы увидеть, дает ли он желаемый эффект сглаживания. Другой вариант - попробовать использовать пул решений, чтобы найти альтернативные оптимальные решения. - person rkersh   schedule 04.09.2018