Сумма переменных, изменяющихся с течением времени (AMPL)

#sum #ampl

Вопрос:

У меня есть переменная, зависящая от времени, которая изменяется с некоторыми предопределенными временными интервалами. Я хотел бы получить сумму переменной в течение нескольких временных шагов. Как я могу записать сумму переменной?

.mod файл:

 set Time default {}; #number of timesteps
param top{Time}; #number of hours in each timestep
var E{Time}         >= 0.001; #the timedependent variable

subject to annualElectricity{t in Time}: 
    Ea = sum{E[t]*top[t]};
 

Файл .dat:

 set Time := 1 2 3 4 5 6;

param top := #operating time (hours)
1 609
2 321
3 532
4 425
5 351
6 7
;
 

Ответ №1:

Я предполагаю annualElectricity , что объявленная вами коллекция ограничений — это ваша попытка сделать то, что вы хотите, но я не уверен, что вы хотите использовать ограничение для этого.

Если вы хотите суммировать все переменные в коллекции E , выражение суммы будет sum{t in Time} E[t] . Если вам нужна сумма всех произведений E[t]*top[t] , выражение суммы будет sum{t in Time} E[t]*top[t] .

Если вам не нужно это значение для решения проблемы, вы можете объявить a param Esum , а затем, после того, как вы решили проблему, вы можете вызвать let Esum := sum{t in Time} E[t] . Но если вам нужно это значение в вашей задаче, я полагаю, вы можете определить переменную var Esum = sum{t in Time} E[t] и использовать ее в своих ограничениях / целевой функции.

Я вижу, что вы новичок в AMPL, поэтому вам может быть полезно прочитать некоторое базовое введение в AMPL, например, это https://pifop.com/help/ampl_programs.html это я уже написал.