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

Prog_M    

简述
求解多目标规划问题
模型表达:
min AttainFactor
st.
f(x)-AttainFactor*wight <=goal  //目标约束
c(x)<=0;           //非线性不等式约束
ceq(x)=0;           //非线性等式约束
A*x<=b;           //线性不等式约束
aeq*x=beq;          //线性等式约束
lb<=x<=ub ;         //边界约束
定义
Prog_M (Fun:string;x0:array;goal:array;weight:array;A:array;B:array;Aeq:array;Beq:array;Lb:array;Ub:array;nlc:string;options):array;
参数
名称类型说明
FunArray,TableArray 目标函数,函数名字符串
X0Array,TableArray 初始值
GoalArray,TableArray 目标中各个分目标的差,一维数组和目标个数相同
WeightArray,TableArray 目标中各个分量的在总体中的比重,一维数组和目标个数相同
AArray,TableArray 不等式约束,二维数组
BArray,TableArray 不等式约束,一维数组
AeqArray,TableArray 等式约束,二维数组
BeqArray,TableArray 等式约束,一维数组
LbArray,TableArray 下界,一维数组
UbArray,TableArray 上界,一维数组
NlcString 非线性约束,约束函数名字符串
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 UndefineFunc147();//主函数
    Begin
      goal := array(1,1) ;// 目标约束
      wight := array(1,0.5); //目标权重
      //线性等式约束
      aeq := array((1,1,1));
      beq := array(1);
      //上下界约束
      lb := array(0,0,0);
      ub := array() ;
      //初始值
      x0 := array(1,1,1);
      //算法设定
      options:=array('tolx':1.0e-6,'tolcon':1.0e-6,'tolfun':1.0e-6);
      //线性不等式约束
      A :=ARRAY((1,1),(4,1));
      B := array(3,9);
    Return prog_M('UndefineFunc147.obj',x0,goal,wight,a,b,aeq,beq,lb,ub,'UndefineFunc147.cons',options);
    End;
    function obj(x);//目标函数
    begin

    f1 :=-3*x[0]-x[1]-5*x[2]+6; //目标1
      f2 :=3*x[0]+4*x[1]+5*x[2]-6; //目标2
      f :=array(f1,f2);
      return f;
    end
    function cons(x);//约束条件
    begin
      c := array();
      c[0] := x[0]^2- x[1]; // x[0]^2<=x[1]; 不等式
      ceq := array();
      ceq[0] := x[0]^2-0.1; // x[0]^2=0.1; 等式约束
      ceq[1] := x[1]^2-0.3; // x[1]^2=0.3; 等式约束
      return array(c,ceq);
    end

    结果:
    参考
    Prog_L Prog_Q Prog_N NonLP_Fminsearch NonLP_Fminbnd 
相关