在一段时间内增加或减少GAMS中的变量或参数

时间:2018-11-29 21:09:14

标签: optimization mathematical-optimization gams-math

请问我如何在使用有序集生成的时间内增加或减少变量或参数的值? 1-24小时。

我正在对电动汽车的充电和放电进行建模,并且需要在每个周期(取决于它是在充电还是在放电)之后增加或减少充电状态SOC(电池电量)。

我尝试了几种方法,但是没有用。还最好将电池电量建模为参数或变量吗?我试图将客户的车辆充电成本降到最低,同时确保他们获得所需的最大充电量。这是我的代码段。

目标函数是最小化的(∑充电成本-∑放电成本+ ∑未履行的成本)

ISO是初始充电状态 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;

1 个答案:

答案 0 :(得分:0)

首先,您的模型有一些基于给定的错误。您应该添加“;”表vehdata的结尾,例如“ v2 3 6 6 70;”。另外,我认为您希望每个车辆的第一个约束作用在“ at”和“ dt”上。因此,我将其更改为:

!public/
!public/storage/
!public/storage/images/
!public/storage/images/*

现在您有了一个可行的模型。但是我认为它存在逻辑错误。因此,您应该处理约束。