数学规划模型(四)

        在数学规划模型中,还有几种其他的分类,虽然出现频率不是很高,但对于特定的问题求解是很有帮助的。

一.最大最小化模型

        首先我们要先知道什么是最大最小化模型。在实际情况中,尤其是在对策论里,那么什么是对策论呢,对策论其实就是博弈论,我们常常可能会遇到这样的问题:要求我们在最不利的条件下,寻求最有效的策略,这就是最大最小化模型的雏形。

        我们在后面也举出了几个例子,比如求到所有地点最大距离的最小值,或是在投资中确定最大风险时的最低限度的亏损。因此,相比于常规的线性规划和非线性规划,可见约束条件是没有什么区别的,唯一区别的就是目标函数是求一个函数集的最大值。

        具体来看我们的例题,说是一个选址问题。要求我们选一个物品的供应中心,使它到最远需求点的距离尽可能小,可以识别出来,这是一个最大最小化模型的问题。其中,需要注意的是,题目中说明道路网与坐标轴平行,彼此正交,因此这里我们求两个目标的距离应采用沿道路行走计算距离,也就是曼哈顿距离。同时,供应中心的坐标我们是可以取小数的,因为题目已经要求了我们供应中心坐标的约束条件,如果不能取小数的话,我们完全可以用枚举法求出最终的结果。

        这是我们用matlab求解最大最小化模型的函数,可见相比于求解非线性规划问题,唯一有区别的是目标函数,在这里我们的目标函数是用一个函数向量来表示。

        具体的来看我们的代码。

%% 最大最小化模型  :   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 

二.多目标规划模型

        顾名思义,多目标规划模型就是在一个规划问题中有多个目标,即多个目标函数。具体我们用一个例题来理解。

        我们举出了一个例子,要求我们企业在保证利润最大的同时也要保证生产时的污染最少。这种情况就是一个多目标规划的例子,我们有两个目标,一个是利润最大,另一个是污染最少。遇到这种情况,我们需要把多目标函数进行加权组合,使问题变成单目标规划。

        需要注意的是,我们在进行加权组合时,需要把目标函数统一成最大化或最小化问题,比如在我们的例子中,利润最大是最大化问题,污染最少是最小化问题,我们需要把其中一个先转化成另一种形式。

        其次,如果目标函数的量纲不相同,需要将其进行标准化再进行加权。很容易理解,如果目标函数的量纲不同。那么我们进行加权相加是毫无意义的。最后,既然我们要进行加权组合,我们就需要得到各个目标函数的权重。一般这个权重是由专家确定的,但我们在比赛的时候是没有专家的,我们仍可以用之前学过的层次分析法或熵权法来确定权重,但在实际建模中,若无特殊说明,我们可令权重相同。

        我们用具体的一个例题来理解。可见求解起来的步骤与我们常规的线性规划与非线性规划并无区别。具体的求解步骤就用我们的代码来理解。

        这里我们引出了一个概念叫敏感性分析,这有利于我们更好的确定我们的权重。具体的理解参考ppt。

%%  多目标规划问题
w1 = 0.4;  w2 = 0.6;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.5;  w2 = 0.5;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.3;  w2 = 0.7;  % 两个目标函数的权重  x1 = 1  x2 = 6
c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3];  % 线性规划目标函数的系数
A = [-1 -1];  b = -7; % 不等式约束
lb = [0 0]'; ub = [5 6]'; % 上下界
[x,fval] = linprog(c,A,b,[],[],lb,ub)
f1 = 2*x(1)+5*x(2)
f2 = 0.4*x(1) + 0.3*x(2)


%% 敏感性分析
clear;clc
W1 = 0.1:0.001:0.5;  W2 = 1- W1;  
n =length(W1);
F1 = zeros(n,1);  F2 = zeros(n,1);   X1 = zeros(n,1);  X2 = zeros(n,1);   FVAL = zeros(n,1);
A = [-1 -1];  b = -7; % 不等式约束
lb = [0 0]; ub = [5 6]; % 上下界
for i = 1:n
    w1 = W1(i);  w2 = W2(i);
    c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3];  % 线性规划目标函数的系数
    [x,fval] = linprog(c,A,b,[],[],lb,ub);
    F1(i) = 2*x(1)+5*x(2);
    F2(i) = 0.4*x(1) + 0.3*x(2);
    X1(i) = x(1);
    X2(i) = x(2);
    FVAL(i) = fval;
end

% 「Matlab」“LaTex字符汇总”讲解:https://blog.csdn.net/Robot_Starscream/article/details/89386748
% 在图上可以加上数据游标,按住Alt加鼠标左键可以设置多个数据游标出来。
figure(1) 
plot(W1,F1,W1,F2)
xlabel('f_{1}的权重') 
ylabel('f_{1}和f_{2}的取值')
legend('f_{1}','f_{2}')

figure(2)
plot(W1,X1,W1,X2)
xlabel('f_{1}的权重') 
ylabel('x_{1}和x_{2}的取值')
legend('x_{1}','x_{2}')

figure(3)
plot(W1,FVAL)  % 看起来是两个直线组合起来的下半部分
xlabel('f_{1}的权重') 
ylabel('综合指标的值')

              

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值