【问题标题】:AMPL syntax error: "____ is not a set" & "____ is not a param <or constraint or var>"AMPL 语法错误:“____ 不是集合”和“____ 不是参数 <或约束或 var>”
【发布时间】:2016-06-04 15:10:17
【问题描述】:

我对 AMPL 编程非常陌生,尽管我对其他编程语言很有经验。 我将此作为我的 .run 列出的第一个 .dat 文件:

data;

#set declarations
    set TIME = {0..1680} ordered; #time
#   set GENHRS := {150..1660} ; #generation hours

#Scalars
    param StorageMin :=1;#       Minimum reservoir storage level
    param StorageMax :=50;#       Maximum reservoir storage level
    param Qmin       :=1;#       Minimum total outflow 
    param QturbMax   :=20;#       Maximum level of outflow through turbine
    #param Qin {t in TIME};#        need to read in from file.

如标题所示,我在运行它时遇到错误(通过 cmd) “TIME 不是一个集合”以及上面列出的所有其他参数:“___ 不是一个参数”。

我很困惑。据我所知,它们都是用正确的语法定义的,尽管我无法弄清楚“:=”和“=”之间的区别,但是我都尝试过,但都不起作用..

我不知道它是否相关,但我的 .mod 文件中指定了约束、变量和目标。

【问题讨论】:

    标签: syntax ampl


    【解决方案1】:

    正如 vitaut 所说,模式很重要。这意味着如果您的设置是您调用modeldata 的数据文件、模型文件和运行文件,您需要在运行文件中调用model 之前的data

    【讨论】:

      【解决方案2】:

      AMPL 语言由两部分或模式组成,一种用于指定优化模型的建模语言和一种用于提供集合和参数数据的data specification languagedata 语句将 AMPL 切换到数据模式,在该模式下它将输入解释为以数据规范语言编写。

      AMPL 代码

      set TIME = {0..1680} ordered;
      

      给出了集合TIME的声明,所以它应该在模型中使用,而不是在数据中。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多