当前位置: 首页 > news >正文

01 数学建模中M的取值影响及分析

在应急物资调度常涉及条件性约束(如:若启动某储备点,则需满足最低物资储备量;若发生重大灾害,则运输车辆需优先保障)。这类逻辑约束需通过大 M 法转化为线性约束,而 M 的取值直接影响约束的 “生效强度”。

直观的理论分析

设二进制变量y∈0,1y \in {0,1}y0,1表示 “是否触发某条件”(如y=1表示启动应急储备点),连续变量x表示决策变量(如物资调出量)。常见逻辑为:

  • y=1y=1y=1(触发条件),则x≥Lx \geq LxL(需满足最低要求,如最低调出量);
  • y=0y=0y=0(不触发),则x=0x=0x=0(不调出物资)。

上述表达形式可转化为如下线性约束:
(1)x≥L⋅y−M⋅(1−y)(1) \quad x \geq L⋅y−M⋅(1−y)(1)xLyM(1y)
(2)x≤M⋅y(2) \quad x \leq M⋅y(2)xMy

其中,MMM为足够大的常数。当y=1y=1y=1时,约束 (2) 变为x≤Mx \leq MxM(不影响,因MMM足够大),约束 (1) 变为$ x \geq L(生效);当(生效);当(生效);当y=0时,约束(1)变为时,约束 (1) 变为时,约束(1)变为x \geq −M(不影响,因(不影响,因(不影响,因x≥0),约束(2)变为),约束 (2) 变为),约束(2)变为x \leq 0$(生效,即x=0)。

M 取值的影响:

  • M 过小:若M<L,当y=1时,约束 (2) 可能限制x≤M<L,与约束 (1) 的x≥L矛盾,导致可行域为空;
  • M 过大:线性松弛问题的可行域范围膨胀,可能导致求解效率下降(如分支定界树过深),甚至数值不稳定;
  • 最优 M:取变量x的理论最大可能值(如储备点最大库存量),确保M≥L且不冗余。

一个简单的案例

问题背景:某地发生地震,需从两个储备点(A 和 B)向灾区调运医疗物资(如绷带)。决策目标是最小化总运输成本,同时满足:

  • 若启动储备点(yA=1y_A=1yA=1yB=1y_B=1yB=1),则该点调出量xAx_AxA(或xBx_BxB)不得低于 50 单位(确保灾区基本需求);
  • 若不启动储备点(yA=1y_A=1yA=1yB=1y_B=1yB=1),则调出量为 0;灾区总需求为 100 单位,需完全满足。

模型参数:A 到灾区的运输成本为单价8元/单位,B到灾区运输成本为单价10元/单位;储备点最大库存量,A为80单位,B为100单位;最低调出量L=50单位,在启动时需满足。

完整模型
决策变量:
xAx_AxA:从 A 调出的物资量,连续变量,xA≥0x_A\geq 0xA0;
xBx_BxB:从B调出的物资量,连续变量,xB≥0x_B \geq 0xB0;
yAy_AyA:是否启动 A,二进制变量,yA∈{0,1}y_A \in \{0,1\}yA{0,1};
yBy_ByB:是否启动 B,二进制变量,yB∈{0,1}y_B \in \{0,1\}yB{0,1}.

目标函数(最小化运输成本):
minz=8xA+10xBmin z=8x_A + 10x_Bminz=8xA+10xB

约束条件:
xA+xB==100x_A + x_B == 100xA+xB==100 必须满足灾区总需求
$x_A \geq 50y_A - M(1-y_A) $ A启动
$x_B \geq 50y_B - M(1-y_B) $ B启动
$x_A \leq 80 $ $ A的调出量
$x_B \leq 100 $ B的调出量
xA≥0,xB≥0x_A \geq 0, x_B \geq 0xA0,xB0 连续变量界
yA,yB∈{0,1}y_A, y_B \in \{0,1\}yA,yB{0,1}二进制变量界

Docplex的求解代码

