3 Decomposition Methods

2023-11-13

分解方法是解决问题的一般方法,其将问题分解为更小的问题并且并行地或者顺序地解决每个更小的问题(当采用顺序的方式时,优点是问题的复杂性呈超线性增长(more than linearly)。
如果问题在单步操作中分解有效,那么我称该问题为(块)可分的,或者容易并行化的。例如,假定变量x可以分解为子向量x1,...,xk,目标函数是每个关于xi函数的和。每个约束仅涉及到子矢量x1,...,xk中的一个。那么显然,我们可以分别求解每个子问题(并性地),然后重组构成解x。当然这是一个容易并且无趣的例子。
更有趣的情况出现在当两个子矢量之间存在某种耦合或者交叉时,因此这一的问题不能独立的求解。对于这些情况,存在一些技术能够通过迭代的求解一系列的更小的问题来求解。存在很多方式可以做到这一点。在本文中,我们考虑一些简单的例子来阐这些思想。
在第一节,我们描述最简单地分解方法,原始分解。第二节描述对偶分解.在第4,5节探索一般的分解结构,和相关联的分解方法。第六节详细的描述两个更特殊的例子。

1 Primal decompositon

我们首先考虑第一个例子:无约束的最小化问题。形式为:

minimizef(x)=f1(x1,y)+f2(x2,y)(1)

其中变量 x=(x1,x2,y)。虽然在这里维度不重要,但是将 x1 x2认为有一个相当高的维度,以及y是相当小的维度是很重要的。目标函数几乎是关于 x1 x2是块可分的。实际上,如果我们固定子矢量y,问题变成用 x1 x2是可分的。因此,我们可以独立的通过求解这两个子问题来求解总的问题。出于这个元音,y称为 复杂变量。因为正是这个变量连接了两个子问题。我们可以将 x1( x2)看作是第一(二)个问题的私有变量或者局部变量,将y看作两个子问题的公有变量或者接口变量或者边界变量。
通过观察,发现当y固定的时候,问题可以进行分解,这给出了一个求解问题(1)的思路。令 ϕ1(y)表示下面问题的最优解:
minimizex1f1(x1,y)(2)

同样地,令 ϕ2(y)表示下面问题的最优解:
minimizex2f1(x2,y)(3)

(注意,如果函数 f1 f2是凸函数(是关于x_1和y),那么 ϕ1 ϕ2也是凸函数)。我们称问题(2)为子问题(1),称问题(3)为子问题(2)。
那么原问题(1)等价于问题:
minimizeyϕ1(y)+ϕ2(y)

这个问题称为主问题。如果原问题是凸的,那么主问题也是凸的。主问题的变量是原问题的复杂变量或者耦合变量。主问题的目标函数是两个子问题最优值的和。
解决问题(1)的一个分解的方法是通过求解主问题来求解,即使用一个迭代的方法,比如次梯度方法。每一次迭代需要解决两个子问题来计算 ϕ1(y)ϕ2(y),以及它们的梯度或者次梯度。这可以通过并行来计算,但是即使通过顺序的方式计算,如果问题计算的复杂度与问题的大小称超线性增长的话,则将需要大量的存储空间。
我们先看一下如何计算 ϕ1在y处的次梯度,并且假定问题是凸的。我们首先求解相关的子问题,即找到 x¯1(y)使 f1(x1,y)最小化。因此,函数 f1存在形式为 (0,g1)的一个次梯度,并且显然, g1 ϕ1在y处的一个次梯度。我们可以进行同样的过程找到一个次梯度 g2ϕ2(y),那么 g1+g2 ϕ1+ϕ2在y处的一个次梯度。
我们可以通过各种方法来求解主问题,包括二分法(y是1维的情况),梯度或者拟牛顿法(如果函数是可微的),次梯度方法,切平面法,或者椭球法(函数不可微的情况)。这种基本的分解方法称为原始分解,因为(某些)原变量。
当我们使用一个次梯度方法来求解主问题时,我们得到一个非常简单的原分解算法。
重复:
求解子问题(可能可以通过并行的方式)
找到 x¯1,最小化 f1(x1,y),以及一个次梯度 g1ϕ1(y)
找到 x¯2,最小化 f2(x2,y),以及一个次梯度 g21ϕ2(y)
更新复杂变量:
y:=yαk(g1+g2)
这里, αk是步长,可以通过任意标准方式选择。
我们可以将这种分解方法解释如下。我们有两个带有私有变量或者局部变量 x1,x2的子问题。同样,我们在两个子问题上都有复杂变量y。再主算法的每一步,复杂变量固定,这使得两个子问题可以独立的求解。从两个局部解,我们构造主问题的一个次梯度,并且使用这个次梯度来更新复杂变量,然后重复这个过程。
当主问题中使用了一个次梯度的方法,并且 ϕ1ϕ2是可微的时,更新过程可以很容易的理解。我们将 g1,g2解释为子问题最优值的梯度(关于y)。更新过程简单地在整个目标函数改善的方向上移动。
当含有少量的复杂变量,并且我们有好的方法或者快速的方法求解子问题时,原分解方法很有效。例如,如果其中一个子问题是二次的,我们可以解析求解。在这种情况下,最优值同样也是二次的,并且通过局部二次代价函数的一个Schur补给出。(但是,这个技巧简单,因此许多人不称其为分解方法)。
上面描述的基本的原始分解方法可以通过几个方式扩展。我们可以增加可分割的约束,即约束的形式为: x1C1,x2C2。在这种情况下(并且或者在 domfi,对于y的一些选择,我们可能有 ϕi(y)=(也就是所, ydomϕ。在这种情况下,我们找到一个可以将y从 ϕ分割出来切平面(在主算法中使用)。

1.1 简单的例子

我们用一个简单的,1维的复杂变量例子来阐述原分解。问题拥有(1)的形式,其中f1f2分别是关于x1yx2y段线性凸函数。我们考虑特定问题的实例,x1R20,x2R20,并且f1f2是各自的100个仿射函数的最大值。因为复杂变量y是标量,我们可以使用一个二分算法关于y求最优化。
图1展示了ϕ1ϕ2,并且ϕ1+ϕ2是关于y的函数。该问题的在y0.14最优值为p1.71。图2展示了
最小化ϕ1(y)+ϕ2(y)的二分方法的过程,初始化间隔为[-1,1]。在每一步,两个子问题使用当且y值,分别的求解两个子问题。

Dual decomposition

我们可以通过引入新的变量到问题(1)的分解中,采用对偶问题。首先引入一个新的变量和等式约束,我们将问题表示为:

minimizef(x)=f1(x1,y1)+f2(x2,y2)

subject toy1=y2

我们引入了复杂变量y的一般局部版本,并且满足一致约束,即两个局部版本相等。注意到现在目标函数是关于 (x1,y1)(x2,y2)可分的。
现在我们构造对偶问题。拉格朗日函数为:
L(x1y1,x2,y2)=f1(x1,y1)+f2(x2,y2)+vTy1vTy2

其是可分的。对偶函数为:
g(v)=g1(v)+g2(v)

其中
g1(v)=infx1,y1(f1(x1,y1)+vTy1)g2(v)=infx2,y2(f1(x2,y2)+vTy2)

注意 g1 g2完全可以独立的计算(即并行的方式)。同时也注意, g1 g2可以表示为函数 f1 f2的共轭形式:
g1(v)=f1(0,v),g2(v)=2(0,v)

对偶问题是:
maximizeg1(v)+g2(v)=f1(0,v)f2(0,v)(6)

变量为v。这是对偶分解形式的主问题。使用次梯度,切平面或者其他方法求解这个主问题。
计算 g1(org2)很容易。我们找到使得函数 f1(x1,y1)+vTy1关于 x1,y1最小化的 x1,y1。那么 g1在v处的一个次梯度通过 y¯1给出。同样地,。我们找到使得函数 f2(x2,y2)+vTy2关于 x2,y2最小化的 x2,y2。那么 g2在v处的一个次梯度通过 y¯2给出。这样负对偶函数 g的一个次梯度通过 y¯2y¯1给出,它仅仅是一致性的约束残差。
如果我们使用一个次梯度方法求解主问题,那么对偶分解算法有一个非常简单的形式。
重复:
求解子问题(可能并行的方式)
找到最小化 f1(x1,y1)+vTy1 x1 y1。找到最小化 f2(x2,y2)vTy2 x2 y2
更新对偶变量(价格)
v:=vαk(y2y1)

这里αk是步长,可以通过一些方式选择。如果对偶函数g是可微的,我们可以选择一个固定的步长,并且假定其足够的小。在这种情况下,另外一个选择是在对偶目标函数上进行线性搜索。如果对偶函数是非可微的,我们可以使用一个不断减小的不可和的步长,例如αk=α/k
在对偶分解算法的每一步,关于p我们有一个下界,即原问题的最优值,通过下式给出:

pg(v)=f1(x1,y1)+vTy1+f2(x2,y2)vTy2

其中 x1,y1,x2,y2是迭代项。一般地,迭代项不是原问题的可行解,也就是说 y2y1\noteq0(如果它们是可行的,我们有最大化的g)。
一个合理猜测的可行点可以从迭代项中构造为:
(x1,y¯),(x2,y¯)

其中 y¯=(y1+y2)/2。换句话说,我们使用它们的平均值替代 y1 y2(它们是不同的)。这个平均值是 (y1,y2)到可行集 y1=y2的投影。这给处了关于 p的一个上界,通过下面的不等式给出:
pf1(x1,y¯)+f2(x2,y¯)

一个更好的可行点可以通过将 y1 y2替换为平均值来找到,然后求解原分解中碰到的两个子问题(2)和(3),也就是说计算 ϕ1(y¯)+ϕ12(y¯),这给定边界:
pϕ1(y¯)+ϕ2(y¯).

2.1 Simple example

我们使用同样的简单的例子来阐述对偶分解。图3展示了关于v的g1,g2以及g1+g2。v的最优值是v0.27。图4展示了二分法求解最大化g1(v)+g2(v)的过程,从初始间隔为[-1,1]开始。在每一步,使用当前的价格v,来独立地求解两个子问题。我们也展示了关于p的两个上界。较大的(较差的)边界是f1(x1+y¯)+f2(x2+y¯)。较小的(较好的)边界是ϕ1(y¯)+ϕ2(y¯)(通过求解子问题(2)和(3)获得)。

转载于:https://www.cnblogs.com/raby/p/5886690.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3 Decomposition Methods 的相关文章

  • php自动验证,ThinkPHP 自动验证及验证规则详解

    ThinkPHP 自动验证 ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证 自动验证是基于数据对象的 而大多情况下数据对象是基于 POST表单 不是绝对的 创建的 基本的自动验证功能包括 必须字段 email邮箱格式
  • 使用 ChatGPT、Stable Diffusion、React 和 NodeJS 构建网站画廊

    TLDR 在本文中 您将学习如何构建一个 Web 应用程序 该应用程序使用 ChatGPT 和 Stable Diffusion 为您提供的任何网站描述生成徽标和合适的域名 介绍 人工智能正在接管世界 这些技术每天都在震撼着我们的世界 Ch
  • 家里用服务器放在哪个位置,路由器摆放在家中哪个位置好 路由器摆放位置【详解】...

    路由器摆放在家中哪个位置好 路由器的摆放位置其实非常讲究的 这里就给大家讲解下相关知识 一起来看看 其实wifi所发射的信号 也就是无线电波 向手机和收音机发射出的电磁波是一样的 但是呢wifi的信号相当的短 一般常见的话只有12公分左右
  • Windows Server 系列 - User logon name(pre-Windows 2000) 和 User logon name 的区别

    一 在Active Directory中一直疑惑User logon name pre Windows 2000 和 User logon name这两个字段的区别 详细如下 AD UI界面展示名称 AD 后端属性名称 User logon
  • 使用Composition API和setup语法糖重构Vue组件

    Vue3 引入了Composition API 它是一种更灵活的方式来组织和复用组件的逻辑 而不是依赖于传统的选项式API 如data methods computed等 Composition API的核心是一个名为setup的函数 它可
  • 如何在github上重命名或修改文件夹

    在github上整理流程的时候 有一个文件夹命名不合适 想返回去改 但是在网页上没有找到重命名文件夹的选项 经过一番折腾之后 我是这么做的 1 首先在服务器上找到公匙 公匙在 ssh目录下 以 pub结尾的文件 将其复制 2 在github
  • markdown基本用法

    标题 和 都可以用于表示标题 一级标题 二级标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 标题的前后都要空一行 号后应当加一个空格 和 应当顶格书写 建议使用 来表示标题 字体 斜体 斜体 加粗 粗体 斜体 加粗 斜体
  • OpenCV中的人脸活体检测和身份认证如何实现?OpenCV人脸识别

    本文将介绍如何在OpenCV中实现人脸活体检测和身份认证 结合人脸检测 关键点定位和深度学习模型 我们可以有效地检测和区分真实人脸和照片 视频等非真实生物特征 以实现可靠的身份认证和活体检测 人脸检测和关键点定位 使用OpenCV提供的人脸
  • [STM32学习笔记(一)] 如何安装keil5 MDK版本并安装C51

    文章目录 1 注意事项 2 安装流程 2 1 获取Keil5安装包 2 2 安装keil5 2 3破解keil5 MDK 2 4 安装STM32芯片包 3 在安装了mdk的基础上安装c51 1 注意事项 安装路径必须全部是英文 如果已经安装
  • 突破前端反调试:阻止页面无限不断debugger

    不知道你们有没有遇到过上图这样 有时候想调试网站 一打开开发者工具立即 debugger 而且跳过了还是会继续 或者是有时候在调试网页时 突然就给你来一个 debugger 接着就是反复来回 debugger 了 贼烦 那今天分享个教程 教
  • Spock1

    文章目录 背景 扩展 BDD Behavior driven development行为驱动测试 依赖 Demo Spock深入 结构 setup与given assert 异常断言 Mock 创建对象 注入对象 调用频率约束 目标约束 方
  • Nacos-2.1.1安装配置+集群

    Nacos安装配置 集群 nacos 2 1 1安装配置 集群 Linux 一 环境准备 二 Nacos安装 运行 单机 三 替换nacos内置数据源 四 nacos集群配置 nacos 2 1 1安装配置 集群 Linux 本篇博客用于记
  • linux 启动盘zhi,Linux制作启动盘之dd命令详解

    1 dd命令简介 dd在linux中是 一个非常强大的工具 常用于复制大量数据 测试读写性能 清空硬盘数据 不可恢复 由于dd 命令允许以二进制方式读写 所以特别适合在原始设备上输入 输出 dd命令用于复制文件并对原文件的内容进行转换和格式
  • Windows 通过CMD窗口利用mybatis-generator连接Oracle快速生成代码

    环境说明 Windows10 JDK8 ojdbc6 11 2 0 4 jar mybatis generator core 1 3 7 jar 1 在C盘新建autoMybatis文件夹 文件夹中新建generator xml文件 并将o
  • bzoj3309 DZY Loves Math

    题目链接 bzoj3309 题目大意 对于正整数n 定义f n 为n所含质因子的最大幂指数 给定正整数a b 求 ai 1 bj 1f gcd i j sum i 1 a sum j 1 b f gcd i j T lt 10000 1 l
  • Android系统中设置TextView的行间距

    Android系统中TextView默认显示中文时会比较紧凑 不是很美观 为了让每行保持一定的行间距 可以设置属性android lineSpacingExtra或android lineSpacingMultiplier 1 设置行间距
  • Echarts中X轴label间隔显示=>interval

    项目中我们经常都会遇到大量数据 需要我们的echarts来展示 但是我们的X轴的label是长度是有限的 在大量数据的传递下必然出现label重叠 这个时候我们就要用到interval如图 通过设置xAxis中的axisLabel inte
  • OpenMP和OpenACC

    OpenMP OpenMP是CPU的并行编程模型 它使用编译器指令来识别并行区域 omp set num threads n streams 用来指定要用到的CPU线程数 类似于设置环境变量 pragma omp parrallel 标记代
  • 使用openMVS对样例数据进行重建

    openMVS根据github上的步骤进行编译 注意 如果没有GPU 用不了CUDA的话 那么需要在openMVS目录下找到CmakeLists txt文件 把CUDA设置为OFF SET OpenMVS USE CUDA OFF CACH
  • linux系统之字符设备驱动——IIC驱动mma8451q

    linux系统之字符设备驱动 IIC子系统驱动mma8451q 1 原理图 2 驱动程序 mma8451q c Author your name Date 2021 02 23 22 16 37 LastEditTime 2021 02 2

随机推荐

  • The POM for is missing no dependency information available

    环境 win7 64 MyEclipse 10 5 java version 1 8 0 91 报错 1 导入报错 No marketplace entries found to handle maven compiler plugin 3
  • 求一个数阶乘末尾有几个零

    昨天校赛有一道题 是求一个数的阶乘 末尾有几个零 当时是没有做出来的 今天网上看了下 明白了原理 其实很多人都写过了 自己之所以再写 一是为了加强自己的理解 二是有的地方或许可以写得更详细 也写出自己思考的一些误区 回到题目本身 求一个数的
  • VTK库的编译和安装

    一 准备工具 CMake工具 Visual Studio 2013 VTK 8 1 0 The Visualization Toolkit 最新版源码 或者其他版本 二 使用CMake生成VTK的MS VS工程文件 打开CMake 设置源码
  • 基于CUDA的GPU优化建议

    l GPU硬件特性 n 存储层次 u Global memory l 大小一般为几GB l chip off的DRAM介质存储器 l 访问速度慢 是shared memory的上百倍 l 对于是否对齐和连续访问敏感 由DRAM的性质决定 l
  • 非常适合金融人的副业,不用坐班,时间自由!

    最近在论坛上看到一个测试 特扎心 以下三种情况 哪个让你最绝望 月薪4500 花呗欠了10000 被领导骂到哭 因为没钱不敢裸职 租房子的中介公司突然倒闭 房东逼你搬出去 你却拿不出押一付三的费用 说实话 我真的选不出 每一个都让我崩溃 0
  • 什么是白盒测试?什么是黑盒测试?两者的主要区别

    从测试方法上分 软件测试可分为白盒测试和黑盒测试 1 白盒测试 白盒测试 又称结构测试 主要用于单元测试阶段 它的前提是可以把程序看成装在一个透明的白箱子里 测试者完全知道程序的结构和处理算法 这种方法按照程序内部逻辑设计测试用例 检测程序
  • R语言—数据框

    文章目录 数据框 Dataframe 创建数据框 数据框的访问 通过组件的索引值来访问组件 通过组件的组件名来访问组件 通过访问矩阵的方式来访问组件 数据筛选 扩展数据框 添加列 添加行 使用apply 函数 数据框 Dataframe 数
  • 机器学习路径

    文章目录 前言 1 课前准备 2 主流的学习过程 3 具体内容 4 主要方向 体系 自然语言处理 知识图谱 计算机视觉 人机交互 参考资料 前言 1 机器学习到底应该怎么去学 机器学习的学习没有想象中的那么困难 当然也没有外面宣传的那么容易
  • R语言中的参数估计

    R语言中的参数估计 一直想要写博客来着 一直没有实现 昨天看室友写了 借着复习R语言考试 来开启我的第一篇博客叭 以下我将从点估计 区间估计来介绍区间估计 本文主要介绍R代码 具体的统计知识 详情可参考相关数理统计的专业书嗷 参数估计 R语
  • Day2 剑指offer

    30题 栈 定义栈的数据结构 请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中 调用 min push 及 pop 的时间复杂度都是 O 1 示例 MinStack minStack new MinStack minStac
  • 【0007】由于找不到MSVCR100.dll,无法继续执行代码

    下载安装Microsoft Visual C 2010 VC2010运行库 程序语言编译环境就能解决 官网下载地址 https www microsoft com zh CN download details aspx id 14632
  • 机器学习历程——人工智能基础与应用导论 专题篇(statsmodel)(3)

    目录 一 介绍 1 官网 2 主要功能 3 安装 二 t检验 1 概念 2 假设条件 3 单样本t检验 4 配对样本t检验 三 McNemar检验与Nemenyi检验 四 Friedman检验 一 介绍 1 官网 Introduction
  • Vue:统计代码行数

    1 在代码目录下打开git bash 2 在代码目录下打开git bash find name html or name js or name css or name vue print xargs wc l 运行结果 3 命令解析 fin
  • 中国银行业发展前景预测与未来战略规划建议报告2022-2028年版

    中国银行业发展前景预测与未来战略规划建议报告2022 2028年版 报告目录 第一章 2020 2022年国际银行业分析 1 1 2020 2022年全球银行业运行状况分析 1 1 1 全球宏观经济 1 1 2 金融市场波动 1 1 3 行
  • vue监听watch使用

    watch监听一定要监听 属性值 也就是data值 案例 data return language methods handleSetLanguage lang this i18n locale lang this language lan
  • cJSON介绍及使用

    JSON JavaScript Object Notation 是一种轻量级的文本数据交换格式 易于让人阅读 同时也易于机器解析和生成 尽管JSON是Javascript的一个子集 但JSON是独立于语言的文本格式 并且采用了类似于C语言家
  • 面向对象&类和对象

    一 面向对象的概念 概念 面向对象是基于万物皆对象这个哲学观点 在Python中 一切皆对象 说明 案例 我想要吃大盘鸡 面向过程 面向对象 1 自己去买菜 1 委托一个会砍价的人帮忙去买菜 2 自己择菜 2 委托一个临时工帮忙择菜 3 自
  • 认知与思考-190820

    首先我觉得人应该读自己能驾驭的书 或者说自己的人格坚固 道家讲道心 佛家讲慧根 其实就是自己的本心不为所动 如果能 读各种书只会增加你处事能力和分辨万物的能力 你是主体 知识只是你解决方式的手段 向阳而生 你要知道 世间万物本就存在 你读不
  • 【第60篇】多目标跟踪:文献综述

    文章目录 摘要 1 简介 1 1 与其他相关综述的区别 1 2 贡献 1 3 综述的结构 1 4 外延 2 MOT问题 2 1 问题公式化 2 2 MOT的分类 2 2 1 初始化方法 2 2 2 处理方式 2 2 3 输出类型 2 2 4
  • 3 Decomposition Methods

    分解方法是解决问题的一般方法 其将问题分解为更小的问题并且并行地或者顺序地解决每个更小的问题 当采用顺序的方式时 优点是问题的复杂性呈超线性增长 more than linearly 如果问题在单步操作中分解有效 那么我称该问题为 块 可分