matlab fminimax 多变量,MATLAB求多目標優化問題——fminimax
一、 fminimax函數求解的模型minmax { f1, f2, f3, ……, f3}s.t. AX <= b (線性不等式約束)AeqX = beq (線性等式約束)C(X) <= 0 (非線性不等式約束條件)Ceq(X) = 0 (非線性等式約束)Lb <= X <= Ub (邊界約束條件)二、 fminimax函數用法說明1. 調用格式x = fminimax.
一、 fminimax函數求解的模型
minmax { f1, f2, f3, ……, f3}
s.t. AX <= b (線性不等式約束)
AeqX = beq (線性等式約束)
C(X) <= 0 (非線性不等式約束條件)
Ceq(X) = 0 (非線性等式約束)
Lb <= X <= Ub (邊界約束條件)
二、 fminimax函數用法說明
1. 調用格式
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,fval,maxfval] =fminimax(…)
[x,fval,maxfval,exitflag]= fminimax(…)
[x,fval,maxfval,exitflag,output]= fminimax(…)
[x,fval,maxfval,exitflag,output,lambda]= fminimax(…)
2. 參數說明
(1)fun為目標函數;
(2)x0為初始值;
(3)A、b滿足線性不等約束 ,若沒有不等約束,則取A=[ ],b=[ ];
(4)Aeq、beq滿足等式約束 ,若沒有,則取Aeq=[ ],beq=[ ];
(5)lb、ub滿足 ,若沒有界,可設lb=[ ],ub=[ ];
(6)nonlcon的作用是通過接受的向量x來計算非線性不等約束 和等式約束分別在x處的值C和Ceq,通過指定函數柄來使用,如:
>>x =fminimax(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非線性約束函數,並保存為mycon.m:function[C,Ceq] = mycon(x)
C = … % 計算x處的非線性不等約束 的函數值。
Ceq = … % 計算x處的非線性等式約束 的函數值。
(7)options為指定的優化參數;
(8)fval為最優點處的目標函數值;
(9)maxfval為目標函數在x處的最大值;
(10)exitflag為終止迭代的條件;
(11)lambda是Lagrange乘子,它體現哪一個約束有效。
(12)output輸出優化信息。
三、 實例
設某城市有某種物品的10個需求點,第i個需求點Pi的坐標為(ai,bi),道路網與坐標軸平行,彼此正交。現打算建一個該物品的供應中心,且由於受到城市某些條件的限制,該供應中心只能設在x界於[5,8],y界於[5.8]的范圍之內。問該中心應建在何處為好?
P點的坐標為:
1. 題目分析
設供應中心的位置為(x,y),要求它到最遠需求點的距離盡可能小,則數學模型為:
2. fminimax函數參數分析
3. MATLAB代碼
(1)主函數文件
%求解極大值的極小值的主函數 main.m:
clear;
clc;
%x初始值,隨意設定
x0=[6;6];
%線性不等式約束AX <= b
A=[-10;1 0;0 -1;0 1];
b=[-5;8;-5;8];
%線性等式約束AeqX = beq
Aeq=[];
Beq= [];
%邊界約束條件Lb <= X <= Ub
lb=[0;0];
ub=[];
[x,fva,maxfval,exitflag,output]=fminimax(@myfun,x0,A,b,Aeq, Beq,lb,ub)
plot(x(1),x(2),'bo') % 圖中標出要求的點
(2)目標函數文件
%目標函數文件 myfun.m:
functionf=myfun(x)
x1=[14 3 5 9 12 6 20 17 8];
x2=[210 8 18 1 4 5 10 8 9];
str=[repmat('(', 10, 1) num2str(x1') num2str(x2') repmat( ')', 10, 1) ];
plot(x1,x2,'*r');%畫出10個需求點
text(x1,x2,cellstr(str)); %給10個需求點標出坐標
hold on;
%返回10個需求點的各自的目標函數
fori=1:10
f(i)=abs(x(1)-x1(i))+abs(x(2)-x2(i));
end
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)