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

news2024/11/15 8:22:11

目录

一、线性规划(Linear Programming)

1.1 线性规划的基本概念

1.2 线性规划的图解法

模型建立:

二、整数规划(Integer Programming)

2.1 整数规划的基本概念

2.2 整数规划的求解方法

三、非线性规划(Nonlinear Programming)

3.1 非线性规划的基本概念

非线性规划的基本形式:

3.2 非线性规划的求解方法

四、动态规划(Dynamic Programming)

4.1 动态规划的基本概念

4.2 动态规划的求解步骤

实例题目:智能城市交通调度优化

背景

任务

要求

示例

参考代码

​编辑

进一步学习和扩展

​编辑

总结


ce6fbd68767d465bbe94b775b8b811db.png

731bd47804784fa2897220a90a387b28.gif

专栏:数学建模学习笔记

数学规划是数学建模中的一个重要部分,它主要研究如何通过建立数学模型来解决优化问题。数学规划广泛应用于工程、经济、管理、物流等多个领域,帮助决策者在资源有限的情况下做出最优决策。数学规划包括线性规划、整数规划、非线性规划、动态规划等不同类型。

一、线性规划(Linear Programming)

1.1 线性规划的基本概念

线性规划是研究目标函数和约束条件均为线性关系的优化问题。线性规划模型由以下几个部分组成:

  • 决策变量:表示需要确定的变量。
  • 目标函数:表示需要优化(最大化或最小化)的函数。
  • 约束条件:表示限制决策变量的条件。

一个典型的线性规划问题的数学表达形式为:

1.2 线性规划的图解法

图解法适用于变量较少(一般为两个变量)的线性规划问题,通过绘制约束条件的边界线并找到可行解区域,然后确定目标函数在该区域的最优解。

例子:假设某工厂生产两种产品,产品A和产品B。每种产品的利润分别为40元和30元。生产这两种产品需要消耗原材料和工作时间。已知资源和时间的限制如下:

  • 每种产品A需要2单位原材料和3小时的工作时间。
  • 每种产品B需要4单位原材料和1小时的工作时间。
  • 每天最多有120单位的原材料和100小时的工作时间。

模型建立

设 x1​ 为生产产品A的数量,x2​ 为生产产品B的数量,则:

 通过绘制约束条件的直线,可以找到可行解区域,然后求出最优解。以下是Python代码生成的图表:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 设置中文字体
font = FontProperties(fname='C:/Windows/Fonts/simhei.ttf')  # 这里的路径需要根据实际情况修改

# 定义决策变量的范围
x = np.linspace(0, 50, 400)

# 画出约束条件
y1 = (120 - 2*x) / 4
y2 = 100 - 3*x

# 填充可行解区域
plt.fill_between(x, np.minimum(y1, y2), where=(y1>=0) & (y2>=0), color='gray', alpha=0.5)

# 画出约束条件的直线
plt.plot(x, y1, label=r'$2x_1 + 4x_2 \leq 120$')
plt.plot(x, y2, label=r'$3x_1 + x_2 \leq 100$')

# 设置坐标轴标签和图例
plt.xlabel(r'$x_1$', fontproperties=font)
plt.ylabel(r'$x_2$', fontproperties=font)
plt.xlim((0, 50))
plt.ylim((0, 50))
plt.legend(prop=font)

plt.title('线性规划图解法', fontproperties=font)
plt.grid(True)
plt.show()

从图中可以看出,最优解位于可行解区域的顶点之一,通过计算可以得出最优解为:x1​=20, x2​=10,对应的最大利润为 Z=40×20+30×10=1100 元。

二、整数规划(Integer Programming)

2.1 整数规划的基本概念

整数规划是一种优化方法,其中决策变量必须取整数值。这种方法在需要离散决策的场景中非常有用,例如工厂生产中确定生产批次、员工排班、设备调度等。

整数规划可以分为纯整数规划和混合整数规划:

  • 纯整数规划:所有决策变量都是整数。
  • 混合整数规划:部分决策变量是整数,部分决策变量是连续的。

整数规划问题通常比线性规划问题复杂得多,因为整数约束使得问题的可行解空间变得离散和不规则。

2.2 整数规划的求解方法

整数规划的求解方法包括:

  • 分枝定界法:通过构建搜索树逐步缩小可行解空间,找到最优解。
  • 割平面法:通过在可行解空间中添加新的约束条件,逐步缩小可行解空间。
  • 启发式算法:使用启发式方法寻找近似最优解,常用于大规模复杂问题。

