说明:fminimax用来求最小的最大值,比如城市建设消防站点时,考虑到最主要的因素是到最远的地方的用时(可换算为距离)最小,比如A方案到6个区域的用时为(1,1,1,1,1,12),B方案到6个区域的用时为(3 4 3 2 3 5),则虽然A方案总体用时较少,但是B方案优于A方案,因为咋该问题中消防安全(对每个区域)权重最大。此时正好用到最小最大值问题。
【例1】设某城市有某种物品的10个需求点,第i个需求点Pi的坐标为(ai,bi),道路网与坐标轴平行,彼此正交。现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在x界于[5,8],y界于[5.8]的范围之内。问该中心应建在何处为好?
P点的坐标为:
ai
1
4
3
5
9
12
6
20
17
8
bi
2
10
8
18
1
4
5
10
8
9
解:设供应中心的位置为(x,y),要求它到最远需求点的距离尽可能小,此处采用沿道路行走计算距离(如图8-1),则数学模型为:
图8-1供应中心到需求点的行走路线图
用MATLAB的fminimax函数进行求解
fun011.m
function f=fun011(x)
m=[1 4 3 5 9 12 6 20 17 8];
n=[2 10 8 18 1 4 5 10 8 9];
str=[repmat(' (',10,1) num2str(m') num2str(n') repmat(')',10,1)];
plot(m,n,'o')
text(m,n,cellstr(str))
hold on
for i=1:10
f(i)=abs(x(1)-m(i))+abs(x(2)-n(i));
end
主函数
fun011yunxing.m
clc
tic
x0=[6;6];
A=[-1 0;1 0;0 -1;0 1];
b=[-5;8;-5;8];
lb=[0;0];
ub=[];
[x,fva,maxfval,exitflag,output]=fminimax(@fun011,x0,A,b,[],[],lb,ub)
plot(x(1),x(2),'r *')
toc
解得:
x =
8
8
fva =
13 6 5 13 8 8 5 14 9 1
maxfval =
14
exitflag =
4
output =
iterations: 3
funcCount: 14
……
时间已过 0.670458秒。
求解的同时我们用图8-2描述了该问题,*点就是所求点。且最小的最大供应距离14为从供应中心(8,8)到需求点(20,10)的距离。
图 8-2需求点及供应中心