一、算法原理

对于多目标优化问题,matlab提供了fminimax函数。

1、目标函数: 

多目标优化算法 java 多目标优化算法matlab_几何学

  ,Z为多目标优化函数             s.t  

多目标优化算法 java 多目标优化算法matlab_算法_02

                  

多目标优化算法 java 多目标优化算法matlab_算法_03

                   

多目标优化算法 java 多目标优化算法matlab_动态规划_04

                  

多目标优化算法 java 多目标优化算法matlab_动态规划_05

                  

多目标优化算法 java 多目标优化算法matlab_线性代数_06

2、调用格式

x = fminimax(fun,x0)  
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fminimax(problem)

fun为多目标函数文件,x0为初始点,A为等式约束系数矩阵,Aeq为等式约束稀疏矩阵,lb,ub分别为最优解x的下限和上限,nonlcon为非线性约束,option为选项设置,返回值x为最优点。
[x,fval] = fminimax(...),返回解x处目标函数fun的值。
[x,fval,maxfval] = fminimax(...),返回在解x中求值的输入fun中目标函数的最大值。
[x,fval,maxfval,exitflag] = fminimax(...),返回一个值exitflag,该值描述了fminimax的退出条件。
[x,fval,maxfval,exitflag,output] = fminimax(...),返回包含有关优化信息的结构输出。
[x,fval,maxfval,exitflag,output,lambda] = fminimax(...),返回结构lambda,其字段包含解x处的拉格朗日乘数。

3、 如图所示,求到A,B,C,D,E五个点的距离都比较近的点。

多目标优化算法 java 多目标优化算法matlab_几何学_07

例二、存在不等式约束,其解的范围为[5,6]即x1∈(5,6)  x2∈(5,6)。

例三、存在等式约束,其解在x1-x2+1=0这条直线上。

例四、存在非线性约束,其解在x1^2-x1-x2+2=0,圆心为(5,5)半径为3的圆内。

matlab代码

%% 最大最小化
function d=demo_9_23_1(x) %目标函数文件
d(1)=sqrt((x(1)-2)^2+(x(2)-10)^2);
d(2)=sqrt((x(1)-5)^2+(x(2)-13)^2);
d(3)=sqrt((x(1)-8)^2+(x(2)-9)^2);
d(4)=sqrt((x(1)-3)^2+(x(2)-8)^2);
d(5)=sqrt((x(1)-6)^2+(x(2)-6)^2);

%% x = fminimax(fun,x0)
x0=[5;5];
[x,fval]=fminimax(@demo_9_23_1,x0)

%例二,存在不等式约束
%% x = fminimax(fun,x0,A,b)  有线性不等式约束 
x0=[5.5;5.5];
A=[1 0;
   -1 0;
   0 1;
   0 -1;];
b=[6;-5;6;-5];
[x,fval]=fminimax(@demo_9_23_1,x0,A,b)
%例三 粗壮乃等式约束
%% x = fminimax(fun,x0,A,b,Aeq,beq) %线性等式约束
x0=[5.5;5.5];
Aeq=[1 -1;];
beq=[-1];
[x,fval]=fminimax(@demo_9_23_1,x0,[],[],Aeq,beq)
%例二的不等式约束也可以写成如下形式
%% x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub) %解向量的上下限
x0=[5.5;5.5];
[x,fval]=fminimax(@demo_9_23_1,x0,[],[],[],[],[5;5],[6;6])
%例四。非线性约束
%% x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) %非线性约束
%nonlcon存放非线性约束
x0=[5.5;5.5];
[x,fval]=fminimax(@demo_9_23_1,x0,[],[],[],[],[],[],@demo_9_23_2)