Передача переменной в качестве параметра для новой модели в GAMS

Я пишу программу, в которой у меня есть две математические модели, которые последовательно решаются таким образом, что переменная X7(f,p) из первой модели становится параметром rwdemand(f,p) для второй.

Основные элементы кода для описанной выше проблемы:

Sets
f  raw materials                 /f1*f14/
p  periods                       /p1*p4/;

Positive Variable    X7(f,p)    quantity of raw material f required in period p;

Equation
*First model
 r6_rwinventory(f,p).. X4(f,p-1) + X7(f,p-leadtime)=e= sum((t,m,sp),((rmconsumption(f,t,m)*X1(t,m,sp))+X4(f,p)));

 Parameter rmdemand(f,p);
           rmdemand(f,p)= X7.l;

 Equation
 *Second model
 r3_demand(f,p).. X4(f,p-1) + sum((s,d),X2(f,s,d,p-leadtime)) =e= rmdemand(f,p) + X4(f,p);

 Model First_model "real instance set for Lot sizing model (SMM-LS)." /fo,r1_produnits,r2_packsetup,r3_bulkinventory,r4_packinventory,r5_maxbulkinventory,r6_rwinventory,r7_usedinventory1/
       Second_model "real instance set for Raw material purchasing model (SMM-RMP)" /fo2,r1_maxd,r2_order,r3_demand,r4_maxinventory,r5_mininventory/;
 Solve First_model using mip minimizing Z
 Solve Second_model using mip minimizing A;
 Display Z.l,A.l;

Пишем так:

Parameter rmdemand(f,p);
          rmdemand(f,p)= X7.l;

Это не работает и появляется ошибка 141: Объявлен символ, но значения не присвоены. Проверьте определение отсутствующих данных, назначение, загрузку данных или неявное назначение с помощью оператора решения.

Как я могу это исправить?

С Уважением!


person Ana    schedule 19.12.2020    source источник


Ответы (1)


Ана! Вы можете использовать X7.l только для получения значения после того, как вы решили первую модель. Итак, я считаю, что это может сработать:

(...)
Equation
*First model
 r6_rwinventory(f,p).. X4(f,p-1) + X7(f,p-leadtime)=e= sum((t,m,sp),((rmconsumption(f,t,m)*X1(t,m,sp))+X4(f,p)));

 Parameter rmdemand(f,p);
 Equation
 *Second model
 r3_demand(f,p).. X4(f,p-1) + sum((s,d),X2(f,s,d,p-leadtime)) =e= rmdemand(f,p) + X4(f,p);

 Model First_model "real instance set for Lot sizing model (SMM-LS)." /fo,r1_produnits,r2_packsetup,r3_bulkinventory,r4_packinventory,r5_maxbulkinventory,r6_rwinventory,r7_usedinventory1/
       Second_model "real instance set for Raw material purchasing model (SMM-RMP)" /fo2,r1_maxd,r2_order,r3_demand,r4_maxinventory,r5_mininventory/;
 Solve First_model using mip minimizing Z;

*Insert the attribution of value between the two solve statements
 rmdemand(f,p)= X7.l;

 Solve Second_model using mip minimizing A;
 Display Z.l,A.l;

Надеюсь, что это работает :)

person Raquel Aguiar    schedule 24.12.2020