Увеличение или уменьшение переменной или параметра в течение определенного периода времени в GAMS - PullRequest
0 голосов
/ 30 ноября 2018

Пожалуйста, как я могу увеличить или уменьшить значение переменной или параметра за период времени, сгенерированный с использованием упорядоченного набора?1-24 часа.

Я моделирую зарядку и разрядку электромобилей, и мне нужно увеличивать или уменьшать состояние заряда SOC (уровень заряда батареи) после каждого периода (в зависимости от того, заряжается он или разряжается),

Я пробовал несколько методов, но это не работает.Также будет ли лучше моделировать уровень заряда батареи как параметр или переменную?Я стараюсь свести к минимуму расходы клиентов, заряжающих свои автомобили, и в то же время гарантирую, что они получат максимальный необходимый заряд.Вот фрагмент моего кода.

Целевая функция сводится к минимуму (ostСтоимость зарядки -∑ стоимость разряда + ∑Стоимость невыполненного заряда)

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;

1 Ответ

0 голосов
/ 30 ноября 2018

Во-первых, ваша модель имеет некоторые ошибки, основанные на данных.Вы должны добавить ";"конец таблицы 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; 

Теперь у вас есть рабочая модель.Но я думаю, что в этом есть логические ошибки.Поэтому вы должны работать над ограничениями.

...