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

Prog_N    

简述
采用拟牛顿下山方法求解非线性规划求解。
Prog_n(fun,x0)
无约束最小值约束
Prog_n(fun,x0,A,B)
非线性不等式约束求解
Prog_n(fun,A,b,Aeq,beq) 
求解不等式约束、等式约束
Prog_n(fun,x0,A,b,Aeq,beq,LB,UB)
求解不等式约束、等式约束、上下界限约束
Prog_n(fun,x0,A,b,Aeq,beq,LB,UB,x0,options)
模型表达
1非线性无约束最小值
min fun(x)
2非线性规划求解
min fun(x)
st.
c(x)<=0;     //非线性不等式约束
ceq(x)=0;    //非线性等式约束
A*x<=b;    //线性不等式约束
aeq*x=beq;   //线性等式约束
lb<=x<=ub ;   //边界约束
定义
Prog_N (Fun:string;x0:array;A:array;B:array;Aeq:array;Beq:array;Lb:array;Ub:array;nlc:string; options):array;
参数
名称类型说明
FunArray,TableArray目标函数,目标函数名字符串类型,不可缺省。其中,目标函数的返回值必须是一个实数(1x1的矩阵,或长度为1的数组都不允许)
x0Array,TableArray 初始值,一维数字数组,不可缺省
AArray,TableArray 不等式约束,二维数组,缺省为空
BArray,TableArray 不等式约束,一维数组,缺省为空
AeqArray,TableArray 等式约束,二维数组,缺省为空
BeqArray,TableArray 等式约束,一维数组,缺省为空
LbArray,TableArray 下界,一维数组,缺省为空
UbArray,TableArray 上界,一维数组,缺省为空
NlcArray,TableArray 非线性约束,函数名,字符串
OptionsArray,TableArray算法参数设置,默认为array('maxiter':400 , //最大迭代次数'maxfunevals':'100*numberofvariables', //目标回调最大次数'tolcon':1.0e-6 ,//约束容忍误差'tolfun' :1.0e-6 ,//目标最小误差'tolx' :1.0e-6 , //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8 )// 差分时最小步长
返回Array,TableArray返回结果:数据表类型ret["X"] : 变量取值,一维数字数组ret["Fval"] :规划目标值,实数ret["Error_M"] : 结果信息,整数,具体含义参考[Prog_L]中的返回信息ret["Iter"] : 迭代次数,整数
  • 范例

    Function UndefineFunc149();
    Begin
    {线性不等式约束
      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();
    {上下界约束:
      0<x[0];0<x[1]
      x[0]<5;x[1]<5 }
      ub := array(5,5);
      lb:= array(0,0);
      // 初始值
    x0:=array(1,1) ;
      //算法设定:
      options:=array('tolx':1.0e-6,'tolcon':1.0e-6,'tolfun':1.0e-6);
      //分别设置的变量,约束条件,目标函数的迭代精度;不设置采用默认值
      Return prog_n('UndefineFunc149.obj',x0,a,b,aeq,beq,lb,ub,'UndefineFunc149.constr',options);
    End;
    //目标函数
    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_L Prog_Q Prog_M NonLP_Fminsearch NonLP_Fminbnd 
相关