GAMS最大元素

问题描述:

我必须得到GAMS才能找到一个集合的最大元素。这应该导致一些线性回归模型,其中目标不是最小平方而是最小偏差。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 

是的,这是作业,但我完全卡住了。

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

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);