数学建模整理

  • 线性规划
  • 整数规划
    • 整数规划特点
    • 求解方法分类
      • (1)分枝定界法
      • (2) 割平面法
      • (3) 隐枚举法(“0-1”整数规划)
      • (4) 匈牙利法
      • (5) 蒙特卡洛法(随机取样法)
  • 非线性规划
    • 二次规划

线性规划

在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济
效益的问题。若目标函数及约束条件均为线性函数,则称为线性规划(Linear Programming 简记 LP)。
可行解:满足约束条件的解。
可行预:所有可行解构成的集合称为问题的可行域,记为R。

图解法:

图解法简单直观,有助于了解线性规划问题求解的基本原理。可得到如下结论:
(1)可行域 R 可能会出现多种情况。 R 可能是空集也可能是非空集合,当 R 非空
时,它必定是若干个半平面的交集。 R 既可能是有界区域,也可能是无界区域。
(2)在 R 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其
目标函数值无界)。
(3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域 R 的“顶点”。

整数规划

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。
如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:

  1. 变量全限制为整数时,称纯(完全)整数规划。
  2. 变量部分限制为整数的,称混合整数规划。

整数规划特点

  1. 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:
    ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
    ②整数规划无可行解。
    ③有可行解(当然就存在最优解),但最优解值变差。
  2. 整数规划最优解不能按照实数最优解简单取整而获得。

求解方法分类

  1. 分枝定界法—可求纯或混合整数线性规划。
  2. 割平面法—可求纯或混合整数线性规划。
  3. 隐枚举法—求解“0-1”整数规划:
    ①过滤隐枚举法;
    ②分枝隐枚举法。
  4. 匈牙利法—解决指派问题(“0-1”规划特殊情形)。
  5. 蒙特卡洛法—求解各种类型规划。

(1)分枝定界法

对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。
设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始,若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数z* 的上界,记作 z- ;而 A 的任意可行解的目标函数值将是z* 的一个下界 z_ 。分枝定界法就是将 B 的可行域分成子区域的方法。逐步减小 z- 和增大 z_ ,最终求到z* 。

(2) 割平面法

(3) 隐枚举法(“0-1”整数规划)

(i) 先试探性求一个可行解,易看出(1,0,0)满足约束条件,故为一个可行解,且 z= 3 。
(ii) 因为是求极大值问题,故求最优解时,凡是目标值 z<3 的解不必检验是否满足约束条件即可删除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界):
(iii) 改进过滤条件。
(iv) 由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值 z 大的组合,这样可提前抬高过滤门槛,以减少计算量。

(4) 匈牙利法

匈牙利算法python代码:

import numpy as np
from scipy.optimize import linear_sum_assignmentcost = np.array([[3,5,8,4], [6,8,5,4], [2,5,8,5],[9,2,5,2]])
row_ind, col_ind = linear_sum_assignment(cost)
print(row_ind)  # 开销矩阵对应的行索引
print(col_ind)  # 对应行索引的最优指派的列索引
print(cost[row_ind, col_ind])  # 提取每个行索引的最优指派列索引所在的元素,形成数组
print(cost[row_ind, col_ind].sum())  # 数组求和'''输出:[0 1 2 3][3 2 0 1][4 5 2 2]13'''

(5) 蒙特卡洛法(随机取样法)

是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解。

指派问题的计算机求解
整数规划问题的求解可以使用 Lingo 等专用软件。对于一般的整数规划问题,无法
直接利用 Matlab 的函数,必须利用 Matlab 编程实现分枝定界解法和割平面解法。但对
于指派问题等 1 0− 整数规划问题,可以直接利用 Matlab 的函数 bintprog 进行求解。

非线性规划

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问
题。
线性规划与非线性规划的区别:
如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特别是可行
域的顶点上达到);而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。

  • FUN是用M文件定义的函数f(x)
  • x0是x的初始值
  • A,B,Aeq,Beq定义了线性约束,若没有则为空
  • LB和UB是变量x的下界和上界
  • NONLCON是用M文件定义的非线性向量函数C(x),Ceq(x)
  • OPTIONS定义了优化参数,可以使用Matlab 缺省的参数设置。


二次规划

若某非线性规划的目标函数为自变量 x 的二次函数,约束条件又全是线性的,就称
这种规划为二次规划。

返回值 X 是决策向量 x 的值,返回值 FVAL 是目标函数在 x 处的值。

