位置: IT常识 - 正文

两阶段鲁棒优化的 Benders分解 与 行列生成(C&CG) 算法及算例讲解(两阶段鲁棒优化 多目标)

编辑:rootadmin
两阶段鲁棒优化的 Benders分解 与 行列生成(C&CG) 算法及算例讲解

推荐整理分享两阶段鲁棒优化的 Benders分解 与 行列生成(C&CG) 算法及算例讲解(两阶段鲁棒优化 多目标),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:两阶段鲁棒优化 非线性模型,两阶段鲁棒优化会降低保守行性吗,两阶段鲁棒优化问题应用举例,两阶段鲁棒优化模型,两阶段鲁棒优化问题应用举例,两阶段鲁棒优化的优势,两阶段鲁棒优化 多目标,两阶段鲁棒优化的优势,内容如对您有帮助,希望把文章链接给更多的朋友!

​本文主要基于Zeng Bo老师2013年发表于《Operations Research Letters》上的文章《Solving two-stage robust optimization problems using a column-and-constraint generation method》和原文电子版全文。讲解了Zeng提出的 行列生成(column-and constraint generation, C&CG) 算法的思路,以及与传统的 Benders分解切平面法(Benders-style cutting plane methods) 的区别,辅以一个 原文中的 选址-运输问题 的主问题、子问题及其详细迭代和计算讲解,力求能让零基础的同学看懂其中的思路。

两阶段鲁棒优化与Benders对偶切平面法

本文讨论的一阶段与二阶段的问题均为线性规划问题,且不确定集为有限离散集(finite discrete set)或多面体集(polyhedron)。

令y为一阶段决策变量,x为二阶段决策变量。不确定集μ为离散集或多面体集,则二阶段鲁棒优化的一般形式(加粗的字母表示向量形式)一阶段问题为:

其中,F(x, u)为二阶段问题,如下:

即一阶段问题中不考虑不确定性,做出决策。之后将一阶段的变量y作为常数传入二阶段问题进行求解。这只是建模的思路,想要得到最优解还需要对模型做一些变换及用到算法。

此时二阶段问题为max-min问题,我们根据对偶理论将内层的min问题做一次变换,令π为对偶变量,则转换后的二阶段问题如下,这个问题也是Bender对偶方法的子问题。

此时的二阶段问题为max问题,但注意 不确定参数u 与 对偶变量π 均为决策变量,目标函数中存在二次项,该问题为双线性(Bilinear)问题,该问题通常为NP-Hard问题。双线性问题的求解可以通过近似方法,也可以利用不确定集的特性将其等价为混合整数规划(Mixed Integer Linear Problem, MILP)问题进行紧缺求解。这转换过程依赖于一个重要的性质:如果U是多面体集,则U和π合二为一的最优解总是在其各自的可行集中取极值点,本文后续的实例中也会用到类似的转化方法。

我们在此处直接将二阶段问题看作可以求解,则Benders对偶切平面算法的流程如下:

Benders-dual Cutting Plane Algorithm

1. 设定目标值上界UB=+∞, 下界LB=-∞,当前迭代次数k=0。

2. 求解以下主问题(Master Problem, MP):

3. 求解以下子问题(SubProblem,SP):

4. 如果UB-LB≤ε,其中ε为预先设定好的可以接受的偏差,则返回当前的目标值和最优解y,并退出循环。

否则设定k=k+1,将以下约束添加到主问题MP1中:

并返回第2步。

行列生成(Colume-and-Constraint generation algorithm, C&CG)

为了使得算法便于理解,我们首先考虑当不确定集μ为有限离散集合时的情况,即μ={u1,  u2, ..., ur}, {x1, x2, ..., xr}为每种情况下对应的二阶段决策变量。考虑到每种情况下的不确定性,则第一节中的两阶段鲁棒优化可表示如下:

        在这种情况下,求解两阶段鲁棒优化可以看作求解一个大规模的混合整数规划(MILP)问题。当不确定集规模很大或者为多面体集时,通过上述这种考虑不确定集μ中所有可能的场景来求解并不现实。但是基于(7)(8)中的约束,我们可以根据不确定集μ上的一个子集来为上述问题提供一个有效的松弛解,以及一个对应的目标值下界。因此,通过逐渐为原问题中添加特定场景来拓展问题,可以逐渐得到预期更强的下界。

        基于以上的思想,提出了行列生成算法,通过识别到不确定集中重要的场景来拓展主问题的不确定集,即动态生成相应的决策量和约束(7)(8)。

        与Benders分解类似,行列生成算法也应用了 主-子问题 的框架,子问题如下:

        行列生成具体的算法流程如下:

