运筹学基础(七):拉格朗日松弛(Lagrangian relaxation)

news2025/1/16 20:56:06

文章目录

  • 基本概念
    • 原问题
    • 松弛问题、拉格朗日乘子、对偶函数
    • 对偶问题
    • 三个问题之间的关系
  • 为什么要用拉格朗日松弛法
    • 算法流程
    • 核心问题
      • 松弛哪个约束
      • 松弛后分解的子问题的求解
      • 拉格朗日乘子怎么定
  • 参考资料

基本概念

原问题

考虑如下的整数规划问题:
m i n c T x s . t . D x ≤ d x ∈ X X = { x ∈ Z n ∣ A x ≤ b } \begin{align} min \quad c^Tx \\ s.t. Dx \leq d \tag{1.1}\\ x \in X \tag{1.2}\\ X = \{x\in Z^n|Ax\leq b\} \tag{1.3} \end{align} mincTxs.t.DxdxXX={xZnAxb}(1.1)(1.2)(1.3)
假设约束(1.1)是难处理的约束,约束(1.3)是容易处理的约束。

松弛问题、拉格朗日乘子、对偶函数

为了减小问题求解的难度,我自然希望把难约束(1.1)转化到目标函数上去,因此我们定义乘子 u = ( u 1 , u 2 , . . . , u m ) ∈ R m + u=(u_1, u_2,...,u_m) \in R^+_m u=(u1,u2,...,um)Rm+,然后可得:
z ( u ) = m i n c T x + u T ( D x − d ) s . t . x ∈ X \begin{align} z(u) = min\quad c^Tx+u^T(Dx-d) \tag{1.4} \\ s.t. x\in X \tag{1.5} \end{align} z(u)=mincTx+uT(Dxd)s.t.xX(1.4)(1.5)

我们把上面这个问题称之为松弛问题 u u u称为拉格朗日乘子 z ( u ) z(u) z(u)称为对偶函数,注意

3个注意的地方:

  1. u u u是一个向量,它与被松弛掉的约束的数量是一样的;
  2. 拉格朗日乘子的符号问题:
    • 如果约束是 ≤ \leq ,则拉格朗日乘子要 ≥ 0 \geq 0 0
    • 如果约束是 ≥ \geq ,则拉格朗日乘子要 ≤ 0 \leq 0 0
    • 如果约束是 = = =,则拉格朗日乘子不受约束限制。
  3. 对偶函数的输入是拉格朗日乘子,输出是松弛问题的最优值。

对偶问题

我们最大化对偶函数可以得到对偶问题
m a x u ∈ R + m z ( u ) (1.6) \underset{\text{$u \in R^m_+$}}{max} \quad z(u) \tag{1.6}\\ uR+mmaxz(u)(1.6)

其本质是在松弛问题的基础上,搜索能够使得 z ( u ) z(u) z(u)最大的那个 u u u

三个问题之间的关系

若对偶定义:在原问题( m i n min min)中,对偶问题最优解 ≤ \leq 原问题最优解。 即松弛问题是原问题的一个下界,对偶问题是原问题最大的下界。
在这里插入图片描述

为什么要用拉格朗日松弛法

  1. 拉格朗日松弛后得到的问题的下界要大于等于直接将01整数变量松弛为[0,1]连续变量的下界;

  2. 如果问题具有linked constraints,那么拉格朗日松弛后可以使问题能够被分解,进而可以降低问题的复杂度;linked constraints指的是将多类变量耦合在一起的约束
    在这里插入图片描述

  3. 采用拉格朗日松弛后我们会得到拉格朗日乘子,它反应了对偶的信息,可以做很多事情。还不理解

算法流程

  1. 初始化拉格朗日乘子;
  2. 求解松弛问题;
  3. 采用次梯度法更新拉格朗日乘子,并判断是否满足停止条件,若满足则跳到2求解结束,否则跳到2继续。

在这里插入图片描述

核心问题

松弛哪个约束

一般来说,尽量松弛掉linked constraints。

