GAMS maximum element



我必须得到GAMS来找到集合的最大元素。这应该会产生一些线性回归模型,其中目标不是最小二乘,而是最小最大偏差。

我的数据点是(x(p), y(p))点(有Set p / p1*p1000 / ;给定)。我设法解决了由阿姆斯特丹优化所描述的回归模型:

Variables
  m            Slope
  b            Constant
  objVal       Objective Value
;
Equations
  objFun       Objective Function
  lin(p)       Regression Model
;
objFun ..      objVal =n= 0;
lin(p) ..      y(p) =e= m * x(p) + b;
option lp=ls;
Model Regression / objFun, lin / ;
Solve Regression minimizing objVal using lp;

但是我应该交的是像

这样的东西
Variables
  m            Slope
  b            Constant
  objVal       Objective Value
;
Equations
  objFun       Regression Model
;
objFun ..      objVal =e= smax(p, abs( y(p) - (m * x(p) + b) ));
Model Regression / objFun / ;
Solve Regression minimizing objVal using lp;

当然你可以读,但GAMS讨厌它:

2031  Solve Regression minimizing objVal using lp;
****                                             $51,59,256
Error Messages
 51  Endogenous function argument(s) not allowed in linear models
 59  Endogenous prod smin smax require model type "dnlp"
256  Error(s) in analyzing solve statement. More detail appears
     Below the solve statement above

是的,这是家庭作业,然而我完全卡住了。

事实证明,最大值可以很容易地处理:

objFun ..      objVal =e= smax(p, abs( y(p) - (m * x(p) + b) ));

等价于

objFun(p) ..   objVal =g= abs( y(p) - (m * x(p) + b) );

现在GAMS不喜欢abs()在线性模型中使用的原因很明显,但记住x > abs(y)意味着(x > y) AND (x > -y),所以:

objFun1(p) ..  objVal =g= y(p) - (m * x(p) + b);
objFun2(p) ..  objVal =g= -( y(p) - (m * x(p) + b) );

最终(规范一致性):

objFun1(p) ..  objVal + x(p) * m + b =g= y(p);
objFun2(p) ..  objVal - x(p) * m - b =g= -y(p);

相关内容

  • 没有找到相关文章

最新更新