【数学建模】优化模型——规划模型

在数学建模中,优化类问题是很常见的一种问题。这种问题里面通常涉及多个变量约束条件,并需要在这些变量和条件之下优化某个函数。最常见的例子就是,“达到最好效果”、“取得最大利润”、“极大降低风险”等等。遇到这类字眼,应首先考虑优化模型求解。

对于优化类模型,又细分为不同的算法来解决问题。常见的算法有:规划模型微分方程模型图论网络优化概率智能优化算法等。其中,规划模型是最基础的模型,是其他算法底层的根本原理,因此要想深入掌握其他模型,首先要学会规划模型。这篇文章就详细介绍一下规划模型。
在这里插入图片描述

1 概述

1.1 什么是数学规划

数学规划是运筹学的一个分支,用来研究:在给定的条件(约束条件)下,如何按照某一衡量指标(目标函数)来寻求计划、管理、工作中的最优方案。通俗来讲就是:求目标函数在一定约束条件下的极值问题

1.2 一般形式

m i n ( o r min(or min(or m a x ) max) max) z = f ( x ) z=f(x) z=f(x)
s . t . ( s u b j e c t s.t.(subject s.t.(subject t o ) to) to) g i ( x ) ≤ 0 , i = 1 , 2 , . . . g_i(x)≤0,i=1,2,... gi(x)0,i=1,2,...
其中, x x x决策变量(一般多个), f ( x ) f(x) f(x)目标函数

这样的形式有些抽象,下面详细展开各类数学规划问题。

2 线性规划

目标函数 f ( x ) f(x) f(x)和约束条件均是决策变量的线性表达式——线性规划(Linear Programming)。
举个例子:
在这里插入图片描述
我们使用Matlab中的内置函数linprog来求解,底层实现原理为单纯形法,不做过多展开。这里需要一定的线性代数基础,先来看一下函数原型:

[x, fval] = linprog(c, A, b, Aeq, beq, lb, ub, X0)

解释一下其参数:

  1. X0表示给定matlab迭代求解的初始值(一般不用给出);
  2. c,A,b,Aeq,beq,lb,ub为标准型,下面详细说明;
  3. 返回值x表示最小值处x的取值,fval表示最优解处取得的最小值;

标准型
在这里插入图片描述

注意事项

  1. 若不存在不等式约束(即$ A X ≤ b )或 ∗ ∗ 等式约束 ∗ ∗ (即 AX≤b)或**等式约束**(即 AXb)或等式约束(即AeqX=beq$)可以用”[]“代替A、b、Aeq、beq;
  2. 若某个x无下界或上界,可以用-inf(无穷小)和inf(无穷大)来约束;
  3. 不是所有问题都有唯一解,可能无解有无穷多解
  4. 如果求的是 m a x max max,可以先将目标函数两侧取负号化为标准型 m i n min min,再进行求解。

根据标准型,给出上面例子的matlab代码:

clear; clc
c = [-5 -4 -6]'; % '表示转置
A = [1, -1, 1
     3, 2, 4
     3, 2, 0];
b = [20 42 30]';
lb = [0 0 0]';
[x fval] = linprog(c, A, b, [], [], lb) % ub作为缺省参数,可以省略

运行即可得到结果:最小值fval为-78

3 非线性规划

顾名思义,目标函数和约束条件中存在非线性表达式。下面是一道例题:
在这里插入图片描述
我们使用Matlab中的内置函数fmincon来求解。下面是函数原型:

[x, fval] = fmincon(@fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option)

注意事项

  1. 非线性规划中初始值X0的选取非常重要,因为其算法最终得到的是一个局部最优解
  2. 要求解全局最优解,建议使用蒙特卡罗模拟得到一个蒙特卡罗解,然后用这个解作为初始值来求全局最优解;
  3. option选项可以给定求解的算法,一共有四种:interior-point(内点法);SQP(序列二次规划法);active-set(有效集法)以及trust-region-reflective(信赖域反射算法),各有各的优点,建议都都尝试一下
  4. @fun表示目标函数,需要编写一个独立的文件来存储目标函数:
    function f = fun(X)
    	% f = ...
    end
    
  5. @nonlfun表示非线性约束部分,同样需要编写一个独立文件:
    function [C, Ceq] = nonlfun(X)
    	% C = [非线性不等式约束1;
    		   ...
    		   非线性不等式约束n;]
    	% Ceq = [非线性等式约束1;
    		     ...
    		     非线性等式约束m;]
    end
    

标准型
在这里插入图片描述
根据标准型,给出上面matlab代码:

% 文件fun.m
function f = fun(x)
    f = -x(1) ^ 2 - x(2) ^ 2 + x(1) * x(2) + 2 * x(1) + 5 * x(2);
end

% 文件nonlfun.m
function [c, ceq] = nonlfun(x)
    c = [(x(1) - 1) ^ 2 - x(2)];
    ceq = []; % 不存在非线性等式约束
end

