最大最小化应用实例

【例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 =
  列 14
   13.5000    6.0000    5.5000   13.000058
    8.0000    8.0000    5.5000   13.5000910
    9.0000    1.0000

可见,在限制区域内的东北部坐标(8.25, 8.25)处设置供应中心,可以使该点到各需求点的最大距离最小。最小的最大距离为13.5个距离单位。