Column-and-constraint generation (C&CG) algorithm

1. 设定下界LB=-∞, 上界UB=+∞, 迭代次数k=0, 变量集O=∅,为空集。

2. 求解以下主问题(MP):

3. 求解以下子问题(SP):

4. 如果UB-LB≤ε,其中ε为预先设定好的可以接受的偏差,则返回当前的目标值和最优解y,并退出循环。

    否则:

    (a) 若子问题可行,即

,则在主问题中添加下列约束:

    其中u*为子问题的最优解,也即找到的最坏的场景。更新k=k+1, O =O∪{k+1},然后返回第2步进行迭代;

    (b) 若子问题不可行,即

,则在主问题添加下列约束:

    其中u*为子问题的最优解,也即找到使得

的场景。更新k=k+1, O =O∪{k+1},然后返回第2步进行迭代;

        注意上述4(a)中添加的约束为最优切平面,4(b)中添加的约束为可行切平面。

实例:鲁棒选址-运输问题

参数定义、取值 及 确定性模型

考虑以下选址运输问题,商品首先储存于m个备选的仓库中,然后被送到n个客户。参数和决策变量定义如下:

变量定义决    策    变    量yi是否在i地建设仓库,yi∈{1, 0}, i∈1,…,mzii仓库储存多少商品,zi∈R+, i∈1,…,mxij从i仓库到j客户运送多少商品,xij∈R+, i∈1,…,m,j∈1,…n参    数fi建设仓库i的固定成本ai仓库i存储商品的单位成本cij从i仓库到j客户运送单位商品的成本ki仓库i的最大容量dj客户j的需求

则该问题的确定性模型如下:

        目标函数及约束的定义可以参照原文。确定性模型假设所有顾客的需求都是已知数di,但在现实中顾客需求是不确定的,顾客需求的不确定集表示如下:

        Zeng 在文章中给出了一组用于求解的m,n均等于3的参数取值如下:

fi[400,  414, 326]ai[18, 25,  20]cij[22, 33, 24],    [33, 23, 30],    [20, 25, 27]ki[800, 800,  800]dj[206, 274,  220]dj~[40, 40,  40]

不考虑需求的偏差,确定性模型相当于求解以下线性规划:

        (上面的第2,3条约束有笔误,右侧应该是y1和y2)

        使用求解器直接求解,得目标值为30536,y=[1, 0, 1] ,z=[220, 0, 480],

 x=[[0, 0, 220], [0, 0, 0], [206, 274, 0]]。

两阶段鲁棒模型及转化

两阶段鲁棒优化的 Benders分解 与 行列生成(C&CG) 算法及算例讲解(两阶段鲁棒优化 多目标)

在两阶段鲁棒模型中,我们在一阶段未了解到准确的需求,此时做出建设仓库和存储商品的决策;在二阶段了解到顾客需求后,做出运输的决策。第一阶段模型如下:

        其中,R(x)为二阶段模型,定义如下:

其中不确定集D与d的定义为:

注意此时二阶段问题为max-min问题,不可以使用商业求解器进行求解。所以对二阶段模型进行一对偶,将内层的min问题变为max问题,将二阶段问题变为max问题。令π、λ分别为两条约束产生的对偶变量,二阶段问题如下:

        此时g_j也为决策变量,所以目标函数中存在双线性项g_j*λ_j, 因为不确定集D是一个多面体集,且Γ为整数,所以此时g_j∈{0, 1}。引入新变量w_j=λ_j * g_j,将模型转换为混合整数规划MILP模型。M'表示一个很大的数,此时MILP模型如下:

        二阶段的MILP模型也同时为Benders分解及C&CG算法的子问题。接下来,我们从实例的角度入手对两种算法分别进行迭代。

Benders 分解

Benders分解的主问题为鲁棒优化的一阶段问题,MP如下:

        子问题则为转化后的鲁棒优化二阶段问题,SP如下:

        此时开始求解问题,将不确定预算Γ设定为2,M‘设定为1e10,可接受的ε=0.001。根据Benders分解的算法流程,首先设定LB=-∞, UB=+∞, k=0。

        k=0时,LB=0,UB=7800000000000

        首先对主问题进行求解,此时d不考虑不确定性,即d=[206, 274, 220],相当于求解以下线性规划:

        因为此时对偶变量λ和π都无定义,所以η无约束。解上述问题得到此时目标值为0,y=[0, 0, 0], z=[0, 0, 0], η=0。所以更新新的下界即为目标值LB=fy+az+η=0+0=0。

        将y和z的值代入子问题中进行求解,相当于求解以下线性规划:

        解之得此时目标值为7800000000000,所以此时新的上界LB=0+7800000000000=7800000000000。此时最优解g=[0, 1, 1],

 λ=[10000000000,10000000000,10000000000],

