Python在数学建模当中的应用(未完)

施法前摇:高等数学、线性代数、概率与数理统计、数值计算等.

1 函数极值与规划模型

1.1 线性规划模型

1.1.1 线性代数预备知识

  • 线性代数的本质
  1. 问题是线性的
  2. 约束是线性的

线性代数主要用于解决线性关系问题.

  • 行列式(求解线性方程组)

        I.二阶行列式与对角线法则

\left | \begin{matrix} a_{11} &a_{12}\\ a_{21} &a_{22} \end{matrix} \right | =a_{11}a_{22}-a_{12}a_{21}

        II.逆序数


p_1p_2\cdots p_n1,2,\cdots,nn个自然数的任意排列,并规定从小到大为标准次序.

先看有多少个比p_1大的数排在p_1前面,记为t_1
再看有多少个比p_2大的数排在p_2前面,记为t_2
......
最后看有多少个比p_n大的数排在p_n前面,记为t_n
则此排列的逆序数为t=t_1+t_2+\cdots+t_n.
 

        III.n阶行列式

D=\left | \begin{matrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{matrix} \right | =\sum_{p_1p_2\cdots p_n}a_{1p_1}a_{2p_2}\cdots a_{np_n} = \det(a_{ij})

其中a_{ij}为行列式D(i,j)元.

注意:

一阶行列式 |-1|=-1

        IV.行列式的性质

  1. 行列式与它的转置行列式相等
  2. 互换行列式的两行(列),行列式变号
  3. 行列式的某一行(列)中所有的元素都乘以同一个倍数k,等于用数k乘以此行列式
  4. 行列式中如果有两行(列)元素成比例,则此行列式为零;即:若存在一个常数k,使a_{i1}=ka_{j1},a_{i2}=ka_{j2},\cdots,a_{in}=a_{jn},则D=0
  5. 若行列式的某一列(行)的元素都是两数之和,则等于对应的两个行列式之和

        V.行列式的计算

        VI.方阵的行列式

注意区分行列式、方阵、矩阵、方阵的行列式.

方阵是一个二维数组,其中每个元素是一个一维数组,其行数与列数相同,即方阵是“n^2个数按照一定方式排成的数表”;

  • 矩阵

        I.矩阵与线性变换:系数矩阵

        II.矩阵的运算:矩阵的加法(同型矩阵)、数乘矩阵、矩阵与矩阵相乘

        III.转置矩阵运算规律

把矩阵\mathbf{A}的行换成同序数的列得到一个新矩阵,叫作\mathbf{A}的转置矩阵,记为\mathbf{A^T}.

\mathbf (1)(A^T)^T=A\\ (2)(A+B)^T=A^T+B^T\\ (3)(\lambda A)^T=\lambda A^T\\ (4)(AB)^{T}=B^TA^T

        IV.单位矩阵、纯量阵

单位矩阵在矩阵乘法中的作用类似于数1,即:


E_m A_{m\times n} = A_{m\times n}E^{n}=A

  • 特征值与特征向量

1.1.2 Python预备知识

线性规划及Python实现 - 知乎

1.1.3 运用python进行矩阵的运算

#引入numpy库
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2],[3,4],[5,6]])
c = np.array([[1,2,3]])
d = np.array([[9,8,7],[3,2,1]])

#矩阵加法
sum  = a + d

#矩阵放缩
e = 3*a

#数乘,矩阵乘
e = np.dot(a,b)

#元素乘
e = a*d 

#转置
e = c.T
e = np.array([[1,2],[3,4]])

#逆矩阵
result = np.linalg.det(e)

#矩阵的秩
e = np.linalg.matrix_rank(d)

1.1.4 线性规划标准形式

  • 存在不等约束时变换可应用松弛变量
  • 规划问题的核心在于决策变量,目标函数和约束条件

松弛变量用于将约束条件转化为等式,是简化问题的一种方式.

在线性规划问题中,每个问题都可以表示为一个等式,若出现需要将小于等于的约束条件转化为等式的情况,就需要引入松弛变量.

引入松弛变量后,我们可以在更大的可行域内求解问题,同时保持问题的凸性.

举个栗子:

若有eq?g%28x%29%5Cleq0,令eq?g%28x%29%20+%20s%20%3D%200,其中eq?s即为松弛变量,其取值范围为非负实数.

