AMPL: нижний индекс вне границ

Привет товарищи оптимизаторы!

У меня есть некоторые проблемы со следующим ограничением:

#The supply at node i equals what was present at the last time period + any new supply and      subtracted by what has been extracted from the node.    
subject to Constraint1 {i in I, t in T, c in C}:
    l[i,t-1,c] + splus[i,t] - sum{j in J, v in V, a in A} x[i,j,v,t,c,a]= l[i,t,c];

что, естественно, заставляет это ограничение выдавать ошибки при первом зацикливании, поскольку t-1 не определено (для меня l[i,0,c] не определено. Где

  var l{I,T,C} >= 0;    # Supply at supply node I in time period T for company C.
  param splus{I,T};     # Additional supply at i.
  var x{N,N,V,T,C,A} integer >= 0;  #Flow from some origin within N to a destination within N using vehicle V, in time T, for company C and product A.

и установите T; (в.mod) это набор, определенный как:

 set T := 1 2 3 4 5 6 7; in the .dat file

Я пытался сделать:

subject to Constraint1 {i in I, t in T: t >= 2, c in C}:
all else same

который получил мне синтаксическую ошибку. Я также пытался включить "let l[1,0,1]:= 0" для всех возможных комбинаций, что привело меня к ошибке

  error processing var l[...]:
  no data for set I

Я также пытался

subject to Constraint1 {i in I, t in T, p in TT: p>t, c in C}:
   l[i,t,c] + splus[i,p] - sum{j in J, v in V, a in A} x[i,j,v,p,c,a]= l[i,p,c];

где

set TT := 2 3 4 5 6;

в файле.dat (и просто установить TT; в.mod), который также дал ошибки. У кого-нибудь есть идеи, как это сделать?

1 ответ

Решение

Один из способов исправить это - указать условие t >= 2 в конце индексного выражения:

subject to Constraint1 {i in I, t in T, c in C: t >= 2}:
  ...

См. Также Раздел A.3 Индексирование выражений и подписок для получения более подробной информации о синтаксисе индексирования выражений.

Другие вопросы по тегам