π=[9999999978,9999999977,9999999980]。上下界未逼近,所以进入下一次迭代。

  k=1, LB=14440,UB=35574

        将子问题得到的不确定性预算g代入主问题,得到此时d^1=[206, 314, 260]。将新的一组d、λ和π代入主问题中,添加了一条新的约束,此时的主问题如下:

       此时根据上一轮迭代中的对偶变量取值,η有一条约束。解上述问题得到此时目标值为14440,y=[1, 0, 0], z=[780, 0, 0], η=0。所以更新新的下界LB=fy+az+η=14440+0=14440。

        将y和z的值代入子问题中进行求解,相当于求解以下线性规划:

        此时因为z的变化,目标函数发生了变化。解之得此时目标值为

21134,所以此时新的上界LB=14440+21134=35574。此时最优解g=[0, 1, 1], λ=[22,33,24],π=[0, 10, 8]。上下界未逼近,所以进入下一次迭代。

k=2, LB=30820,UB=34916

      将新的一组d、λ和π代入主问题中,添加了一条新的约束,此时d^2=[206, 314, 260],此时的主问题如下:

       此时η有2条约束,注意此问题中d没有发生变化,在实际操作中约束条件需要与上次迭代的d对应。解上述问题得到此时目标值为30820, y=[0, 0, 1], z=[0, 0, 780], η=14894。所以更新新的下界LB=fy+az+η=15926+15534=30820。

        将y和z值代入子问题,同样只改变目标函数不改变约束。解之得此时目标值为18990,所以此时新的上界LB=15926+18990=34916。此时最优解g=[0, 1, 1], λ=[20,25,27],π=[3, 2, 0]。上下界未逼近,所以进入下一次迭代。

k=3, LB=33454.182,UB=34016.001

      将新的一组d、λ和π代入主问题中,添加了一条新的约束,此时d^3=[206, 314, 260],此时的主问题如下:

       此时η有3条约束。解上述问题得到此时目标值为33454.182, y=[1, 0, 1], z=[372.364, 0, 407.636], η=17892.909。所以更新新的下界LB=fy+az+η=15581.273+17892.909=33454.182。

         将y和z值代入子问题。解之得此时目标值为18434.728,所以此时新的上界LB=15926+18990=34016.001。此时最优解g=[0, 1, 1], λ=[22,27,24],π=[0, 4, 2]。上下界未逼近,所以进入下一次迭代。

k=4, LB=34016,UB=34016

      将新的一组d、λ和π代入主问题中,添加了一条新的约束,d^4=[206, 314, 260],此时的主问题如下:

        此时η有4条约束。解上述问题得到此时目标值为34016, y=[1, 0, 1], z=[260, 0, 520], η=18210。所以更新新的下界LB=fy+az+η=15806+18210=34016。

         将y和z值代入子问题。解之得此时目标值为18210,所以此时新的上界LB=15806+18210=34016。此时最优解g=[0, 1, 1], λ=[20,25,24],π=[0, 2, 0]。

        上下界收敛,所以退出迭代,此时的最优函数值为34016。我们可以观察到在Benders分解算法中,子问题的对偶变量都将传入主问题中,生成新的约束进而进行迭代求解。此问题因为规模较小,所以每次迭代子问题中的不确定参数g都基本相同,在大规模问题中不确定参数g可能会有很大的波动,进而使得收敛变慢。

Column-and-constraint generation (C&CG)

C&CG的主问题为松弛后的确定性模型,MP如下,此处16为zi≤ki*yi):

        子问题与Benders分解相同,为转化后的鲁棒优化二阶段问题,SP如下:

        此时开始求解问题,将不确定预算Γ设定为2。根据C&CG算法流程,首先设定LB=-∞, UB=+∞, k=0, 变量集O=∅。

        k=0时,LB=0,UB=7800000000000

        首先对主问题进行求解,相当于求解以下线性规划:

        解上述问题得到此时目标值为0,y=[0, 0, 0], z=[0, 0, 0],η=0。所以更新新的下界即为目标值LB=fy+az+η=0+0=0。

将y和z的值代入子问题中进行求解,相当于求解以下线性规划:

        解之得此时目标值为7800000000000,所以此时新的上界LB=0+7800000000000=7800000000000。此时最优解g=[0, 1, 1]。上下界未逼近,进入下一次迭代。

