AMPL代码编译问题:已定义

AMPL code compilation problem: is already defined

我在 AMPL 中有短期任务。

有类似的问题,但没有给我解决方案

这是我的 .mod 文件:


set MOTORS;
set FABRICS;

param work {FABRICS,MOTORS}>= 0;
param power {FABRICS}>= 0;
param price {MOTORS}>= 0;

var prod {MOTORS}>= 0;
var use {o in FABRICS} = sum {k in MOTORS} work [o,k] * prod[k];
var free {o in FABRICS} >= 0;

var income = sum {k in MOTORS} price[k]*prod[k];

maximize income;

s.t. Ogrfreepower {o in FABRICS}:  free[o]= power[o]- use[o];

这是我的 .dat 文件:

set MOTORS:= GL SL ;
set FABRICS:= montage paintshop;

    param work:  GL  SL:=
    montage   2   5 
    paintshop   3   3
        ;

    param:  power :=
    montage   150
    paintshop   180
    ;

    param:  price :=
    GL  2
    SL  3
    ;

这是我的 .运行 文件:

#RESET THE AMPL ENVIROMENT

reset;

model example1.mod;

data example1.dat;

#LOAD THE MODEL

option solver './cplex';

#SOLVE
solve;

#SHOW RESULTS
display income;

当我尝试使用控制台时:

ampl: include example1.run;

它带给我:

example1.mod, line 19 (offset 314):
    income is already defined
context:  maximize  >>> income; <<< 

我应该更改什么才能正确编译它?

尝试更改

maximize income;

至:

maximize objective_function: income;

A​​FAIK,这里的问题是 AMPL 将变量和 objective 函数视为单独的实体。 maximize income 被解释为声明一个名为 "income" 的 objective 函数,而您已经有一个该名称的变量,因此会出现 "already defined" 错误。

更改为:

时也有效
maximize zysk2: sum {k in SKUTERY} cena[k]*prod[k];

而不是:

var income = sum {k in SKUTERY} cena[k]*prod[k];

maximize income;