主要内容

受限受限的二次编程,基于求解器

此示例显示了如何通过解决二次优化问题来确定马戏团帐篷的形状。帐篷由重,弹性材料形成,并沉降成具有最小势能受到约束的形状。问题的离散化导致了一个约束二次编程问题。

对于此示例的基于问题的版本,请参阅界限二次编程,基于问题

问题定义

考虑建造一个马戏帐篷以覆盖正方形。帐篷有五个杆子,上面覆盖着浓重的弹性材料。问题是找到帐篷的自然形状。建模形状为高度X((p)位于位置的帐篷p

重型材料的势能提升到高度XCX,为一个常数C这与材料的重量成正比。对于这个问题,选择C= 1/3000。

一块材料的弹性势能 e s t r e t C H 与材料高度的第二个衍生物大致成正比,乘以高度。您可以通过5点有限差近似值近似第二个导数(假设有限差步长为尺寸1)。让 δ X 代表第一个坐标方向的1个移位,并且 δ y 在第二个坐标方向上表示1位。

e s 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 s t r e t C H (( p +CX((p)。

这种势能是变量中的二次表达X

指定边界条件,即边缘处的帐篷高度为零。帐篷杆的横截面为1 x-1单元,帐篷的总尺寸为33 x 33个单位。指定每个杆的高度和位置。绘制正方形的地块区域和帐篷杆。

高度=零(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]);标题(“帐篷杆和覆盖区域”

图包含一个轴对象。带有标题帐篷电线杆和覆盖区域的轴对象包含一个类型表面对象。

创建边界条件

高度矩阵定义溶液上的下限X。要限制解决方案在边界处为零,请设置上限UB在边界上为零。

边界= false(size(height));边界([1,33],:) = true;边界(:,[1,33])= true;ub = inf(size(boundary));%在该地区的大多数地方没有上限ub(boundary)= 0;

创建目标函数矩阵

Quadprog问题公式是最小化

1 2 X t H X + F t X

在这种情况下,线性术语 F t X 对应于材料高度的势能。因此,指定F= 1/3000的每个组件X

f =一个(尺寸(高度))/3000;

创建代表有限差矩阵 e s t r e t C H 通过使用delsq功能。这delsq函数返回一个稀疏矩阵,其条目为4和-1,对应于公式中4和-1的条目 e s t r e t C H (( p 。将返回的矩阵乘以2Quadprog用由能量函数求解二次程序 e s t r e t C H

h = delsq(numgrid(',33+2))*2;

查看矩阵的结构H。矩阵在X(:),这意味着矩阵X通过线性索引转换为向量。

间谍(h);标题(“黑森矩阵的稀疏结构”);

图包含一个轴对象。带有标题稀疏结构的Hessian矩阵的轴对象包含一个类型行的对象。

运行优化求解器

通过打电话解决问题Quadprog

x = quadprog(h,f,[],[],[],[],[],height,ub);
最低限度发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。

图解决方案

重塑解决方案X到矩阵s。然后绘制解决方案。

s = rephape(x,size(height));Surfl(S);轴紧的;查看([ -  20,30]);

图包含一个轴对象。轴对象包含类型表面的对象。

相关话题