什么时候需要引入松弛变量?

  1. 需要将线性规划化成标准形式
  2. 遇到绝对值问题
  3. 不等式过多,甚至出现非线性不等关系

标准形式之一(规范式):

eq?%5Cmin%20c%5ET%5C%5C%20%5C%5C%20s.t.%5Cbegin%7Bcases%7D%20Ax%5Cleq%20b%5C%20%26%5B1%5D%5C%5C%20Aeq%5Ccdot%20x%3Dbeq%5C%20%26%5B2%5D%5C%5C%20Ib%5Cleq%20x%5Cleq%20ub%5C%20%26%5B3%5D%20%5Cend%7Bcases%7D

把方程组改写成矩阵形式.

决策变量,目标函数,约束条件

  • 不等式组条件的矩阵化     [1]
  • 方程组条件的矩阵化         [2]
  • 每个变量自己的取值范围  [3]
  • 目标函数的向量化  
  • 取极值

标准形式之二(一般式):

eq?%5Cmax%20z%20%3D%20c%5ETX%5C%5C%20%5C%5C%20s.t.%5Cbegin%7Bcases%7D%20A%5Cwidetilde%7BX%7D%20%3D%20b%5C%5C%20%5Cwidetilde%7BX%7D%5Cgeq%200%20%5Cend%7Bcases%7D

1.1.5 图解法(找出凸集的顶点)

 图解法简单直观,有助于了解线性规划问题求解的基本原理。

注意图解法只适用于有两个决策变量的问题.

可行域一定是凸集.

