1

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

我的数据点是(x(p), y(p))点(有Set p / p1*p1000 / ;给出)。我设法解决了amsterdamoptimization描述的回归模型:

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

是的,这是家庭作业,但我完全被困住了。

4

1 回答 1

1

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

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)mean (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);
于 2014-07-06T21:36:36.493 回答