《零基础数学建模》——最大最小化模型

本文介绍了最大最小化模型在对策论和实际问题中的应用,如急救中心选址,通过求解最大值的最小化问题来确定最优策略。文章详细阐述了模型的标准形式,并提供了MATLAB实现的代码示例,解决了一个具体的选址问题,找到使得最大距离最小化的供应中心位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​ 前言

本文大部分是对于数学建模清风老师的课程学习总结归纳而来,我的理解可能有错误,大家发现错误可以在评论区批评指正,课程地址:《数学建模清风》
前置文章请了解:


一、最大最小化模型概述

  对策论中,我们常遇到这样的问题:在不利的条件下,寻求最有利的策略。
  在实际问题中也有许多求最大值的最小化问题,例如急救中心选址问题,就是要规划其到所有地点最大距离的最小值,在投资规划中要确定最大风险的最低限度等。
  为此,对每个 x ∈ R n x\in R^n xRn,我们先求每个目标值 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. AxbAeqx=beqC(x)0Ceq(x)=0VLBXVUB
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:10
        f(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 

### 实现最大最小化模型 为了实现最大最小化模型,可以利用 `scipy` 库中的优化功能来解决这一类问题。具体来说,可以通过转换目标函数的方式将其转化为标准形式的最优化问题。 对于最大最小化问题,通常的做法是定义一个新的变量 \( z \),该变量代表所有可能情况下的最大值。接着通过约束条件确保每一个单独的情况都不会超过这个新的变量 \( z \)。最终的目标就是最小化这个新引入的变量 \( z \)[^4]。 下面是一个简单的例子,展示如何使用 `scipy.optimize.minimize` 函数处理这类问题: ```python import numpy as np from scipy.optimize import minimize def objective(z, x): """ 定义目标函数 """ return z # 目标是最小化z def constraint1(z, x): """ 约束条件:每个x_i对应的f(x_i)<=z """ f_x = lambda xi: (xi - 2)**2 + 1 # 假设这是某个特定场景下计算得到的结果 return z - max([f_x(xi) for xi in x]) n = 5 # 设定有五个不同位置/情形需要考虑 x_values = np.random.rand(n) cons = ({'type': 'ineq', 'fun': lambda z: constraint1(z, x_values)}) bnds = [(None, None)] # 对于z没有特别边界限制 solution = minimize(objective, x0=0, args=(x_values,), method='SLSQP', bounds=bnds, constraints=cons) print("最优解:", solution.x) ``` 这段代码展示了当给定了多个输入点时,怎样找到一个单一数值 \( z \),它能够作为这些输入点所对应输出的最大上界,并且使这上界的取值尽可能的小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值