天软金融分析.NET函数大全 > TSL函数 > 数学函数 > 优化

NonLP_Fmincon    

简述
(非线性规划建议统一使用prog_n函数)默认选项只适合于单纯的等式约束问题或者单纯的不等式约束问题,罚函数+转轴法/模式搜索法适合于任何问题,结果返回最优点、最优值和迭代次数。
可求解如下问题:
定义
NonLP_Fmincon(Fun:String;X0:array;A:Array;B:Array;Aeq:Array;Beq:Array; Nonlcon:String;Methods):array
参数
名称类型说明
FunString目标函数表达式,为字符串类型;
x0array初值向量,为一维数组类型;
AArray线性矩阵不等式约束,为二维数组类型;
BArray线性向量不等式约束值,为一维数组类型;
AeqArray线性矩阵等式约束,为二维数组类型;
BeqArray线性向量等式约束值,为一维数组类型;
NonlconString非线性约束回调,为字符串类型;nonlcon回调需用户自己新建一个函数,然后把函数名传进nonlcon,函数格式如下:
Function “函数名”(x);
Begin
C=array();//*
C[0]:=……
C[1]:=……
……
Ceq:=array();//*
Ceq[0]:=……
Ceq[1]:=……
……
Return array(0:c,1:ceq);//*
End;
//*号的式子一定要写
Methods优化方法(0:默认,1:罚函数+转轴法,2:罚函数+模式搜索法),为用户自定义类型(整型);
  • 范例

    {线性不等式约束
      x[0]+x[1] <= 3;
      4*x[0]+x[1]<=9 ; }
      A :=ARRAY((1,1),(4,1));
      B := array(3,9);
      //线性等式约束
      AEQ := ARRAY();
      BEQ := ARRAY();
      // 初始值
    x0:=array(1,1) ;
      //分别设置的变量,约束条件,目标函数的迭代精度;不设置采用默认值
    Return NonLP_Fmincon ('obj',x0,a,b,aeq,beq,'constr',1);

    //目标函数
    Function obj(x);
    Begin
      Return 2*x[0]^2-4*x[0]*x[1]+4*x[1]^2-6*x[0]-3*x[1];
    End;

    //非线性约束:
    function constr(x);
    begin
    ne := array();
    e := array() ;
    ne[0]:= x[0]+x[1]^2-5;//x[0]+x[1]^2<5非线性不等式约束
    e[0]:=x[1]^2+x[0]^2-4;//x[1]^2=4非线性等式约束
    return array(ne,e);
    end

    结果:
    参考
    Prog_N Fmin NonLP_minSUMT NonLP_minPS NonLP_minFactor 
相关