目录
- 前言
- 一、最大最小化模型概述
- 二、模型标准型
- 三、经典例题
前言
本文大部分是对于数学建模清风老师的课程学习总结归纳而来,我的理解可能有错误,大家发现错误可以在评论区批评指正,课程地址:《数学建模清风》
前置文章请了解:
- 《线性规划》
- 《整数规划》
- 《非线性规划》
一、最大最小化模型概述
对策论中,我们常遇到这样的问题:在不利的条件下,寻求最有利的策略。
在实际问题中也有许多求最大值的最小化问题,例如急救中心选址问题,就是要规划其到所有地点最大距离的最小值,在投资规划中要确定最大风险的最低限度等。
为此,对每个 x ∈ R n x\in R^n x∈Rn,我们先求每个目标值 f i ( x ) f_i(x) fi(x)的最大值,然后再求这些最大值中的最小值。
二、模型标准型
最大最小化问题的一般数学模型:
m i n x { m a x [ f 1 ( x ) , f 2 ( x ) , ⋯ , f m ( x ) ] } s . t . { A x ≤ b A e q ⋅ x = b e q C ( x ) ≤ 0 C e q ( x ) = 0 V L B ≤ X ≤ V U B min_x\{max[f_1(x),f_2(x),\cdots,f_m(x)]\} \\ s.t.\begin{cases} Ax\leq b\\ Aeq·x=beq\\ C(x)\leq0\\ Ceq(x)=0\\ VLB\leq X \leq VUB \end{cases} minx{max[f1(x),f2(x),⋯,fm(x)]}s.t.⎩ ⎨ ⎧Ax≤bAeq⋅x=beqC(x)≤0Ceq(x)=0VLB≤X≤VUB
m a t l a b matlab matlab标准型:
[ x , f v a l ] = f m i n i m a x ( @ F u n , x 0 , A , b , A e q , b e q , l b , u b , @ n o n l f u n , o p t i o n ) [x,fval]=fminimax(@Fun,x_0,A,b,Aeq,beq,lb,ub,@nonlfun,option) [x,fval]=fminimax(@Fun,x0,A,b,Aeq,beq,lb,ub,@nonlfun,option)
PS:目标函数用一个函数向量表示。
三、经典例题
选址问题:设某城市有某种物品的10个需求点,第 i i i个需求点 p i p_i pi的坐标为 ( a i , b i ) (a_i,b_i) (ai,bi)(见表4-2),道路网与坐标轴平行,彼此正交。现打算建一个该物品的供应中心,且由于收到城市某些条件的限制,该供应中心只能设在 x x x界于 [ 3 , 8 ] [3,8] [3,8], y y y界于 [ 4 , 10 ] [4,10] [4,10]的范围之内。
问该中心应建在何处为好?
解题思路:
解题代码:
%% 最大最小化模型 : min{max[f1,f2,···,fm]}
x0 = [6, 6]; % 给定初始值
lb = [3, 4]; % 决策变量的下界
ub = [8, 10]; % 决策变量的上界
[x,feval] = fminimax(@Fun,x0,[],[],[],[],lb,ub)
max(feval)
% x =
% 8.0000 8.5000
% feval =
% 13.5000 5.5000 5.5000 12.5000 8.5000 8.5000 5.5000 13.5000 9.5000 0.5000
% 结论:
% 在坐标为(8,8.5)处建立供应中心可以使该点到各需求点的最大距离最小,最小的最大距离为13.5单位。
function f = Fun(x)a=[1 4 3 5 9 12 6 20 17 8];b=[2 10 8 18 1 4 5 10 8 9];% 函数向量f=zeros(10,1);for i = 1:10f(i) = abs(x(1)-a(i))+abs(x(2)-b(i)); end
% f(1) = abs(x(1)-a(1))+abs(x(2)-b(1));
% f(2) = abs(x(1)-a(2))+abs(x(2)-b(2));
% f(3) = abs(x(1)-a(3))+abs(x(2)-b(3));
% f(4) = abs(x(1)-a(4))+abs(x(2)-b(4));
% f(5) = abs(x(1)-a(5))+abs(x(2)-b(5));
% f(6) = abs(x(1)-a(6))+abs(x(2)-b(6));
% f(7) = abs(x(1)-a(7))+abs(x(2)-b(7));
% f(8) = abs(x(1)-a(8))+abs(x(2)-b(8));
% f(9) = abs(x(1)-a(9))+abs(x(2)-b(9));
% f(10) = abs(x(1)-a(10))+abs(x(2)-b(10));
end