如何在GAMS中设置最小化问题

问题描述

这可能是一个菜鸟问题,但我正在尝试最小化GAMS中的平均绝对误差。 考虑GAMS中的以下数据:

set Time /0 * 2/;

parameter y(Time),u(Time),v(Time),yhat(Time),MAE;

scalar
    alpha /0/
    beta /0/;

y("0")  = 24;
y("1")  = 23;
y("2")  = 26;

我想基于指数平滑进行以下方程式(该方程式取from here):

enter image description here

我可以在GAMS中使用循环来做到这一点:

u("0") = y("0");
v("0") = 0;

loop(Time,u(Time) = (alpha*y(Time))+(1-alpha)*(u(Time-1)-v(Time-1));
    v(Time) = beta*(u(Time)-u(Time-1))+(1-beta)*v(Time-1);
    yhat(Time) = u(Time-1)+v(Time-1);
);

由此我可以计算出平均绝对误差:

set Timesub(Time) / 1 * 2 /;

MAE = sum(Timesub,abs(yhat(Timesub)-y(Timesub)))/2;

但是,我不想假设alpha和beta的值,而是通过在0

但是我不确定如何在GAMS中设置此最小化问题。 谁能帮我吗?

解决方法

首先,请注意您为u分配的GAMS有一个错误(符号错误)。

在GAMS中,您必须“展开”循环并构建一个大型联立方程组。使用参考中的数据,看起来像这样:

set
  t /t1*t15/
;

parameter y(t) 'data' /
 t1    3
 t2    5
 t3    9
 t4   20
 t5   12
 t6   17
 t7   22
 t8   23
 t9   51
 t10  41
 t11  56
 t12  75
 t13  60
 t14  75
 t15  88
/;


variables
   u(t),v(t),yhat(t),MAE
;
positive variables
   alpha,beta
   abserr(t)
;

alpha.up = 1;
beta.up = 1;


equations
  udef(t)
  vdef(t)
  pred(t)
  abs1(t)
  abs2(t)
  obj
;

u.fx("t1") = y("t1");
v.fx("t1") = 0;
yhat.fx("t1") = 0;

udef(t-1)..  u(t) =e= alpha*y(t)+(1-alpha)*(u(t-1)+v(t-1));
vdef(t-1)..  v(t) =e= beta*(u(t)-u(t-1))+(1-beta)*v(t-1);
pred(t-1)..  yhat(t) =e= u(t-1)+v(t-1);

abs1(t)$(ord(t)>1)..  -abserr(t) =l= yhat(t)-y(t);
abs2(t)$(ord(t)>1)..   yhat(t)-y(t) =l= abserr(t);

obj.. MAE =e= sum(t$(ord(t)>1),abserr(t))/(card(t)-1);

* initial point
alpha.l = 0.4;
beta.l = 0.7;

model m /all/;
option nlp=conopt;
solve m minimizing MAE using nlp;


parameter results(*,*);
results(t,'y') = y(t);
results(t,'u') = u.l(t);
results(t,'v') = v.l(t);
results(t,'yhat') = yhat.l(t);
results(t,'|e|') = abserr.l(t);
display results;
display alpha.l,beta.l,MAE.l;

结果如下:

----     73 PARAMETER results  

              y           u           v        yhat         |e|

t1        3.000       3.000
t2        5.000       3.428       0.370       3.000       2.000
t3        9.000       4.910       1.333       3.798       5.202
t4       20.000       9.184       3.878       6.243      13.757
t5       12.000      12.835       3.681      13.062       1.062
t6       17.000      16.620       3.771      16.516       0.484
t7       22.000      20.735       4.069      20.391       1.609
t8       23.000      24.418       3.735      24.803       1.803
t9       51.000      33.038       7.962      28.153      22.847
t10      41.000      41.000       7.962      41.000
t11      56.000      50.467       9.264      48.962       7.038
t12      75.000      62.996      12.089      59.731      15.269
t13      60.000      71.860       9.298      75.085      15.085
t14      75.000      79.841       8.159      81.158       6.158
t15      88.000      88.000       8.159      88.000


----     74 VARIABLE alpha.L               =        0.214  
            VARIABLE beta.L                =        0.865  
            VARIABLE MAE.L                 =        6.594  

这比link中的报道要好一些。原因是这实际上是一个非凸问题。我验证了CONOPT实际上找到了全局最优解(通过使用全局求解器进行验证)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...