行生成就是指的不断添加约束的算法。
因为在求解矩阵中,一个约束条件对应一行,因此添加约束条件的方法自然叫做行生成算法。相对应的,添加变量的方法就叫做列生成算法。
这一节先看行生成算法,用在求解变量不多,但是约束条件特别多的情况下。
Benders分解(Benders Decomposition,BD)的基本思路是:使用 子问题(primal problem) 来寻找合适的约束不断添加到 松弛主问题(relaxed master problem) 中。子问题可以给上界(UB),松弛主问题可以给下界(LB),不断迭代就可以逐步找到最优解。具体可以参考论文: http://www.ie.boun.edu.tr/~taskin/pdf/taskin_benders.pdf ,这里做一下简单的概述:
问题模型是:
Benders分解将上述模型拆分为只包含x变量的子问题和只包含y变量的主问题。
子问题(SP)为:
min cx
s.t. Ax = b - By
使用对偶法求解子问题(DSP):
max α(b-By’)
s.t. Aα ≤ c
α无限制
这是个线性规划问题,枚举可行域{α : Aα≤c}的极点(I)和极方向(J)便可以求解了,上面DSP等价于:
min q
s.t. α i (b-By) ≤ q
α j (b-By) ≤ 0
q无限制
定义q(y)为SP问题的最优解,则原问题可以重新写为如下主问题的形式:
min q(y)+fy
s.t. y∈Y
等价于下面的主问题(MP):
min q+fy
s.t. α i (b-By) ≤ q
α j (b-By) ≤ 0
y∈Y,q无限制
由于约束条件较多,因此α也是非常多的,直接上所有约束条件求解MP比较困难。因此从少量约束条件的松弛主问题开始,逐步把约束条件加上。
在下面的问题中,y∈{0,1}属于复杂约束,因此将原问题按如图的颜色拆分开。
一轮迭代后,UB = 23,LB = 8,还需要继续迭代。后面的求解过程省略。
Benders分解法要求子问题必须为线性,而广义Benders分解法(Generalized Benders Decomposition,GBD)针对这个问题作了改进。广义Benders分解的问题模型是:
由于涉及到了非线性规划,因此要用到拉格朗日法。求解的步骤是:
Benders分解技术Benders分解算法是J.F.Benders在1962年首先提出的,是一种求解混合整数规划问题的算法。Benders分解算法将具有复杂变量的规划问题分解为线性规划和整数规划,用割平面的方法分解出主问题与子问题,通过迭代的方法求解出最优值。Benders分解算法是一个很常用的算法,用来计算像最小整数非线性规划问题和随机规划问题之类的难以计算的难题。理论上来说,Benders 算法是能解决大部分的整数规划问题。在实际运用中,它主要是从求解的运算次数和运算时间上来使求解问题得到优化摘自百度百科。
由一种物质反应生成两种或两种以上新物质的反应叫分解反应。其中部分反应为氧化还原反应,部分为非氧化还原反应。按照不同的分类标准,分解反应可以被分为不同的类别。此外,只有化合物才能发生分解反应。
分解反应,是化学反应的常见的四大基本反应类型之一,是化合反应的逆反应。它指两种或两种以上物质分解成一种单质或化合物的反应,可以简单理解为“多变一”,也可以理解成为由两种或两种以上反应物发生化学反应后生成一种物质的反应,如水的电解、双氧水分解、氯酸钾受热分解,高锰酸钾受热分解等反应。
水在直流电的作用下分解【2H2O==通电==2H2↑+O2↑】。
现象:电极上有气泡产生,V(H2):V(O2)=2:1,正极产生的气体(O2)能使带火星的木条复燃,负极产生的气体(H2)能在空气中燃烧,产生淡蓝色火焰。
加热碱式碳酸铜【Cu2(OH)2CO3==△==2CuO+CO2↑+H2O】。
现象:绿色粉末变成黑色,试管内壁有水雾或水珠生成,澄清石灰水变浑浊。
加热氯酸钾和二氧化锰制氧气:【2KClO3==MnO2催化且△==2KCl+3O2↑】
现象:有气泡产生,带火星的木条复燃。
加热高锰酸钾制氧气:【2KMnO4==△==K2MnO4+MnO2+O2↑】
现象:有气泡产生,带火星的木条复燃。
实验室用双氧水制氧气:【2H2O2==MnO2==O2↑+2H2O】
现象:有气泡产生,带火星的木条复燃。
加热氧化汞:【2HgO==△==2Hg+O2↑】
现象:红色的氧化汞变为银白色,带火星的木条复燃。
碳酸不稳定而分解:【H2CO3====CO2↑+H2O】
现象:有气泡产生,石蕊试液由红色变成紫色。
希望我能帮助你解疑释惑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)