二次规划算法
二次规划的定义
二次规划就是求一个向量的问题x 使可能受线性约束的二次函数最小化的:
(1)年代trong>
这样<年代pan class="inlineequation">·x≤b,Aeq·x =说真的 ,l ≤x≤u年代pan>.
年代ect我on>
interior-point-convexquadprog算法
的interior-point-convex 算法执行以下步骤:
请注意年代trong>
该算法有两条代码路径。当黑森矩阵H 是一个普通的(完整的)双精度矩阵,它在什么时候取另一个H 是一个稀疏矩阵。有关稀疏数据类型的详细信息,请参见稀疏矩阵 .通常,对于指定的非零项相对较少的大型问题,该算法速度更快H 作为稀疏的.同样,当您指定时,算法对于较小或相对密集的问题会更快H 作为完整的.
<年代ect我on itemprop="content">
Presolve / Postsolve
该算法首先试图通过删除冗余和简化约束来简化问题。在presolve步骤中执行的任务包括:
检查变量是否有相等的上界和下界。如果是,检查其可行性,然后修复和删除变量。
检查是否任何线性不等式约束只涉及一个变量。如果是,检查其可行性,然后将线性约束更改为一个边界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查其可行性,然后修复并删除该变量。
检查线性约束矩阵是否有零行。如果是,检查其可行性,然后删除这些行。
确定边界和线性约束是否一致。
检查是否有变量只在目标函数中作为线性项出现而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个单一可行点,这个点代表解。
gydF4y2Ba如果算法在求解步骤中没有检测到不可行的或无界问题,并且如果求解步骤没有产生解,则算法继续进行下一步。在达到停止条件后,算法重构原问题,撤销任何解变换。最后一步是后解步骤。
gydF4y2Ba详情请参见Gould和Toint[63] .
年代ect我on>
生成初始点
起始点x0 对于算法为:
初始化x0 来的(n, 1) ,在那里n 行数在吗H .
对于有上限的分量乌兰巴托 还有一个下限磅 的组成部分x0 是否严格在边界内,组件被设置为(乌兰巴托+磅)/ 2 .
对于只有一个边界的组件,如果有必要,可以修改该组件,使其严格位于边界内。
采取预测步骤(参见预估 ),对可行性进行了轻微修正,而不是一个完整的预测-校正步骤。这使得初始点更接近中央路径 不需要承担整个预测-校正步骤的开销。关于中心路径的细节,请参见Nocedal和Wright[7] , 397页。
二次规划的定义
二次规划就是求一个向量的问题
这样<年代pan class="inlineequation">·x≤
interior-point-convexquadprog算法
的interior-point-convex 算法执行以下步骤:
请注意年代trong>
该算法有两条代码路径。当黑森矩阵H 是一个普通的(完整的)双精度矩阵,它在什么时候取另一个H 是一个稀疏矩阵。有关稀疏数据类型的详细信息,请参见稀疏矩阵 .通常,对于指定的非零项相对较少的大型问题,该算法速度更快H 作为稀疏的.同样,当您指定时,算法对于较小或相对密集的问题会更快H 作为完整的.
<年代ect我on itemprop="content">
Presolve / Postsolve
该算法首先试图通过删除冗余和简化约束来简化问题。在presolve步骤中执行的任务包括:
检查变量是否有相等的上界和下界。如果是,检查其可行性,然后修复和删除变量。
检查是否任何线性不等式约束只涉及一个变量。如果是,检查其可行性,然后将线性约束更改为一个边界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查其可行性,然后修复并删除该变量。
检查线性约束矩阵是否有零行。如果是,检查其可行性,然后删除这些行。
确定边界和线性约束是否一致。
检查是否有变量只在目标函数中作为线性项出现而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个单一可行点,这个点代表解。
gydF4y2Ba如果算法在求解步骤中没有检测到不可行的或无界问题,并且如果求解步骤没有产生解,则算法继续进行下一步。在达到停止条件后,算法重构原问题,撤销任何解变换。最后一步是后解步骤。
gydF4y2Ba详情请参见Gould和Toint[63] .
年代ect我on>
生成初始点
起始点x0 对于算法为:
初始化x0 来的(n, 1) ,在那里n 行数在吗H .
对于有上限的分量乌兰巴托 还有一个下限磅 的组成部分x0 是否严格在边界内,组件被设置为(乌兰巴托+磅)/ 2 .
对于只有一个边界的组件,如果有必要,可以修改该组件,使其严格位于边界内。
采取预测步骤(参见预估 ),对可行性进行了轻微修正,而不是一个完整的预测-校正步骤。这使得初始点更接近中央路径 不需要承担整个预测-校正步骤的开销。关于中心路径的细节,请参见Nocedal和Wright[7] , 397页。
quadprog算法
的interior-point-convex 算法执行以下步骤:
请注意年代trong>
该算法有两条代码路径。当黑森矩阵H 是一个普通的(完整的)双精度矩阵,它在什么时候取另一个H 是一个稀疏矩阵。有关稀疏数据类型的详细信息,请参见稀疏矩阵 .通常,对于指定的非零项相对较少的大型问题,该算法速度更快H 作为稀疏的.同样,当您指定时,算法对于较小或相对密集的问题会更快H 作为完整的.
<年代ect我on itemprop="content">
Presolve / Postsolve
该算法首先试图通过删除冗余和简化约束来简化问题。在presolve步骤中执行的任务包括:
检查变量是否有相等的上界和下界。如果是,检查其可行性,然后修复和删除变量。
检查是否任何线性不等式约束只涉及一个变量。如果是,检查其可行性,然后将线性约束更改为一个边界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查其可行性,然后修复并删除该变量。
检查线性约束矩阵是否有零行。如果是,检查其可行性,然后删除这些行。
确定边界和线性约束是否一致。
检查是否有变量只在目标函数中作为线性项出现而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个单一可行点,这个点代表解。
gydF4y2Ba如果算法在求解步骤中没有检测到不可行的或无界问题,并且如果求解步骤没有产生解,则算法继续进行下一步。在达到停止条件后,算法重构原问题,撤销任何解变换。最后一步是后解步骤。
gydF4y2Ba详情请参见Gould和Toint[63] .
年代ect我on>
生成初始点
起始点x0 对于算法为:
初始化x0 来的(n, 1) ,在那里n 行数在吗H .
对于有上限的分量乌兰巴托 还有一个下限磅 的组成部分x0 是否严格在边界内,组件被设置为(乌兰巴托+磅)/ 2 .
对于只有一个边界的组件,如果有必要,可以修改该组件,使其严格位于边界内。
采取预测步骤(参见预估 ),对可行性进行了轻微修正,而不是一个完整的预测-校正步骤。这使得初始点更接近中央路径 不需要承担整个预测-校正步骤的开销。关于中心路径的细节,请参见Nocedal和Wright[7] , 397页。
预估
稀疏算法和全内点凸算法的区别主要在于预测-校正相位。算法是相似的,但在一些细节上有所不同。关于基本算法的描述,请参见Mehrotra
gydF4y2Ba算法首先将线性不等式Ax <= b转化为Ax >= b形式的不等式,通过将A和b乘以-1。这对解没有影响,但使问题的形式与某些文献中发现的相同。
稀疏的预估。年代trong>类似于