首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab约束:如何同时停止充放电存储?

Matlab约束:如何同时停止充放电存储?
EN

Stack Overflow用户
提问于 2013-07-28 13:01:11
回答 2查看 895关注 0票数 1

我对matlab的linprog代码有问题。优化功能是24期的总成本,仅考虑锅炉的燃料成本。

仿真目的:

优化由锅炉、热量需求和TES组成的系统24小时运行的热能储存(TES)的充放电特性。汽油的价格是时变的.

问题:

如果TES是理想的(efficiency=100%),我没有限制阻止系统同时充放电。我不能用一个变量来描述充放电。我确实需要他们分开

目前,我有以下限制来描述最小/最大充放电速率(当然还有其他一些):

代码语言:javascript
复制
maxChargeThermalTES>=ChargeThermalTES<=0
maxDischargeThermalTES >= DischargeThermalTES <=0

是否可以在linprog?的约束下实现以下逻辑规则

代码语言:javascript
复制
if ChargeThermalTES<0,
   DischargeThermalTES=0
end

所有的方法,例如使用二进制变量(用来描述系统的充值或放电)都不起作用,因为二进制变量总是取决于优化的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 03:14:56

是的,这是可能的。您可以使用一个0-1二进制变量和Big将您的If-然后条件添加到linprog

要实现逻辑规则:

代码语言:javascript
复制
if ChargeThermalTES<0,
   DischargeThermalTES=0
end

条件:如果ChargeThermalTES<0,则DischargeThermalTES=0

让我们引入一个二进制变量y

这样我们就可以将条件重写为

代码语言:javascript
复制
ChargeThermalTES - M y < 0

这意味着

代码语言:javascript
复制
if y = 0, then DischargeThermalTES must be = 0
if y=1, DischargeThermalTES can be anything

让我们将equal to约束分解成两个不等式

代码语言:javascript
复制
DischargeThermalTES < M y
DischargeThermalTES > -M y

如果是y=1,上述两个基本上都是非绑定的.

如果y= 0,它将强制DischargeThermalTES变为0。

因此,结合以下约束,您可以将逻辑约束强制执行到线性规划。

代码语言:javascript
复制
 ChargeThermalTES - M y < 0
 DischargeThermalTES < M y
 DischargeThermalTES > -M y
 y = {0,1} binary, M is a large number.

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2013-07-28 14:15:31

您不能在线性规划中强制执行这样的逻辑规则。

然而,您可以做的是:

1解决你的线性规划,没有这个约束。获取目标函数的最佳成本(让我们将其命名为OldCost)。

2然后用这样的方式改变你的线性规划:

  • 增加一个约束:旧的目标函数应该在OldCost * (1-Epsilon)和OldCost * (1+Epsilon)之间。
  • 新的最小化目标函数是ChargeThermalTES + DischargeThermalTES。

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17908460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档