我对matlab的linprog代码有问题。优化功能是24期的总成本,仅考虑锅炉的燃料成本。
仿真目的:
优化由锅炉、热量需求和TES组成的系统24小时运行的热能储存(TES)的充放电特性。汽油的价格是时变的.
问题:
如果TES是理想的(efficiency=100%),我没有限制阻止系统同时充放电。我不能用一个变量来描述充放电。我确实需要他们分开
目前,我有以下限制来描述最小/最大充放电速率(当然还有其他一些):
maxChargeThermalTES>=ChargeThermalTES<=0
maxDischargeThermalTES >= DischargeThermalTES <=0是否可以在linprog?的约束下实现以下逻辑规则
if ChargeThermalTES<0,
DischargeThermalTES=0
end所有的方法,例如使用二进制变量(用来描述系统的充值或放电)都不起作用,因为二进制变量总是取决于优化的输出。
发布于 2013-07-31 03:14:56
是的,这是可能的。您可以使用一个0-1二进制变量和Big将您的If-然后条件添加到linprog。
要实现逻辑规则:
if ChargeThermalTES<0,
DischargeThermalTES=0
end条件:如果ChargeThermalTES<0,则DischargeThermalTES=0
让我们引入一个二进制变量y
这样我们就可以将条件重写为
ChargeThermalTES - M y < 0这意味着
if y = 0, then DischargeThermalTES must be = 0
if y=1, DischargeThermalTES can be anything让我们将equal to约束分解成两个不等式
DischargeThermalTES < M y
DischargeThermalTES > -M y如果是y=1,上述两个基本上都是非绑定的.
如果y= 0,它将强制DischargeThermalTES变为0。
因此,结合以下约束,您可以将逻辑约束强制执行到线性规划。
ChargeThermalTES - M y < 0
DischargeThermalTES < M y
DischargeThermalTES > -M y
y = {0,1} binary, M is a large number.希望这能有所帮助。
发布于 2013-07-28 14:15:31
您不能在线性规划中强制执行这样的逻辑规则。
然而,您可以做的是:
1解决你的线性规划,没有这个约束。获取目标函数的最佳成本(让我们将其命名为OldCost)。
2然后用这样的方式改变你的线性规划:
干杯
https://stackoverflow.com/questions/17908460
复制相似问题