数学建模整理-线性规划、整数规划、非线性规划相关推荐

  1. Python小白的数学建模课-04.整数规划

    整数规划与线性规划的差别只是变量的整数约束. 问题区别一点点,难度相差千万里. 选择简单通用的编程方案,让求解器去处理吧. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达 ...

  2. 数学建模、运筹学之非线性规划

    数学建模.运筹学之非线性规划 一.最优化问题理论体系 二.梯度下降法--无约束非线性规划 三.牛顿法--无约束非线性规划 四.只包含等值约束的拉格朗日乘子法 五.不等值约束非线性规划与KKT条件 一. ...

  3. 数学建模之线性规划(含MATLAB代码)

    文章目录 数学建模之线性规划 1. 线性规划 1.1 matlab中的标准形式 1.2 可转换为线性规划问题 2. 整数规划 2.1 分支定界算法 2.1.1 分支定界举例 2.1.2 matlab代 ...

  4. 【数学建模】算法模型(一)|线性规划 整数规划 非线性规划 层次分析模型 灰色关联分析

    文章目录 1.线性规划 Linear Programming (LP) 1.1线性规划的matlab标准形式及软件求解 1.2 投资的收益和风险 2. 整数规划 2.1 整数规划和线性规划的关系 2. ...

  5. 数学建模之线性规划与LINGO编程

    EverydayOneCat 知识点 1.笔记 2.数学规划 数学规划指在一系列客观或主观限制条件下,寻求合理分配有限资源,使所关注的某个或多个指标达到最大(或最小)的数学理论和方法 最优化数学模型的 ...

  6. 【数学建模】线性规划模型MATLAB求解(最优化)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 1.可以转化为线性规划的问题 四.应用场景举例 1. 例1.1: 2. 解: 2. 例1.2: 2. 解: 五.MATLAB操作 六.实际案例(投资 ...

  7. 【数学建模】线性规划模型LINGO求解(最优化)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 四.应用场景举例(lingo求解) 五.LINGO代码 六.实际案例 七.论文案例片段(待完善) 线性规划模型主要针对数学建模问题中的一些小的子问题 ...

  8. 数学建模之线性规划学习笔记

    前言 线性规划可能看起来很简单,但其中也不乏比较精妙的处理方法.上了数模选修课之后才知道自己原来对建模的理解太浅,只知道想一种方法算出一个结果,而没有仔细考虑结果的合理性与对结果的分析.接下来简单介绍 ...

  9. 数学建模之线性规划问题(含整数规划和0-1规划)

    线性规划问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划. 如: 为了便于表达,将上面的式子写成矩阵形式: 于是约束就表达为了一个不等式. 求解 ...

最新文章

  1. 分布式技术追踪 2017年第十五期
  2. 分享一个超棒的响应式幻灯jQuery插件 - refineslide
  3. win10默认账户 WDAGUtilityAccount 和 DefaultAccount
  4. 05_pandas读写文件,读写数据到CSV,HDF5,Excel中
  5. .adobe.ETH.btc.frendi.AUF.AYE.qwex后缀勒索病毒
  6. 容器学习 之 docker存储(十五)
  7. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用
  8. python的datetime函数_Python连载8-datetime包函数介绍
  9. 基于变长PSO的高维特征选择算法(VLPSO)概述
  10. 辉迅手机号码归属地查询软件 手机号码归属地 手机查询
  11. 网络流模型与技巧总结
  12. Kafka - which is larger than the maximum request size you have configured with the max.request
  13. 【前端性能优化】图片加载优化
  14. nginx日志中$request_body 十六进制字符(\x22\x9B\x5C\x09\x08...)完美解决方案
  15. 实习僧招聘网站信息采集
  16. js 校验手机号码格式
  17. 用U盘制作PE启动盘
  18. 使用Android Studio做一个简易进制转换计算器
  19. 高分难题,绝对有难度
  20. Multisim电路仿真与面包板的使用

热门文章

  1. 向量空间 列空间 零空间
  2. 向上转型和向下转型的区别
  3. 机动车办理北京市内临时牌照流程_百度经验
  4. 万象2008实用新功能
  5. SQL查询的时候同时显示明细和总计
  6. Cocos2d-x的学习之旅(三)自己的 HelloWorld
  7. IQ调制、成型滤波及星座映射
  8. 工作流管理系统开发之六 表单权限与流程的权限控制
  9. 服务器:概念、组成、分类和架构之争
  10. 188数码管驱动代码