问题描述
这可能是一个菜鸟问题,但我正在尝试最小化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):
我可以在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实际上找到了全局最优解(通过使用全局求解器进行验证)。