具体而言,松弛哪个约束需要考虑以下三点:

  1. 拉格朗日松弛后对偶问题的质量的好坏;
  2. 拉格朗日松弛的松弛问题后的子问题求解难易程度;
  3. 拉格朗日松弛对偶问题的求解难易程度。

松弛后分解的子问题的求解

松弛以后的问题分解大概如下图所示:
在这里插入图片描述
在这里插入图片描述

一般来说,我们希望松弛以后的问题最好不要是NP-hard。一般子问题规模较小,可以直接让求解器求解。

拉格朗日乘子怎么定

该问题等同于:怎么求解拉格朗日松弛问题的对偶问题,常用的方法是次梯度算法还没有搞清楚,后面再补)。

参考资料

  1. 拉格朗日松弛求解整数规划浅析
  2. 整数规划的拉格朗日松弛
  3. 《运筹优化常用模型、算法及案例实战——Python+Java实现》

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

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

相关文章

简谈 BlueNRG-LP 和-LPS 的代码空间优化

1.引言 客户在使用 BlueNRG-LP/LPS 芯片时,增加 OTA 服务后常常反馈说,编译代码区域超空间了,需要帮忙优化一下。后文主要通过下列步骤进行分析和优化 BlueNRG-LP/LPS 的代码空间: a. 通过分析 BlueNRG-LP/LPS 的 OTA 方式&…

【Canvas与数学】动态生成圆形中运动的包络线

【题设】 F为圆内任一一点,A为圆周上一点,AF连线的中垂线交圆周与CD两点,求CD围成的图形形状。 【关键点】 使用解析几何方法求出FA中垂线与圆的交点,应用中学数学知识就可做到。 注意中间变量及时求出来比较好,在…

【C++程序员的自我修炼】友元

心之所向 素履以往 目录 友元函数 cout 如何输出自定义类型 cin 如何输入自定义类型 总结 友元类 日期类Date 如何访问 时间类Time 内部类 概念: 总结: 契子✨ 我们之前已经把类与对象的基础知识已经学完了,这些是只针对一个类的操作 那么…

endnote21从安装到使用!文献引用!Mac版

视频学习和资源获取 新建库 选择上方导航栏处的File下的New 软件 软件界面可以分成四个部分 2是个人图书馆 3是对某一分类中文献的展示 最右侧是对具体一篇文献的摘要、编辑以及PDF 有回形针标志意味着这篇有全文,也就是有pdf 如果没有回形针代表它只有引文信…

【电力工程】电力大数据和云架构智能AI服务平台研发建设项目可行性研究报告范例

1、项目概况 本项目拟进行基于电力大数据和云架构的智能 AI 服务平台的研究,具体包括电力多元大数据中心、技术中台、数据中台和智能 AI 中台,基于电力大数据云平台基础构建 BI 可视化开发平台和智能 AI 服务平台。 该项目的实施旨在引领公司在大数据领域发展的新趋势,从功…

【第三版 系统集成项目管理工程师】 十五至尊图