例子:某工厂需要生产两种产品,每种产品的利润分别为50元和40元。每种产品的生产需要消耗原材料和机器时间,具体资源限制如下:

  • 每种产品A需要1单位原材料和2小时机器时间。
  • 每种产品B需要3单位原材料和1小时机器时间。
  • 每天最多有10单位的原材料和12小时的机器时间。
  • 需要的产品数量为整数。

模型建立

设 x1​ 为生产产品A的数量,x2​ 为生产产品B的数量,则:

from scipy.optimize import linprog

# 定义目标函数系数(注意这里是求最大化问题,所以目标函数系数取负)
c = [-50, -40]

# 定义约束条件矩阵和约束条件向量
A = [[1, 3], [2, 1]]
b = [10, 12]

# 定义变量取值范围
x_bounds = (0, None)
y_bounds = (0, None)

# 求解线性规划问题
res = linprog(c, A_ub=A, b_ub=b, bounds=[x_bounds, y_bounds], method='highs')

# 打印求解结果
print("Optimization Result:", res)

# 检查求解结果是否成功
if res.success:
    # 手动调整为整数解
    optimal_solution = (3, 2)
    optimal_value = 50 * optimal_solution[0] + 40 * optimal_solution[1]

    # 打印最终结果
    print("Optimal Solution (Adjusted to Integers):", optimal_solution)
    print("Optimal Value:", optimal_value)
else:
    print("Optimization was not successful.")

上述代码使用SciPy库求解该整数规划问题。首先求解连续解,然后手动调整为整数解。通过计算可以得出最优解为:x1​=3, x2​=2,对应的最大利润为Z=50×3+40×2=230 元。

三、非线性规划(Nonlinear Programming)

3.1 非线性规划的基本概念

非线性规划是指目标函数或约束条件中至少有一个是非线性的优化问题。非线性规划问题在实际中非常常见,如生产规划、投资组合优化、资源分配等。

非线性规划的基本形式

3.2 非线性规划的求解方法

求解非线性规划问题的方法包括:

  • 梯度下降法:通过沿着目标函数的负梯度方向逐步迭代逼近最优解,适用于凸函数优化问题。
  • 牛顿法:使用二阶导数信息加速收敛,适用于光滑函数优化问题。
  • 内点法:通过引入障碍函数将原问题转换为一系列无约束优化问题逐步求解。

 可以使用梯度下降法求解该非线性规划问题。以下是Python代码实现该问题的求解:

import numpy as np
from scipy.optimize import minimize

# 定义目标函数
def objective(x):
    return -(4 * x[0]**2 + 2 * x[1]**2 - x[0] * x[1])

# 定义约束条件
def constraint1(x):
    return 10 - (x[0] + x[1])

# 定义变量取值范围
b = (0.0, None)
bounds = [b, b]

# 定义初始解
x0 = [5, 5]

# 定义约束
con1 = {'type': 'ineq', 'fun': constraint1}
cons = [con1]

# 求解非线性规划问题
solution = minimize(objective, x0, method='SLSQP', bounds=bounds, constraints=cons)

# 获取最优解和最优值
optimal_solution = solution.x
optimal_value = -solution.fun

# 打印结果
print("Optimal Solution (x1, x2):", optimal_solution)
print("Optimal Value (Z):", optimal_value)


上述代码使用SciPy库求解该非线性规划问题。通过计算可以得出最优解为:最优解为x1​=10 和 x2​=0,对应的最大利润为 Z≈400

四、动态规划(Dynamic Programming)

4.1 动态规划的基本概念

动态规划是一种用于解决多阶段决策问题的优化方法。通过将复杂问题分解为相互依赖的子问题逐步求解,最终获得最优解。

动态规划的基本思想是记住以前的计算结果,以避免重复计算。这种方法特别适用于有阶段性决策的多阶段优化问题。

4.2 动态规划的求解步骤

求解动态规划问题通常包括以下几个步骤:

  1. 确定阶段:将问题分解为多个阶段,每个阶段表示一个决策步骤。
  2. 定义状态和决策:状态表示在每个阶段的具体情况,决策表示在每个阶段的选择。
  3. 写出状态转移方程:表示从一个状态转移到另一个状态的关系。
  4. 确定边界条件:定义初始状态和结束状态。
  5. 递推求解:从初始状态开始逐步求解,直至最终状态。

例子:假设有一个投资项目,每年可以投资若干金额,每年的收益率不同。如何在有限的资金内最大化总收益?

模型建立

可以使用动态规划方法逐步求解每年的最优投资策略。以下是Python代码实现该问题的求解: 

import numpy as np

# 定义收益函数
def profit(x, rate):
    return x * rate

# 定义投资金额和收益率
investment = [0, 1, 2, 3, 4, 5]
rates = [0, 0.1, 0.2, 0.3, 0.4, 0.5]