% 文件main.m
clear; clc
format long g
x0 = [0, 0]; % 这里为了简便,随机给定一个初始值
A = [-2 3];
b = 6;
[x, fval] = fmincon(@fun, x0, A, b, [], [], [], [], @nonlfun)
fval = -fval

运行即可求解fval近似为-1。

改变求解算法的代码

% 以内点法为例
option = optimoptions('fmincon','Algorithm','interior-point')

4 整数规划

整数规划即为对数学规划加上变量取值必须为整数这一约束条件。其中,有线性整数规划和非线性整数规划两种问题。对于非线性整数规划,没有特定的算法来求解,只能使用近似算法(蒙特卡罗模拟、智能算法等),这里主要讲述线性整数规划。

对于线性整数规划,我们使用matlab内置函数intlinprog进行求解。其函数原型为:

[x, fval] = intlinprog(c, intcon, A, b, Aeq, beq, lb, ub) % 新版还有初始值参数X0,可以不指定

其参数含义和linprog类似,唯一不同的是intcon参数可以指定哪些变量是整数
例如:

% x1, x2, x3 其中x1,x3是整数
intcon = [1, 3];

0-1规划即在整数规划的基础上,变量取值只有0或1。典型例子为0-1背包问题,感兴趣的同学可以自行查阅相关题目。求解方法也很简单,只需要对约束变量的上下界设置为 [ 0 , 1 ] [0,1] [0,1]即可

由于整数规划求解函数和线性规划非常类似,这里就不进行例题演示。

5 最大最小化模型

这个模型起源于对策论中,在最不利的环境下,寻求最有利的策略的问题。下面是这类问题的一般数学模型:
在这里插入图片描述
我们使用matlab中的内置函数fminimax来求解,下面是函数原型:

[x, fval] = fminimax(@Fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option);

其函数参数和非线性规划函数fmincon类似,唯一不同的是第一个参数@Fun,代表目标函数 f 1 ( x ) , f 2 ( x ) , . . . , f m ( x ) f_1(x),f_2(x),...,f_m(x) f1(x),f2(x),...,fm(x),其作为一个向量表示,代码操作如下:

function f = Fun(x)
	f = zeros(m, 1)
	% f(1) = ...
	% f(2) = ...
	% ...
	% f(m) = ,,,
end

6 多目标规划

顾名思义,即在一个规划问题中有多个目标。这种情况下,我们需要对多木雕进行加权组合,把问题转化为单目标规划。举个例子:工厂生产时,既要考虑利润,也要考虑污染

注意事项

  1. 要将多个目标函数统一为最大化或最小化问题才可以进行加权组合
  2. 注意量纲问题,多个函数由于量纲不同,不能直接加权。例如,污染指标和利润指标明显不是一个数量级。常用做法是:用目标函数除以某一个常量,该常量是目标函数的一个取值,根据经验确定

【例题】
在这里插入图片描述
首先要对目标函数进行加权组合,这里我们假设权重分别为0.4和0.6。用目标函数除以参考值以消除量纲:
f = 0.4 × f 1 30 + 0.6 × f 2 2 f=0.4×\frac{f_1}{30}+0.6×\frac{f_2}{2} f=0.4×30f1+0.6×2f2
然后就得到了一个单目标规划问题,根据上文的求解方法求解即可。

下面还有重要的一步就是进行敏感性分析。敏感性分析指的是从定量分析的角度研究有关因素发生变化对某一个或一组关键指标影响程度的一种不确定分析技术。说白了就是改变相关变量的数值来解释关键指标受影响大小的规律
在这个问题中,我们需要改变 f 1 f_1 f1 f 2 f_2 f2的权重,来观察对结果的影响。这里我们逐渐改变其权重,记录得到的 x 1 x_1 x1 x 2 的值 x_2的值 x2的值,最终得到的图像(代码部分交给大家自己实现):
在这里插入图片描述

根据我们得到的结果,发现在0.333到0.334发生了突变,最后结合实际问题做出解释即可。

  • 41
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数学建模评价模型的算法包括层次分析法(AHP)、优劣解距离法(Topsis法)、灰色关联分析和模糊综合评价模型。层次分析法是一种多因素、多层次的复杂问题评判方法,通过对各因素的重要性进行层次化排序,得出最终的评价结果。\[1\]优劣解距离法是一种基于多指标评价的方法,通过计算评价对象与最优解和最劣解之间的距离,得出评价结果。\[1\]灰色关联分析是一种综合评价方法,通过对各指标之间的关联程度进行分析,得出评价结果。\[1\]模糊综合评价模型是一种综合评价方法,通过模糊数学理论对评价对象进行模糊化处理,得出评价结果。\[2\]这些算法都有各自的特点和适用范围,可以根据具体问题的需求选择合适的算法进行评价。这些算法的计算过程相对简单,易于理解和掌握,可以有效地评价具有大量未知信息的系统。\[3\] #### 引用[.reference_title] - *1* [数学建模 —— 评价模型](https://blog.csdn.net/qq_52928524/article/details/126469920)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【数学建模】评价模型](https://blog.csdn.net/ELSA001/article/details/117884995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值