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

setof in model data and script files for NEOS server

在将我的 AMPL 公式提交给 NEOS 服务器时,为什么下面使用 `setof' 运算符的代码行在 model 文件中工作正常,但在数据文件中却不行?

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;

它returns错误

expected ; ( : or symbol context: set PROD := setof >>> { <<< i in DUMMYPROD} i;

更广泛的问题 一般来说,model文件,数据文件和脚本文件属于什么? (也适用于 param 和其他定义)这些处理的顺序是什么?当我阅读 AMPL 指南时,我可能会遗漏一些基础知识,但我没有找到它(我从未参加过优化课程)。

关于 NEOS 服务器的额外问题 "New" Contraint programming logic in AMPL 包括用于整个约束的条件和逻辑运算符。我不认为这些在 NEOS 中可用。还是他们(因为他们不适合我)?有简单的解决方法吗?

谢谢!

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