多目标规划可用于求解多于一个目标函数在给定区域上的最优化问题。
定义: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;
说明:求解多目标规划问题
参数:
Fun : 目标函数,函数名字符串
X0 : 初始值
Goal : 目标中各个分目标的差 ,一维数组和目标个数相同
Weight : 目标中各个分量的在总体中的比重,一维数组和目标个数相同
A : 不等式约束,二维数组
B : 不等式约束,一维数组
Aeq : 等式约束,二维数组
Beq : 等式约束,一维数组
Lb : 下界,一维数组
Ub : 上界,一维数组
Nlc : 非线性约束,约束函数名字符串
Options : 算法参数设置,设置和非线性规划一样
例:多目标规划(参见平台下的Prog_M_Demo函数)
目标函数:
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
约束:
a := b := array();
goal := array(1,1) ; //目标约束
wight := array(1,0.5); //目标权重
aeq := array((1,1,1));
beq := array(1); //线性等式约束
lb := array(0,0,0);ub := array(); //上下界约;
非线性约束
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; 等式约束
return array(c,ceq);
end
//初始值
x0 := array(1,1,1);
//算法设定:
options := array('tolx':1.0e-6,'tolcon':1.0e-6,'tolfun':1.0e-6);
//分别设置的变量,约束条件,目标函数的迭代精度;不设置采用默认值
prog_M('Prog_M_Demo.obj',x0,goal,wight,a,b,aeq,beq,lb,ub,'Prog_M_Demo.cons',options);
结果:
array("X":(0.3162,0.1,0.5838),"Fval":(2.0325,-1.7325),"AttainFactor":1.0325,"Error_M":4)