【例15】定位问题。
设某城市有某种物品的10个需求点,第i个需求点Pi的坐标为(ai, bi),道路网与坐标轴平行,彼此正交。现打算建一个该物品的供应中心,由于受到城市某些条件的限制,该供应中心只能设在x界于[5,10],y界于[5,10]的范围内。问该中心应建在何处好?
Pi点的坐标为:
ai:1 4 3 5 9 12 6 20 17 8
bi:2 10 8 18 1 4 5 10 8 9
解:设供应中心的位置为(x, y),要求它到最远需求点的距离尽可能小。此处应采用沿道路行走的距离,可知用户Pi到该中心的距离为 | x ai | + | y bi |,从而可得如下模型:
\[\left\{ \begin{matrix} \begin{matrix} {min}_{x,y}\left\{ {max}_{1\leq i\leq m}\left[ \left| x-{a}_{i} \right|+\left| y-{b}_{i} \right| \right] \right\} \\ x\geq5 \end{matrix} \\ x\leq10 \\ y\geq5 \\ y\leq10 \end{matrix} \right.\]
首先,编写一个计算x处10个目标函数的M文件minmax01.m。
code.matlab
function f = myfun(x)
%输入各个点的坐标值。
a=[1 4 3 5 9 12 6 20 17 8];
b=[2 10 8 18 1 4 5 10 8 9];
for i=1:10
f(i)=abs(x(1)-a(i))+abs(x(2)-b(i));
end
然后,输入初值、约束条件并调用优化过程进行计算:
code.matlab
>> x0 = [6; 6]; % 提供解的初值
>> AA=[-1 0
1 0
0 -1
0 1];
>> bb=[-5; 10; -5; 10];
>> [x,fval] = fminimax(@minmax01,x0,AA,bb)
计算结果为:
code.matlab
x =
8.2500
8.2500
fval =
列 1 至 4
13.5000 6.0000 5.5000 13.0000
列 5 至 8
8.0000 8.0000 5.5000 13.5000
列 9 至 10
9.0000 1.0000
可见,在限制区域内的东北部坐标(8.25, 8.25)处设置供应中心,可以使该点到各需求点的最大距离最小。最小的最大距离为13.5个距离单位。