k=1, LB=34016,UB=34016

        将子问题得到的不确定性预算g代入主问题,得到此时d^1=[206, 314, 260]。生成一组新的变量x^1,主问题相当于求解以下问题:

        解之得目标值为30146。η=18210,此时新的下界LB=34016,y=[1,0,1],z=[260, 0, 520]。可以看到已经与Benders分解的第四次主问题迭代结果相同。由于两种方法子问题完全相同,可以得到此时的UB=34016。UB-LB=0目标问题已经收敛.

总结

综上讨论我们可以看出Benders分解与C&CG算法的不同:Benders分解求解的主问题为鲁棒优化问题的一阶段,而子问题传回主问题的信息包括鲁棒优化二阶段的所有对偶变量的取值。主问题中只会不断生成约束条件,即切平面(Cutting-plane)或者叫行生成。

C&CG算法求解的主问题为部分场景下的确定性模型,子问题传回主问题的信息只包括当前一阶段决策下情况最坏的场景信息,在上述问题中即不确定性参数g。主问题中会根据此时生成的场景,不断生成约束条件和新的决策变脸。这就是C&CG的重要思想,子问题为寻找当前情况下最坏的场景,进而在主问题中生成变量和约束,进行迭代求解。

参考文献

Zeng, B., & Zhao, L. (2013). Solving two-stage robust optimization problems using a column-and-constraint generation method. Operations Research Letters, 41(5), 457-461.

本文链接地址:https://www.jiuchutong.com/zhishi/298533.html 转载请保留说明!

上一篇:申请百度地图开发者AK和基本使用(百度地图 申请)

