NEOS服务器的模型数据和脚本文件中的setof

时间:2015-05-10 15:57:27

标签: set ampl neos-server

在将我的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中可用。或者是他们(因为他们没有为我工作)?有一个简单的解决方法吗?

谢谢!

1 个答案:

答案 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联系。