持续更新。。。。。。。。。。。。。。。 【第三版】十五至尊图 十五至尊图【必会】1.整合(7)2.范围 (6)3.进度 (6)4.成本 (4)5.质量(3)6.资源(6&…

el-table使用show-summary合计,但只需要合并某一列

el-table使用show-summary合计,但只需要合并某一列 这里有两种方法,一种是网上的,我会引用他的链接给你们看。 一种是我自己看源码发现的 方法一 这个就是方法一的链接 点击我跳转方法一 方法二 不需要计算的列 去掉prop 然后用插槽显示即可…

利用动态规划在有向图上实现高效语音识别算法

在现代语音识别系统中,动态规划是一种非常关键的技术。它能够帮助我们将复杂的语音信号转换为可理解的文字信息。在本文中,我们将探讨如何使用动态规划方法在有向图上实现语音识别。我们将首先介绍问题的背景和基本概念,然后提供一个高效的算…

【路径规划】局部路径规划算法——DWA算法(动态窗口法)|(含python实现 | c++实现)

文章目录 参考资料1. DWA算法原理1.1 简介1.2 算法原理1. 速度采样2. 轨迹预测(轨迹推算)3. 轨迹评价 2. Python实现2.1 参数配置2.2 机器人运动学模型2.3 DWA算法类实现2.4 画图2.5 主函数 3. c实现4. 总结 参考资料 The Dynamic Window Approach to C…

如何在Windows 10中启用和使用上帝模式,这里有详细步骤

序言 上帝模式(God Mode)是一个特殊的文件夹,只在一个窗口中显示所有可用的操作设置。它可以节省搜索命令的时间,而无需知道通过“开始”菜单或“控制面板”查找命令的步骤。上帝模式默认情况下是隐藏的,所以我们需要…

ROS 2边学边练(29)-- 使用替换机制

前言 启动文件用于启动节点、服务和执行流程。这组操作可能有影响其行为的参数。替换机制可以在参数中使用,以便在描述可重复使用的启动文件时提供更大的灵活性。替换是仅在执行启动描述期间评估的变量,可用于获取特定信息,如启动配置、环境变…

链表带环问题——leetcode环形链表1 2

证明链表带环 链表的带环问题指的是本该指向NULL的最后一个节点指向了之前的节点,导致链表成环,找不到尾结点的情况,那么我们该如何证明链表带环呢? 我们可以类比物理中的追及问题,让快慢指针同时走,两者相…

在wsl下安装QT

文章目录 一、前言二、安装QT1、安装依赖 2、安装qt1、先下载到window中,复制到wsl上2、执行命令 三、命令行打开QT1、打开~/.bashrc,在里面添加命令2、测试 四、mysql驱动 一、前言 本方案可以在wsl下正常安装QT,但是QT菜单栏的字体大小调整不了&#…

【开源】使用Python+Flask+Mysql快速开发一个用户增删改查系统

项目演示 项目本身很简单,增删改查是几乎所有系统的骨架。正所谓万丈高楼平地起,学会了增删改查,航母就指日可待了:),光速入门,直接看演示图: 项目地址 https://github.com/mudf…

[C++][算法基础]欧拉函数(常规求质数)

给定 n 个正整数 ,请你求出每个数的欧拉函数。 欧拉函数的定义 1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。 若在算数基本定理中,N…,则: ϕ(N) N… 输入格式 第一行包含整数 n。 接下来 n 行&#xf…

雨云:让你的服务器体验不再“阴霾”

引言 在当今数字化的时代,服务器已经成为了我们生活中不可或缺的一部分。无论是个人网站、企业应用还是游戏服务器,都需要一个稳定可靠的平台来运行。然而,在选择服务器提供商时,很多人常常陷入选择困难,不知道哪家更适…

IO进程(线程Thread)

线程Thread 1.什么是线程 1.1 概念 线程是一个轻量级的进程,为了提高系统的性能引入线程。 线程和进程都参与统一的调度。 在同一个进程中可以创建的多个线程, 共享进程资源。 (Linux里同样用task_struct来描述一个线程) 1.2 进程和线程的区别…

精益思维驱动人工智能革新:理论到实践的跃迁之旅

随着科技的飞速发展,人工智能(AI)已成为引领未来的关键力量。在这个变革的时代,如何将精益思维与人工智能相结合,推动AI从理论走向实践,成为行业内外关注的焦点。本文,天行健精益生产顾问将分享…

拷贝构造函数与运算符重载

目录 一、拷贝构造函数 1.概念 2.特性 二、运算符重载 1.运算符重载 2.运算符重载实现的形式 3.赋值运算符重载 一、拷贝构造函数 1.概念 拷贝构造函数是一种特殊的构造函数,它在创建对象时,使用同一类中之前创建的对象来初始化新创建的对象…

Vitis HLS 学习笔记--scal 函数-探究

目录 1. Vitis HLS重器-Vitis_Libraries 2. 初识scal() 3. 函数具体实现 3.1 变量命名规则 3.2 t_ParEntries解释 3.3 流类型详解 3.4 双重循环 4. 总结 1. Vitis HLS重器-Vitis_Libraries 在深入探索Vitis HLS(High-Level Synthesis)的旅程中&…