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;
名称 | 类型 | 说明 |
---|
Fun | Array,TableArray | 目标函数,目标函数名字符串类型,不可缺省。其中,目标函数的返回值必须是一个实数(1x1的矩阵,或长度为1的数组都不允许) |
x0 | Array,TableArray | 初始值,一维数字数组,不可缺省 |
A | Array,TableArray | 不等式约束,二维数组,缺省为空 |
B | Array,TableArray | 不等式约束,一维数组,缺省为空 |
Aeq | Array,TableArray | 等式约束,二维数组,缺省为空 |
Beq | Array,TableArray | 等式约束,一维数组,缺省为空 |
Lb | Array,TableArray | 下界,一维数组,缺省为空 |
Ub | Array,TableArray | 上界,一维数组,缺省为空 |
Nlc | Array,TableArray | 非线性约束,函数名,字符串 |
Options | Array,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