【运筹学】课程精讲 |1.1 线性规划问题-图解法_哔哩哔哩_bilibili

  • 图解法求解步骤(以存在唯一最优解的情况为例)
  1. 由全部约束条件作图求出可行域(绘制约束条件的函数图线,找出满足所有约束条件的平面区域)
  2. 作目标函数等值线,确定使目标函数最优的移动方向(赋予目标函数一个值,绘制等值线的函数图像,作出移动方向的法线)
  3. 平移目标函数的等值线,找出最优点,算出最优值(将目标函数图线沿着法线平移,直到与可行域有且仅有一个交点

如果不能通过平移使目标函数与可行域有且仅有一个交点,那么就不存在唯一最优解,而存在无穷多最优解.

如果无论如何平移目标函数都始终与可行域交点数量相同,那么就存在无界解,出现这种情况时,建模是不完备的,需要找出更多约束条件.

当可行域为空集时,存在无解或无可行解,出现这种情况时,往往是在建模时写下了两个相互矛盾的约束条件.

1.1.6 康-希表上作业法(运输问题)

某商品有m个产地、n个销地,各产地的产量分别为a_1,\cdots,a_m,各销地的需求量分别为b_1,\cdots,b_n.若该商品由i产地运到j销地的单位运价为c_{ij},问应该如何调运才能使总运费最省?

解:引入变量x_{ij},其取值为由i产地运往j销地的该商品数量,数学模型为

\min \sum_{i=1}^{m}\sum_{j=1}^{n}c_{ij}x_{ij}\\ s.t. \begin{cases} \sum_{n}^{j=1}x_{ij} = a_i,i=1,\cdots,m\\ \sum_{i=1}^{m}x_{ij}=b_j,j=1,2,\cdots,n\\ x_{ij}\geq0 \end{cases}

1.1.7 单纯形法(向量和基分解)

固定变量,变换基向量求方程组带入,检验是否为最优解.

单纯形法要求约束条件都为等式,因此需要引入松弛变量

eq?maximize%3Az%3Dx_1+2x_2%5C%5C%20subject%5C%20to%3A%20%5Cbegin%7Bcases%7D%20-3x_1%20+2x_2%5Cleq%203%5C%5C%20x_1%20+x_2%5Cleq%202%5C%5C%20x_1-x_2%5Cleq1%5C%5C%20x_1%2Cx_2%5Cgeq0%20%5Cend%7Bcases%7D%5CRightarrow      eq?maximize%3Az%3Dx_1+2x_2%5C%5C%20subject%5C%20to%3A%20%5Cbegin%7Bcases%7D%20x_3%3D3+3x_1%20-2x_2%5C%5C%20x_4%3D2-x_1%20-x_2%5C%5C%20x_5%3D1-x_1-x_2%5C%5C%20x_1%2Cx_2%2Cx_3%2Cx_4%2Cx_5%5Cgeq0%20%5Cend%7Bcases%7D

1.1.8 蒙特卡洛法(以频率估计概率)

在可行域范围内生成大批量随机数据点,观测这些数据点在什么位置取得近似最优;但由于线性问题可以得到准确解,因此蒙特卡洛法更适用于解非线性问题.

1.2 整数规划模型

1.2.1 0−1型整数规划


0-1型整数规划是整数规划中的特殊情形,它的变量x_{j}仅取值0或1;这时x_{j}
为0-1变量,或称二进制变量;x_{j}仅取值0或1这个条件可由下述约束条件: 0\leq x_{j}\leq1,整数所代替,是和一般整数规划的约束条件形式一致的.

1.2.2 分枝定界法(可求纯或混合整数线性规划)

求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等.

1.2.3 割平面法(可求纯或混合整数线性规划)

1.2.4 隐枚举法(求解0-1整数规划)

  • 过滤隐枚举法
  • 分枝隐枚举法

1.2.5 匈牙利法(解决指派问题)

1.2.6 蒙特卡洛法(求解各种类型规划)

1.3 非线性规划模型

在线性规划的基础上,目标函数可以非线性,限制条件可以非线性,包括非线性的不等式和非线性的等式.

太地狱了,这是matlab的代码,不是python的.

eq?%5Cmin%20f%28x%29%5C%5C%20%5Cbegin%7Bcases%7D%20Ax%5Cleq%20B%5C%5C%20Aeq%5Ccdot%20x%20%3D%20Beq%5C%5C%20C%28x%29%5Cleq%200%20%5C%5C%20Ceq%28x%29%3D0%20%5Cend%7Bcases%7D

1.3.1 高等数学预备知识

  • 多元函数
  1. 多元函数的微分
  2. 多元函数的极值

  • 拉格朗日乘子法与KKT

类比松弛变量的思想.

1.3.2 二次规划基本形式

目标函数形式如果是一个二次函数,那么就是一个二次规划.

eq?%5Cmin%20f%3D2x_1%5E2+3x_1x_3-x_2%5E2%5C%5C%20s.t.%20%5Cbegin%7Bcases%7D%20x_1%5E2%20-2x_2+3x_3%3D4%5C%5C%20x_1+x_2-x_3%5Cleq6%5C%5C%202x_1-x_2+x_3%5Cleq15%5C%5C%20x_1%2Cx_2%2Cx_3%3E0%20%5Cend%7Bcases%7D

附录:相关文章,书籍与课程(本文参考)

数学建模是什么?

https://www.zhihu.com/answer/2818182261


【【数学建模快速入门】数模竞赛基础+MATLAB入门+论文写作+数学模型算法(数模美赛国赛小白零基础必看教程)-哔哩哔哩】
 

建模全过程

https://b23.tv/BHPruBD

如何入门?(常用模型与数模工具)

https://www.zhihu.com/question/19714813/answer/2990641232

A/B/C赛题如何选择?

https://b23.tv/nQj8InJ

python还是matlab?

https://zhuanlan.zhihu.com/p/446905509

入门书籍

https://www.zhihu.com/answer/1528941666

司守奎教材_免费高速下载|百度网盘-分享无限制 (baidu.com)

文献检索

【数模美赛国赛】怎样查文献(数学建模竞赛必看)

职责分工

建模手

  1. 熟悉数学和统计知识:包括微积分、线性代数、概率论等

  2. 学习建模技巧:包括问题抽象和建模、模型求解和结果分析等

  3. 阅读优秀的建模作品:阅读一些获奖或者优秀的建模作品,了解别人在建模过程中的思路和方法

写作手

论文要力图通俗易懂,能让人明白你用什么方法解决了什么问题,结果如何,有什么特点。为此,应尽可能使论文的表述清晰、主题明确、论述严密、层次分明、重点突出、符合科技论文的写作规范。同时,要注意论文的写作工作是贯穿始终的,在建模的每个阶段都应该把你的主要思路和工作写下来,这是论文写作时的第一手材料。

——《数学建模方法及其应用》

【LaTeX中文学习教程(用于论文或稿件排版,15集全)-哔哩哔哩】

编程手

  • 基于Python的数学建模课程

【数学建模导论:基于Python语言(2022年秋季学期)-哔哩哔哩】

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值