#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 это я уже написал.