主要内容

基于求解器的有界约束二次规划

这个例子展示了如何通过求解二次优化问题来确定马戏团帐篷的形状。帐篷由沉重的、有弹性的材料构成,并形成一个受限制的最小势能的形状。将问题离散化,得到有界-有约束二次规划问题。

有关此示例的基于问题的版本,请参见基于问题的有界约束二次规划

问题定义

考虑建造一个马戏团帐篷来覆盖一个广场。帐篷有五根杆子,上面覆盖着一种沉重的、有弹性的材料。问题是要找到帐篷的自然形状。将形状建模为高度xp)帐篷的位置p

重力:重物升到高度时的势能x残雪,对于常数c这与材料的重量成正比。对于这个问题,请选择c= 1/3000。

一块材料的弹性势能 E 年代 t r e t c h 大约正比于材料高度的二阶导数,乘以高度。你可以用5点有限差分近似来近似二阶导数(假设有限差分步长为1) Δ x 表示在第一个坐标方向上移位1,和 Δ y 表示在第二个坐标方向上移动1。

E 年代 t r e t c h p - 1 x p + Δ x + x p - Δ x + x p + Δ y + x p - Δ y + 4 x p x p

帐篷的自然形状使总势能最小化。通过离散化问题,你会发现要最小化的总势能是所有位置的和p E 年代 t r e t c h p +残雪p).

势能是变量中的二次表达式x

指定边界条件,即帐篷边缘的高度为零。帐篷杆的横截面为1 × 1单位,帐篷的总尺寸为33 × 33单位。指定每个极点的高度和位置。划出方形地段和帐篷杆。

高度= 0 (33);高度(6:7,6:7)= 0.3;高度(26:27,26:27)= 0.3;身高(6:7,26:27)= 0.3;身高(26:27,6:7)= 0.3;高度(16:17,16:17)= 0.5;colormap(灰色);surfl(高度)轴视图([-20,30]);标题(“帐篷杆和覆盖区域”

图中包含一个轴对象。标题为Tent Poles和Region to Cover的axis对象包含一个类型为surface的对象。

创建边界条件

高度矩阵定义了解的下界x.若要限制解在边界处为零,请设置上界乌兰巴托在边界上为零。

border = false(size(height));Boundary ([1,33],:) = true;Boundary (:,[1,33]) = true;Ub = inf(大小(边界));大部分区域没有上界Ub(边界)= 0;

创建目标函数矩阵

quadprog问题的提法是最小化

1 2 x T H x + f T x

在这种情况下,是线性项 f T x 对应于材料高度的势能。因此,指定f的每个成分= 1/3000x

F = ones(尺寸(高度))/3000;

创建有限差分矩阵表示 E 年代 t r e t c h 通过使用delsq函数。的delsq函数返回一个包含4和-1项的稀疏矩阵,对应于公式中的4和-1项 E 年代 t r e t c h p .将返回的矩阵乘以2得到quadprog用所给出的能量函数求解二次规划 E 年代 t r e t c h

H = delsq(numgrid(“年代”, 33 + 2) * 2;

查看矩阵的结构H.矩阵作用于x (:),也就是矩阵x通过线性索引转换为向量。

间谍(H);标题(“Hessian矩阵的稀疏结构”);

图中包含一个轴对象。标题为Hessian矩阵的稀疏结构的坐标轴对象包含一个类型为line的对象。

运行优化求解器

打电话解决问题quadprog

x = quadprog(H,f,[],[],[],[], [],height,ub);
最小值满足约束条件。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。

策划解决方案

重塑解决方案x到一个矩阵年代.然后画出解。

S =重塑(x,大小(高度));surfl(年代);轴;视图([-20,30]);

图中包含一个轴对象。axis对象包含一个surface类型的对象。

相关的话题