from docplex.mp.model import Model
import time
def solve_emergency_model(M):# 创建模型m = Model(name="应急物资调度")# 决策变量x_A = m.continuous_var(name="x_A", lb=0)  # 储备点A调出量x_B = m.continuous_var(name="x_B", lb=0)  # 储备点B调出量y_A = m.binary_var(name="y_A")            # 是否启动Ay_B = m.binary_var(name="y_B")            # 是否启动B# 约束条件m.add_constraint(x_A + x_B == 100, "需求满足")  # 总需求100# A的启动约束(大M)m.add_constraint(x_A >= 50 * y_A - M * (1 - y_A), "A下限约束")m.add_constraint(x_A <= M * y_A, "A上限约束")# B的启动约束(大M)m.add_constraint(x_B >= 50 * y_B - M * (1 - y_B), "B下限约束")m.add_constraint(x_B <= M * y_B, "B上限约束")# 库存限制m.add_constraint(x_A <= 80, "A库存限制")m.add_constraint(x_B <= 100, "B库存限制")# 目标函数:最小化运输成本m.minimize(8 * x_A + 10 * x_B)# 求解sol = m.solve()if sol:print(f"当M={M}时:")print(f"x_A = {x_A.solution_value:.0f}, x_B = {x_B.solution_value:.0f}")print(f"y_A = {y_A.solution_value}, y_B = {y_B.solution_value}")print(f"最小总成本 = {m.objective_value:.0f}\n")else:print(f"当M={M}时,无可行解(约束矛盾)\n")# 测试不同M值
time1 = time.time()
solve_emergency_model(M=40)    # 过小
time2 = time.time()
print(f'M=40的求解耗时为:{time2-time1}\n')
solve_emergency_model(M=80)    # 最优
time3 = time.time()
print(f'M=80的求解耗时为:{time3-time2}\n')
solve_emergency_model(M=1000000000)  # 过大
time4 = time.time()
print(f'M=1000000000的求解耗时为:{time4-time3}\n')

运行代码的结果为:

总结

大 M 的取值需严格依据变量理论边界(如库存上限):

  • 过小会导致约束矛盾,丧失可行性;
  • 过大不影响最优解,但降低求解效率;
  • 合理取值应确保 “刚好覆盖变量最大可能值”,平衡约束有效性与求解效率。
http://www.dtcms.com/a/541427.html

相关文章:

  • 深入 Actix-web 源码:解密 Rust Web 框架的高性能内核
  • Linux远程控制Windows桌面的cpolar实战指南
  • 焦作网站建设哪家好自己怎么用h5做网站
  • 论坛程序做导航网站photoshop安卓版
  • FP16 vs INT8:Llama-2-7b 昇腾 NPU 精度性能基准报告
  • Steering Llama 2 via Contrastive Activation Addition
  • 座舱出行Agent实战(三):专能化架构如何实现效率与稳定性的双重飞跃
  • 淘宝联盟怎么新建网站网站设计教程
  • 一篇文章深入理解Elasticsearch高级用法
  • 【数据工程】14. Stream Data Processing
  • Elasticsearch入门指南:从零到精通
  • wordpress 非插件七牛cdn全站加速东至网站建设
  • 进出口网站贸易平台有哪些个人网站可以做推广吗
  • 游戏网站首页设计服务器有了网站怎么做
  • 计算机组成原理---存储系统
  • Vector深度剖析及模拟实现
  • Linux进程:进程属性
  • word文档做网站建立网站地图
  • 大连建设网节能办公室网站随州网站seo
  • SSM老年公寓管理系统4do68(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网站制作佛山海拉尔网站建设平台
  • 推客系统开发:从技术架构到业务落地的全栈实现指南
  • Spring Boot 日志体系 Logback + SLF4J 深入剖析
  • Perl 格式化输出
  • 网站建设三种方法广州h5网站制作
  • 一文讲透BOM、MRP、WMS
  • ai最新的发展趋势有哪些
  • 简化AI服务构建的Python框架leptonai
  • 解决 Vray for 3ds Max 三大常见生产问题,提升渲染工作流效率
  • 做网站搭建环境网站建设在学校中的作用