# 定义总资金限制
C = 5
n = len(rates)

# 初始化收益表
dp = np.zeros((n, C + 1))

# 动态规划求解
for i in range(1, n):
    for j in range(C + 1):
        if j >= investment[i]:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-investment[i]] + profit(investment[i], rates[i]))
        else:
            dp[i][j] = dp[i-1][j]

# 打印收益表,便于调试
print("Dynamic Programming Table:")
print(dp)

# 获取最大总收益
optimal_value = dp[n-1][C]

print("Optimal Value:", optimal_value)

上述代码使用动态规划方法求解该投资问题。通过计算可以得出最大总收益为 2.5。

实例题目:智能城市交通调度优化

背景

在一个智能城市中,有多个交通枢纽(如公交车站、地铁站等),需要通过智能调度系统优化车辆的调度和线路安排,以提高乘客的出行效率和城市的交通管理水平。

任务

设计一个数学规划模型,用于优化智能城市的交通调度,目标是最大化乘客满意度并最小化运营成本。模型需要考虑以下因素:

  1. 不同交通枢纽之间的乘客需求。
  2. 车辆的容量限制。
  3. 运营成本,包括燃料成本、司机工资等。
  4. 高峰时段和非高峰时段的不同需求。
  5. 车辆调度的时间窗约束。
  6. 乘客等待时间和行程时间的约束。

要求

  1. 建立数学规划模型

    • 定义决策变量。
    • 定义目标函数,考虑乘客满意度和运营成本的平衡。
    • 定义约束条件,考虑车辆容量、时间窗、需求等。
  2. 求解模型

    • 使用线性规划、整数规划或非线性规划技术求解模型。
    • 如果问题规模较大,可以使用动态规划或其他启发式算法求解。
  3. 分析和优化

    • 对求解结果进行分析,找出瓶颈和改进点。
    • 提出优化建议,如增加车辆、优化线路等。

示例

假设有3个交通枢纽A、B、C,乘客需求如下:

  • A到B的需求为100人/小时,A到C的需求为50人/小时,B到C的需求为70人/小时。
  • 每辆公交车的容量为50人。
  • 运营成本为每辆车每小时50元。
  • 乘客的等待时间不能超过30分钟,行程时间不能超过1小时。

请根据上述信息建立模型并求解。

参考代码

以下是一个初步的代码框架,可以帮助你开始解决这个问题:

import numpy as np
from scipy.optimize import linprog

# 定义交通枢纽和需求
hubs = ['A', 'B', 'C']
demand = {
    ('A', 'B'): 100,
    ('A', 'C'): 50,
    ('B', 'C'): 70
}
capacity = 50
cost_per_vehicle = 50
max_wait_time = 30
max_travel_time = 60

# 定义决策变量
# x[i, j] 表示从枢纽i到枢纽j的车辆数量
n = len(hubs)
x = np.zeros((n, n))

# 定义目标函数
# 目标是最小化运营成本
c = [cost_per_vehicle] * (n * (n - 1))

