Я хочу импортировать элементы или элементы в набор GAMS из других источников, например из базы данных SQL. Например, установите p plant /p1,p2,p3.../ Эти элементы успешно импортированы, однако кажется, что они не упорядочены, поскольку при использовании условного предложения, такого как ord(p) > 3, в ограничениях будут выдаваться сообщения об ошибках. .
Я знаю, что элементы упорядочены так, как они изначально созданы. Таким образом, эти импортированные элементы должны следовать той же последовательности, что и импортированные. Когда я показываю этот набор, элементы отображаются как p1, p2, p3...
Поэтому я действительно запутался в упорядочении импортированных элементов. Я хочу выяснить причину и, если есть способы исправить их порядок. Спасибо.
Спасибо Беренгер!
вы можете добавить следующее после загрузки данных
ALIAS(*,universe);
display universe;
$exit;
Затем вы должны увидеть порядок загруженных элементов набора и места, где мог появиться неправильный порядок. Если вы абсолютно не можете заказать набор в исходном запросе (sql db), хак должен был бы инициировать вспомогательный набор перед загрузкой фактических данных.
set helper /p1*p100000/;
Привет Маттес, спасибо за ваш ответ. Этот метод для меня новый. Это должно быть очень полезно. Я понимаю, что проблема у меня связана с элементами. Я выбираю числа, скажем, от 1 до 1000, чтобы представить элементы во всех наборах. Как только первый (большой) набор импортирован, порядок всех элементов в значительной степени определен. Таким образом, для набора, импортированного позже, скажем, 1, 3, 5, 6, может быть невозможно использовать ord для этого набора. Это мое понимание, и оно может быть неправильным. Я попробую помощника, чтобы увидеть, может ли он решить проблему.
Да, GAMS отслеживает каждый элемент набора внутри универсального набора. Этот набор заполняется в порядке появления элементов. Итак, если ваш первый загруженный набор содержит элементы {1,5,10}, то это первые три элемента в универсальном наборе. если вы добавите второй набор с элементами {1,2,3,4,5}, тогда универсальный набор будет следующим: {1,5,10,2,3,4}. В этом случае второй набор выглядит «неупорядоченным» по сравнению с универсальным набором, потому что элемент «2» находится перед элементом «5» во втором наборе. Функция ORD() не будет работать для неупорядоченных наборов.
Взгляните на $onUELlist, чтобы отобразить порядок в вашем файле листинга. И встроенные SortedUELs(,) для получения естественного порядка. См.: gams.com/latest/docs/…