在将我的AMPL配方提交给NEOS服务器时,为什么下面的代码行使用`setof'运算符在模型文件中工作正常但不在数据文件中工作?
set X := setof {indices in Y} subsetofindices
NEOS服务器要求将代码分别分为.mod,.dat和脚本文件。我在脚本文件中看到了使用let
X := ...
的引用。这些文件有什么区别,放在哪里?
示例 使用AMPL的steelT.x文件,第一个2个文件块
# steelT.mod
set DUMMYPROD;
set PROD := setof {i in DUMMYPROD} i; # products
# steelT.dat
data;
set DUMMYPROD := bands coils;
以下不起作用:
# steelT.mod
set DUMMYPROD;
set PROD; # products
# steelT.dat
data;
set DUMMYPROD := bands coils;
set PROD := setof {i in DUMMYPROD} i;
它返回错误
预期; (:或符号 context:set PROD:= setof>>> {<<<我在DUMMYPROD} i;
更广泛的问题
一般来说,什么属于模型文件,数据文件和脚本文件? (也适用于param
和其他定义)这些处理的顺序是什么?当我读到AMPL指南时,我可能会遗漏一些基础知识,但我没有找到这个(我从未参加过优化课程)。
关于NEOS服务器的奖金问题 "新" Contraint programming logic in AMPL包括整个约束的条件和逻辑运算符。我不认为这些在NEOS中可用。或者是他们(因为他们没有为我工作)?有一个简单的解决方法吗?
谢谢!
答案 0 :(得分:0)
AMPL数据格式不支持表达式,因此您应该在声明中使用setof {i in DUMMYPROD} i
(如第一个示例中所示)或在AMPL脚本中使用:
let PROD := setof {i in DUMMYPROD} i;
有关AMPL数据格式的更多详细信息,另请参阅AMPL书籍的Chapter 9. Specifying Data。
至于约束编程(CP)功能,我不认为NEOS上有任何CP解算器。您可以尝试就此问题与NEOS Support联系。