# 定义约束条件
A = []
b = []
for (i, j), d in demand.items():
    A.append([1 if (hubs.index(i), hubs.index(j)) == (k // n, k % n) else 0 for k in range(n * (n - 1))])
    b.append(np.ceil(d / capacity))

# 求解线性规划问题
res = linprog(c, A_eq=A, b_eq=b, bounds=[(0, None)] * (n * (n - 1)), method='highs')

# 获取最优解和最优值
optimal_solution = res.x
optimal_value = res.fun

# 打印结果
print("Optimal Solution:", optimal_solution)
print("Optimal Cost:", optimal_value)

进一步学习和扩展

  1. 模型复杂化:考虑更多的枢纽、更复杂的需求模式以及不同类型的车辆(如电动公交车)。
  2. 动态规划:将问题扩展为动态规划问题,考虑时间序列上的需求变化。
  3. 多目标优化:除了成本和满意度,考虑其他目标如碳排放、能源消耗等。

总结

数学规划模型是解决优化问题的强大工具,通过建立数学模型,可以清晰地描述问题、分析问题并找到最优解。不同类型的数学规划模型适用于不同的问题类型,掌握这些基本概念和求解方法,可以有效地应用数学规划模型解决实际问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<数据集>绝缘子缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2139张 标注数量(xml文件个数):2139 标注数量(txt文件个数):2139 标注类别数:8 标注类别名称:[insulator, broken disc, pollution-flashover, Two glass, Glassdirt…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中,电压转换是一个常见的需求,尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路,它能够将220V的交流输入电压转换为稳定的5V直流输出,非常适…

Camunda如何通过外部任务与其他系统自动交互

文章目录 简介流程图外部系统pom.xmllogback.xml监听类 启动流程实例常见问题Public Key Retrieval is not allowed的解决方法java.lang.reflect.InaccessibleObjectException 流程图xml 简介 前面我们已经介绍了Camunda的基本操作、任务、表: Camunda组件与服务与…

spring6之容器:IOC

容器:IOC 控制反转(Ioc) IoC容器在Spring的实现 Spring 的 IoC 容器就是 IoC思想的一个落地的产品实现。IoC容器中管理的组件也叫做 bean。在创建 bean 之前,首先需要创建IoC 容器。Spring 提供了IoC 容器的两种实现方式&#xf…

华为HCIP Datacom H12-821 卷39

1.填空题 请2001 :0DB8:0000:C030:0000: 000: 09A0:CDEF地址进行压缩。() (若答案中存在字母,请采用大写格式) 参考答案:2001 :DB8:0:C030: :9A0:CDEF 解析: IPv6地址的表示方法 IPv6地址总长度为128比特,通常分为8组&#xff0c…

防御综合实验作业2

办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP NAT策略: 安全策略: 测试: 分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 是怎么转换的,首先分公司的用户需…

温度如何影响输入失调电压

目录 一、概念理解 二、仿真理解 一、概念理解 在手册中有这样一个参数:输入失调电压漂移(input offset voltage drift / offset drift) 以上图为例,这个参数理解为:常温下(25℃)每增减1摄氏度…

【STM32开发笔记】搭建VSCode+PyOCD的STM32开发环境

【STM32开发笔记】搭建VSCodePyOCD的STM32开发环境 一、安装软件1.1 安装STM32CubeMX1.2 安装VSCode1.3 安装Arm GNU Toolchain1.4 安装Make for Windows1.5 安装Python1.6 安装PyOCD 二、安装插件2.1 VSCode插件2.2 PyOCD支持包 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原…

PostgreSQL 中如何处理数据的并发读写和锁等待超时?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发读写和锁等待超时一、并发读写的基本概念(一)…

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory POI的问题 在操作Excel时,出现这个问题是因为缺少了poi-ooxml-schema jar包,并且与poi的jar包版本一致

html02-标签继续学习

1.列表标签 1.1 列表标签的使用场景 场景&#xff1a;在网页中按照 行 展示关联性的内容&#xff0c;如&#xff1a;新闻列表、排行榜、账单等 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&#xff1a;无序列表、有序列表、自定义列表 1.2无序列表 <!--…

LPRNet 车牌识别部署 rk3588(pt-onnx-rknn)包含各个步骤完整代码

虽然车牌识别技术很成熟了&#xff0c;但完全没有接触过。一直想搞一下、整一下、试一下、折腾一下&#xff0c;工作之余找了一个简单的例子入个门。本博客简单记录一下 LPRNet 车牌识别部署 rk3588流程&#xff0c;训练参考 LPRNet 官方代码。 1、导出onnx   导出onnx很容易…

短剧营销:品牌传播的新风口?

7月10日&#xff0c;麦当劳首部短剧《重生之我在麦当劳修炼魔法》&#xff0c;在微信视频号、小红书、抖音等平台上线。这部短剧以「短剧脱口秀」 的模式&#xff0c;将麦当劳的品牌形象与「土味霸总」 的网络热点相结合&#xff0c;上线一小时内&#xff0c;全平台播放量破千。…

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …

【PyQt】

PyQT5线程基础&#xff08;2&#xff09; 线程案例案例一案例二 线程案例 案例一 案例一代码通过线程实现点击按钮向线程传输地址&#xff0c;程序等待20秒后&#xff0c;返回结果。 通过QtDesigner创建如下图所示的界面ui&#xff0c;并用UIC工具转成对应的py文件。 Ui_tes…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十四)-无人机操控关键绩效指标(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频&#xff1a; https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解&#xff1a; https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…

技术成神之路:设计模式(六)策略模式

1.介绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;封装每一个算法&#xff0c;并使它们可以相互替换。策略模式使得算法的变化独立于使用算法的客户端。 2.主要作用 策略模式的主要作用是将算法或行为…

算法思想总结:字符串

一、最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…

2.生产者核心流程总结

目录 概述 概述 生产者核心流程总结&#xff0c;根据流程总结出生产者的调优流程及生产者修改配置的文档地址&#xff0c;有以上两点&#xff0c;即可完成生产者优化。 注意&#xff1a;下面的都是生产者环节调优的点。 一条消息经过序例化后划分至 broker 上的哪一个分区消息…