下一篇:Vue3 京东到家项目实战第一篇(首页及登录功能开发) 进阶式掌握vue3完整知识体系(京东到家的物流模式)

  • 支付宝一起攒钱功能在哪里(支付宝一起攒钱的软件)

    支付宝一起攒钱功能在哪里(支付宝一起攒钱的软件)

  • 抖音草稿箱作品怎么删除(抖音草稿箱作品怎么恢复)

    抖音草稿箱作品怎么删除(抖音草稿箱作品怎么恢复)

  • excel如何排序呢(excel中怎样排序)

    excel如何排序呢(excel中怎样排序)

  • 淘宝亲情号有哪些权限(淘宝亲情号哪里开)

    淘宝亲情号有哪些权限(淘宝亲情号哪里开)

  • 固态硬盘原理(固态硬盘原理详解)

    固态硬盘原理(固态硬盘原理详解)

  • bootdevicepriority是什么意思

    bootdevicepriority是什么意思

  • nex a是什么型号(nexa是什么型号尺寸)

    nex a是什么型号(nexa是什么型号尺寸)

  • 来源朋友验证信息是通过什么途径(来源,朋友验证消息是什么意思)

    来源朋友验证信息是通过什么途径(来源,朋友验证消息是什么意思)

  • 小米蓝牙耳机air2和2s的区别(小米蓝牙耳机air2 se使用方法)

    小米蓝牙耳机air2和2s的区别(小米蓝牙耳机air2 se使用方法)

  • 8p指纹总是识别不了(8p指纹解锁总是失灵)

    8p指纹总是识别不了(8p指纹解锁总是失灵)

  • vivoz6电池能用多久(vivoz6电池是多少毫安的)

    vivoz6电池能用多久(vivoz6电池是多少毫安的)

  • 路由器工作在什么层(路由器工作在什么上)

    路由器工作在什么层(路由器工作在什么上)

  • 云硬盘是什么级的存储设备(云硬盘是什么级别的存储设备)

    云硬盘是什么级的存储设备(云硬盘是什么级别的存储设备)

  • qq充了vip再充svip会怎样(qq充完vip再充svip有什么用)

    qq充了vip再充svip会怎样(qq充完vip再充svip有什么用)

  • 环绕方式上下型怎么设置(word环绕方式上下型怎么设置)

    环绕方式上下型怎么设置(word环绕方式上下型怎么设置)

  • net4.0是什么(net4.0和4.6)

    net4.0是什么(net4.0和4.6)

  • 抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

    抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

  • ios13信号差解决办法(ios13.3信号不好)

    ios13信号差解决办法(ios13.3信号不好)

  • 呼叫转移怎么关闭(呼叫转移怎么关闭不了)

    呼叫转移怎么关闭(呼叫转移怎么关闭不了)

  • 华为8x支持nfc功能吗(华为8x有没有nfc)

    华为8x支持nfc功能吗(华为8x有没有nfc)

  • 苹果8像素是不是很差(苹果8像素是不是很差呀)

    苹果8像素是不是很差(苹果8像素是不是很差呀)

  • 激活office是啥意思(激活office产品)

    激活office是啥意思(激活office产品)

  • 苏州申请专利要多久(苏州专利审查)

    苏州申请专利要多久(苏州专利审查)

  • 红米k20pro尺寸(红米k20pro尺寸大小)

    红米k20pro尺寸(红米k20pro尺寸大小)

  • 华硕电脑硬盘在哪(华硕硬盘在哪里)

    华硕电脑硬盘在哪(华硕硬盘在哪里)

  • 华为钱包在哪里找到(华为手机华为钱包在哪里)

    华为钱包在哪里找到(华为手机华为钱包在哪里)

  • Ghyakar村,尼泊尔上木斯塘 (© Frank Bienewald/Alamy)(尼泊尔乡村)

    Ghyakar村,尼泊尔上木斯塘 (© Frank Bienewald/Alamy)(尼泊尔乡村)

  • 【已解决】Git踩坑笔记[! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to "xxx"](git t)

    【已解决】Git踩坑笔记[! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to "xxx"](git t)

  • 如何免费下载windows10系统64位播放器7元收费HEVC解码器,电脑学习网免费送给大家(如何免费下载win10 家庭版)

    如何免费下载windows10系统64位播放器7元收费HEVC解码器,电脑学习网免费送给大家(如何免费下载win10 家庭版)

  • 企业所得税纳税人
  • 二手房个人所得税是买方交还是卖方交
  • 因租赁形成的使用权资产
  • 未取得发票的费用,在汇算清缴中按利润计算吗
  • 费用发票能不能直接挂应付账款里
  • 申报时入库税款怎么入账
  • 预交所得税利润表怎么填
  • 政策性搬迁资产损失情况怎么写
  • 清算资金往来借贷方什么意思
  • 发票作为付款凭证的案例
  • 企业挂靠税收市收取的标准是什么
  • 单位车辆卖给个人怎么开票
  • 餐饮服务业是否属于企业
  • 代理手续费税收分类编码
  • 案例分析关于拟建科学馆的请示报告
  • 电子发票转收入怎么做为记账凭证?
  • 企业接受非现金资产投资的账务处理
  • 车辆保险抵扣会计分录
  • 跨年的暂估成本怎么冲回
  • 网络端口被占用怎么解决
  • 计提待摊费用怎么记账
  • 代理进口货物账务怎么处理
  • mac怎么同步
  • 关闭自动更新应用程序
  • php判断查询是否有结果
  • linux系统用法
  • 土地使用税滞纳金不得超过
  • 投影仪哪种光源亮度高
  • FUXA个人学习总结(一)
  • laravel 分层
  • vite + vue + ts 自动按需导入 Element Plus组件,并如何解决按需引入后ElMessage与ElLoading 的问题(找不到名称“ElMessage”问题。)
  • 劳动保护经费
  • Android App中DrawerLayout抽屉效果的菜单编写实例
  • ubuntu busier
  • ai绘画图片
  • find命令详解查找文件
  • 普通发票冲红后还会有税吗
  • 固定资产改造更新
  • 进项税可以跨年结转吗
  • 免税后的商品有什么优势?
  • 加工费能直接抵税吗
  • 进项税转出的会计分录
  • mysql 5.7特性
  • 公司代个人缴纳社保,但不发工资和交税
  • 购置环保设备一次性扣除
  • 企业汇算清缴中的职工薪酬指的是管理费用中的吗
  • 金蝶软件中怎么让以前年度损益调整在利润表中取不到数
  • 行政单位无偿划拨资产账务处理
  • 出差补助没有发票
  • 出口退税暂不抵税怎么办
  • 组织员工旅游的租宿费的税额是什么
  • 承租人对融资租赁业务进行会计处理的方法有( )
  • 机票 进项抵扣
  • 电梯在固定资产里属于什么设备类别
  • 三栏式明细账适用于原材料吗
  • mysql建唯一索引
  • w10 2021年更新
  • windows server 2003如何安装
  • windows怎么安装apk
  • 鼠标右键一直锁定一个应用
  • Linux系统中Squid代理服务器配置全过程解析
  • centos 3
  • xp系统个性化
  • ubuntu20 配置静态ip
  • mac 钥匙串访问
  • windows 8.1安装教程
  • linux不小心删除目录怎么恢复
  • 跑跑跑游戏
  • 逆向教程推荐知乎
  • python里面import
  • js数组随机抽奖
  • vuex详细教程
  • node.js app
  • java轻松学
  • nodejs常用内置模块
  • javascript instanceof 与typeof使用说明
  • js dom操作方法
  • jquery的dialog
  • 交管12123怎么打电话
  • 税务稽查总队
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设