optimization - 在 GAMS 中增加或减少一段时间内的变量或参数
问题描述
请问如何在使用有序集生成的一段时间内增加或减少变量或参数的值?1-24 小时。
我正在对电动汽车的充电和放电进行建模,我需要在每个周期之后增加或减少充电状态 SOC(电池电量)(取决于它是充电还是放电)。
我已经尝试了几种方法,但它不起作用。最好将电池电量建模为参数或变量吗?我正在努力最大限度地降低客户为车辆充电的成本,同时确保他们获得所需的最大费用。这是我的代码片段。
目标函数最小化(∑充电成本-∑放电成本+∑未完成充电成本)
isoc 是初始充电状态 fsoc 是最终或预期充电状态 v1 = 车辆 1 v2 = 车辆 2
Set
t 'hours' / 1*10 /
i 'number of vehicles' / v1*v2 /;
Table vehdata(i,*) 'Vehicle characteristics'
at dt isoc fsoc
v1 1 8 4 50
v2 3 6 6 70
Scalar charging_power 'Charging power at station' / 6.6 /;
*Energy cost in dollars per kWh
Parameter energy_cost(t) / 1 0.03, 2 0.028, 3 0.025, 4 0.025, 5 0.026, 6 0.028,
7 0.041, 8 0.051, 9 0.048, 10 0.047 /;
Variable
Icharge(i,t)'charging decision'
Idischarge(i,t)'discharging decision'
z 'total cost of charging'
soc(i,t) 'State of charge'
Binary Variable Icharge, Idischarge;
soc.lo(i,t) = vehdata(i,"isoc");
soc.up(i,t) = vehdata(i,"fsoc");
Equation
costCharging 'define objective function'
soc_const1(i,t) 'Charging or discharging only takes place between arrival and departure'
soc_const2(i,t) 'SOC cannot charge and discharge at same time'
soc_const3(i,t) 'Increase or decrease state of charge after every period';
costCharging.. z =e= sum((i,t), (Icharge(i,t)*energy_cost(t) * charging_power)) -sum((i,t),(Idischarge(i,t)*energy_cost(t) * charging_power)) + sum((i,t), (vehdata(i,"tsoc") - soc(i, t))* energy_cost(t));
soc_const1(i,t).. Icharge(i,t) =e= 0$(vehdata(i,"at")> ord(t) and vehdata(i,"dt")< ord(t));
soc_const2(i,t).. Icharge(i,t) + Idischarge(i,t) =e= 1;
soc_const3(i,t).. soc(i,t) =e= soc(i,t+1) + (Icharge(i,t) * charging_power) - (Idischarge(i,t) * charging_power) ;
Model op_charging / all /;
solve op_charging using mip minimizing z;
display soc.l;
解决方案
首先,您的模型有一些基于给定的错误。您应该添加“;” 表 vehdata 的结尾,如“v2 3 6 6 70;”。另外,我认为您希望第一个约束适用于每辆车的“at”和“dt”。因此,我将其更改为:
soc_const1(i,t)$(vehdata(i,"at") = ord(t) or vehdata(i,"dt") = ord(t)).. Icharge(i,t) =e= 0;
现在你有了一个工作模型。但我认为它有逻辑错误。因此,您应该处理约束。
推荐阅读
- javascript - 如何在动态创建的对象上启用 css 转换
- spring-boot - Why does my Spring Boot application serve correctly web content locally but then I get 503 on Heroku?
- algorithm - 矩阵乘法子问题图顶点度数
- intellij-idea - 如何在 PhpStorm 中并排打开两个终端?
- javascript - javascript Object.create 丢失属性
- laravel - Laravel 错误“模型/模型名称的声明应与 Illuminate\Database\Eloquent\Model 兼容”
- javascript - 如何使用 JS 动画容器
- java - 我正在尝试使用for循环按行写入数据,我经常需要更改数据为此我正在进行参数化
- kotlin - 在 Kotlin 中使用 Jackon 反序列化嵌套的 json 字段
- ios - 线程 0 因 ARM 线程状态(64 位)而崩溃