1

在将我的 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;

它返回错误

预期的 ; ( : 或符号上下文: set PROD := setof >>> { <<< i in DUMMYPROD} i;

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

关于 NEOS 服务器 “新” AMPL 中的 Constraint 编程逻辑的额外问题包括整个约束的条件和逻辑运算符。我不认为这些在 NEOS 中可用。还是他们(因为他们不为我工作)?有简单的解决方法吗?

谢谢!

4

1 回答 1

0

AMPL 数据格式不支持表达式,因此您应该setof {i in DUMMYPROD} i在声明(如第一个示例中)或 AMPL 脚本中使用:

let PROD := setof {i in DUMMYPROD} i;

有关 AMPL 数据格式的更多详细信息,另请参阅AMPL 书的第 9 章指定数据

至于约束规划(CP)功能,我认为 NEOS 上没有任何 CP 求解器。您可以尝试就此联系NEOS 支持。

于 2015-05-11T18:04:12.413 回答