Я разрабатываю инструмент оптимизации для бытовой энергосистемы, который также содержит батарею. Все значения верны, и решение имеет смысл. Проблема в том, что решение содержит очень сильные колебания. Это означает, что переменная решения часто либо 0, либо максимальное значение. Чтобы избежать этого, я хотел бы добавить квадратичное ограничение, которое штрафует разницу двух значений (что-то вроде производной). Должно выглядеть примерно так:
((x [t] - x [t-1]) / размер шага) ^ 2
Где х - это переменная решения, представляющая интерес. Например. 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.
С уважением,
Л.