Проблема компиляции кода AMPL: уже определена - PullRequest
0 голосов
/ 09 ноября 2019

У меня короткое задание в 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
    ;

Это мой файл .run:

#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; <<< 

что я должен изменить, чтобы правильно его скомпилировать?

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Попробуйте изменить

maximize income;

на:

maximize objective_function: income;

AFAIK, проблема в том, что AMPL обрабатывает переменные и целевые функции как отдельные объекты. maximize income интерпретируется как объявление целевой функции с именем «доход», когда у вас уже есть переменная с таким именем, следовательно, «уже определенная» ошибка.

0 голосов
/ 10 ноября 2019

Работает также при изменении на:

maximize zysk2: sum {k in SKUTERY} cena[k]*prod[k];

вместо:

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

maximize income;
...