Мне нужно определить набор параметров, которые имеют естественную рекурсивную связь.
Вот MWE, где я пытаюсь определить факториальную функцию по набору (девяти) параметров S:
$title TitleOfProblem
set S / s1*s9 /;
alias(S, S1, S2);
set delta1(S1,S2);
delta1(S1,S2) = yes$(ord(S1) + 1 = ord(S2));
parameter f(S);
f(S) = 1$(ord(S) = 1) + (ord(S) * sum(S1$(delta1(S1, S)), f(S1)))$(ord(S) > 1);
display f;
"delta1" - это отношение, содержащее пары элементов в отсортированном порядке, которые отличаются на 1. Логически, определение f совпадает с определением факториальной функции (для входов с 1 по 9), но GAMS, похоже, не нравится что f определяется рекурсивно. Результат компиляции GAMS выглядит примерно так:
f(S) = 1$(ord(S) = 1) + (ord(S) * sum(S1$(delta1(S1, S)), f(S1)))$(ord(S) > 1);
$141
141 Symbol neither initialized nor assigned
A wild shot: You may have spurious commas in the explanatory
text of a declaration. Check symbol reference list.
Вопрос:
Возможно ли рекурсивное определение параметра в GAMS? Если нет, то что такое обходной путь?
(П.С. Кто-то с достаточным количеством представителей должен создать тег «GAMS» и добавить его к этому вопросу.)