我正在为还包含电池的家用能源系统开发优化工具。所有值都是正确的,解决方案是有意义的。问题是解决方案包含非常强烈的波动。这意味着决策变量通常为 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.