主要内容

Bound-Constrained二次规划,具体问题具体分析

这个例子展示了如何确定一个马戏团帐篷的形状通过求解一个二次优化问题。帐篷是由重,弹性材料,落定在一个最小势能的形状受到约束。的离散化问题导致bound-constrained二次规划问题。

solver-based版本的这个例子中,看到的Solver-Based Bound-Constrained二次规划

问题定义

考虑建立一个马戏团帐篷覆盖一个正方形。帐篷有五个波兰人覆盖着一个沉重的,弹性材料。问题是要找到自然形状的帐篷。模型形状的高度x(p)帐篷的位置p

重型材料提升高度的势能x残雪为一个常数c这是材料的重量成正比。对于这个问题,选择c= 1/3000。

材料的弹性势能的一块 E 年代 t r e t c h 大约是与材料的二阶导数的高度成比例,乘以高度。五点你可以近似二阶导数的有限差分近似(假设的有限差分步骤大小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-by-33单位的总大小。指定每个杆的高度和位置。情节广场许多地区和帐篷波兰人。

身高= 0 (33);高度(者者)= 0.3;高度(二六27,二六27)= 0.3;高度(者,二六27)= 0.3;高度(二六27,者)= 0.3;高度(16:17,16:17)= 0.5;colormap(灰色);surfl(高度)轴视图([-20,30]);标题(“帐篷波兰人和地区覆盖”)

图包含一个坐标轴对象。坐标轴对象与标题帐篷波兰人和地区覆盖包含一个类型的对象的表面。

制定优化问题

创建一个优化变量x代表材料的高度。

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

x为零的边界广场域。

边界= false(大小(高度));边界([1,33]:)= true;边界(:,(1,33))= true;x.LowerBound(边界)= 0;x.UpperBound(边界)= 0;

计算每个点的弹性势能。首先,计算势能的内部地区,该地区有限的分歧不逾越包含解决方案。

L =大小(高度,1);peStretch = optimexpr (L, L);这个初始化peStretch % 0 (L, L)室内= 2:(l - 1);peStretch(室内,室内)= (1 * (x(室内- 1,室内)+(内部+ 1,室内)+ x(室内,室内- 1)+ x(室内,室内+ 1))+ 4 * x(室内,室内)). * x(室内,室内);

因为解决方案是限制为0的边缘地区,您不需要包含剩余的条款。所有条款的倍数x,x边缘是零。供参考,以防你想使用一个不同的边界条件,下面是一个注释掉版本的势能。

% peStretch(内部)= (1 * (x(1、室内- 1)+ x(1、室内+ 1)+(2、室内))…% + 4 * x(内部))。* x(内部);% peStretch (L,内政部)= (1 * (x (L,室内- 1)+ x (L,室内+ 1)+ x (L - 1,室内))…% + 4 * x (L,内政部))* x (L,室内);% peStretch(内部,1)= (1 * (x(室内- 1,1)+ x(内部+ 1,- 1)+(2)内部,)…% + 4 * x(内部,1))* x(内部,1);% peStretch(内部,L) = (1 * (x(室内- 1,L) + x(内部+ 1,L) +(内部,L - 1))…% + 4 * x(内部,L)) * x(室内,L);% peStretch (1, - 1) = (1 * (x (2, 1) + x (1、2)) + 4 * x (1,1))。* x (1,1);% peStretch (L) = (1 * (x (2 L) + x (1, L - 1)) + 4 * x(1升))。* x(1升);% peStretch (L, 1) = (1 * (x (L, 2) + x (L - 1, - 1)) + 4 * x (L, 1))。* x (L, 1);% peStretch (L, L) = (1 * (x (L - 1, L) + x (L, L - 1)) + 4 * x (L, L)。* x (L, L);

定义的势能由于材料的高度,这是x / 3000

peHeight = x / 3000;

创建一个名为优化问题tentproblem。包括目标函数的表达式,这两个潜在的能量的总和所有位置。

tentproblem = optimproblem (“目标”总和(sum (peStretch + peHeight)));

设置约束

设置约束,上面的解决方案必须撒谎的值高度矩阵。这个矩阵是零最多的地方,代表地面,包括每个帐篷杆的高度位置。

htcons = x > =身高;tentproblem.Constraints。htcons = htcons;

运行优化解算器

解决这个问题。忽略结果表述“你黑森是不对称的。”解决问题这个语句,因为内部转换问题形成一个二次矩阵并不能保证矩阵是对称的。

索尔=解决(tentproblem);
使用quadprog解决问题。你的黑森不是对称的。重置H = (H + H) / 2。最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。

策划解决方案

情节所找到的解决方案的优化求解。

surfl (sol.x);轴;视图([-20,30]);

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

相关的话题