Проблемы с моделью GAMS - PullRequest
1 голос
/ 29 мая 2020

Я испытал себя в GAMS, но до сих пор не понимаю, что делаю. Может ли кто-нибудь взглянуть на эту короткую модель и попытаться указать мне правильное направление? У меня проблемы с компиляцией в уравнениях, я получаю некоторые из них: Размер разный - на символ ссылается больше / меньше индексов, как объявлено Неконтролируемый набор введен как константа

Sets
        i months / 1, 2, 3 /
        j months / 1, 2, 3 /;

Parameters
         cp(i)  production cost in month i
         /        1     1.08
                  2     1.11
                  3     1.10
                                   /

         rh(i)  number of necessary workers in month i
         /        1     3
                  2     4
                  3     6
                                     /

        cap(i)  production capacity in month i
         /        1     25
                  2     20
                  3     25
                                       /
         q(j)  number of motors to deliver in month j
         /        1     10
                  2     15
                  3     25
                                 /

Scalar ca  cost to store motors for a month /0.15/ ;

variables
    mc(i,j) cost of production of motors in month i to be delivered in month j
    x(i,j)  number of motors produced in month i to be delivered in month j;


free variables
    wf workforce

    z cost of production
    hr human resources;

Equations
    cost cost 
    human_resources human resources
    r1 restriction1
    r2 restriction2 ;

cost .. z  =e=  sum((i,j), (cp(i)+(j-i)*ca)*x(i,j)) ;
human_resources .. hr =e= sum(i, sum(j, rh(i)*x(i, j))) ;
*lower than
r1..   sum(j, x(i,j))  =l=  cap(i) ;
*greater than
r2.. sum(i, x(i,j))  =g=  q(j) ;

Model
    motors 'temp' /all/;

Solve motors using mip minimizing mc;

Display mc, x;

1 Ответ

1 голос
/ 30 мая 2020

Это работает, но проверьте решение. Я добавил положительную переменную x, потому что в противном случае у вас были бы отрицательные результаты. Основная проблема заключалась в том, что вы оптимизировали переменную, которая объявлена, но никогда не используется в уравнениях. Кроме того, переменная, которую вы оптимизируете, не может иметь размеров (я думаю). Затем для ограничений r1 и r2 вам нужно добавить индекс, потому что они должны проверяться для каждого месяца, поэтому r1 (i) и r2 (j). На самом деле они представляют собой «семейство ограничений». Вы не можете вычесть индексы месяцев (не могу объяснить почему), но вы можете вычесть их порядок в наборе.
И, наконец, вычислите m c (i, j) как параметр после того, как вы получили решение.

Sets
        i months / 1, 2, 3 /
        j months / 1, 2, 3 /;

Parameters
         cp(i)  production cost in month i
         /        1     1.08
                  2     1.11
                  3     1.10
                                   /

         rh(i)  number of necessary workers in month i
         /        1     3
                  2     4
                  3     6
                                     /

        cap(i)  production capacity in month i
         /        1     25
                  2     20
                  3     25
                                       /
         q(j)  number of motors to deliver in month j
         /        1     10
                  2     15
                  3     25
                                 /

Scalar ca  cost to store motors for a month /0.15/ ;

variables
*    mc(i,j) cost of production of motors in month i to be delivered in month j
    x(i,j)  number of motors produced in month i to be delivered in month j;

positive variable x;
free variables
    wf workforce

    z cost of production
    hr human resources;

Equations
    cost cost
    human_resources human resources
    r1(i) restriction1
    r2(j) restriction2 ;

cost .. z  =e=  sum((i,j), (cp(i)+(ord(j)-ord(i))*ca)*x(i,j)) ;
human_resources .. hr =e= sum(i, sum(j, rh(i)*x(i, j))) ;
*lower than
r1(i)..   sum(j, x(i,j))  =l=  cap(i) ;
*greater than
r2(j).. sum(i, x(i,j))  =g=  q(j) ;

Model
    motors 'temp' /all/;

Solve motors using mip minimizing z;

Parameter mc(i,j);
mc(i,j)= (cp(i)+(ord(j)-ord(i))*ca)*x.l(i,j);
Display mc, x.l;

...