主要内容

基于问题的有界约束二次规划

这个例子展示了如何通过解决二次优化问题来确定马戏团帐篷的形状。帐篷由重型弹性材料制成,并固定成一种受约束势能最小的形状。问题的离散化导致一个有界约束二次规划问题。

有关此示例的基于解算器的版本,请参见有界约束二次规划,基于解算器.

问题定义

考虑建造一个马戏团帐篷来覆盖一个方形的帐篷。帐篷有五个杆子,上面覆盖着一个又重又有弹性的材料。问题是要找到帐篷的自然形状。x(P)帐篷的位置P.

重物被提升到高处的势能xcx,表示常数C这与材料的重量成比例。对于此问题,请选择C= 1/3000.

一块材料的弹性势能 E s T R E T C H 近似与材料高度的二阶导数乘以高度成正比。您可以通过五点有限差分近似(假设有限差分步骤的大小为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×1单位,帐篷的总尺寸为33×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;彩色贴图(灰色);曲面(高度)轴牢固的视图([-20,30]);标题(“帐篷杆和覆盖区域”)

图中包含一个轴对象。标题为“帐篷杆”和“要覆盖的区域”的轴对象包含“曲面”类型的对象。

公式化优化问题

创建一个优化变量x表示材质的高度。

x=optimvar(“x”,大小(高度);

设置x在正方形区域的边界上归零。

边界=假(尺寸(高度));边界([1,33],:)=true;边界(:,[1,33])=真;x、 下限(边界)=0;x、 上限(边界)=0;

计算每个点的弹性势能。首先,计算区域内部的势能,有限差分不会超出包含解的区域。

L=尺寸(高度,1);peStretch=optimexpr(L,L);%这会将peStretch初始化为零(L,L)内部=2:(L-1);peStretch(内部,内部)=-1*(x(内部-1,内部)+x(内部+1,内部)...+x(内饰,内饰-1)+x(内饰,内饰+1))+4*x(内饰,内饰))...*x(内部,内部);

由于解决方案在区域边缘处被约束为0,因此不需要包含其余的项。所有术语都有一个倍数xx在边缘处为零。为了便于参考,如果你想使用不同的边界条件,下面是一个注释掉的势能。

%peStretch(1,内部)=-1*(x(1,内部-1)+x(1,内部+1)+x(2,内部))。。。%+4*x(1个内饰))*x(1个内饰);%peStretch(L,内部)=-1*(x(L,内部-1)+x(L,内部+1)+x(L-1,内部))。。。%+4*x(长,内部))*x(长,内部);%peStretch(内部,1)=-1*(x(内部-1,1)+x(内部+1,1)+x(内部,2))。。。%+4*x(内部,1))*x(内部,1);%peStretch(interior,L)=-1*(x(interior-1,L)+x(interior+1,L)+x(interior,L-1))。。。%+4*x(内部,左)和*x(内部,左);%peStretch(1,1)=-1*(x(2,1)+x(1,2))+4*x(1,1))*x(1,1);%鼠疫菌(1,L)=-1*(x(2,L)+x(1,L-1))+4*x(1,L))*x(1,L);%peStretch(L,1)=-1*(x(L,2)+x(L-1,1))+4*x(L,1))*x(L,1);%鼠疫菌(L,L)=-1*(x(L-1,L)+x(L,L-1))+4*x(L,L)).*x(L,L);

定义因材料高度而产生的势能,即x/3000.

PEH=x/3000;

创建一个名为帐篷问题.包括目标函数的表达式,即所有位置上两个势能的总和。

问题=最优化问题(“目标”,sum(sum(peStretch+peHeight));

设置约束

设置解决方案必须位于身高矩阵。该矩阵在大多数位置为零,表示地面,包括每个帐篷杆在其位置的高度。

htcons=x>=高度;tentproblem.Constraints.htcons=htcons;

运行优化解算器

解决问题。忽略结果语句“您的Hessian不对称”解决发出此语句是因为从问题形式到二次矩阵的内部转换不能确保矩阵是对称的。

sol=解决(问题);
使用quadprog解决问题。你的黑森不是对称的。重置H=(H+H')/2。找到满足约束条件的最小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。

绘图解决方案

绘制由优化解算器找到的解决方案。

表面粗糙度(sol.x);轴牢固的视图([-20,30]);

图中包含一个轴对象。“轴”对象包含“曲面”类型的对象。

相关话题