基于问题的分段线性质量-弹簧系统的锥规划最小化能量gydF4y2Ba
这个例子展示了如何使用基于问题的方法找到悬在两个锚点上的质量-弹簧系统的平衡位置。弹簧具有分段线性拉力。该系统由gydF4y2Ba 二维的质量。质量gydF4y2Ba 与弹簧相连gydF4y2Ba 而且gydF4y2Ba .弹簧gydF4y2Ba 而且gydF4y2Ba 也连接到单独的锚点。在这种情况下,弹簧的零力长度gydF4y2Ba 长度为正gydF4y2Ba ,弹簧产生力gydF4y2Ba 当拉伸到一定长度时gydF4y2Ba .问题是找到质量的最小势能配置,其中势能来自重力和非线性弹簧的拉伸。平衡发生在最小能量构型处。gydF4y2Ba
这幅插图显示了悬挂在两个锚点上的五个弹簧和四个物体。gydF4y2Ba
质量的势能gydF4y2Ba 在高度gydF4y2Ba 是gydF4y2Ba ,在那里gydF4y2Ba 是地球上的引力常数。同样,具有弹簧常数的理想线性弹簧的势能gydF4y2Ba 拉伸长度gydF4y2Ba 是gydF4y2Ba .在现有模型中,弹簧的静息长度并不理想,但它具有非零静息长度gydF4y2Ba .gydF4y2Ba
这个例子的数学基础来自于Lobo, Vandenberghe, Boyd和LebretgydF4y2Ba[1]gydF4y2Ba.有关此示例的基于求解器的版本,请参见gydF4y2Ba基于求解器的分段线性质量-弹簧系统的锥规划最小化能量gydF4y2Ba.gydF4y2Ba
数学公式gydF4y2Ba
质量的位置gydF4y2Ba 是gydF4y2Ba ,用横坐标表示gydF4y2Ba 和垂直坐标gydF4y2Ba .质量gydF4y2Ba 重力产生的势能是多少gydF4y2Ba .春天的势能gydF4y2Ba 是gydF4y2Ba ,在那里gydF4y2Ba 是弹簧的长度之间的质量gydF4y2Ba 和质量gydF4y2Ba .取锚点1为质量0的位置,锚点2为质量0的位置gydF4y2Ba .前面的能量计算表明,弹簧的势能gydF4y2Ba 是gydF4y2Ba
.gydF4y2Ba
将这个势能问题重新表述为二阶锥规划问题需要引入一些新的变量,如Lobo中所述gydF4y2Ba[1]gydF4y2Ba.创建变量gydF4y2Ba 等于这项的平方根gydF4y2Ba .gydF4y2Ba
让gydF4y2Ba 是单位列向量gydF4y2Ba .然后gydF4y2Ba .这个问题变得gydF4y2Ba
(1)gydF4y2Ba
现在考虑gydF4y2Ba 作为一个自由向量变量,不是由前面的方程给出的gydF4y2Ba .结合gydF4y2Ba 而且gydF4y2Ba 在新的圆锥约束条件下gydF4y2Ba
(2)gydF4y2Ba
目标函数的变量还不是线性的,如所要求的gydF4y2BaconeproggydF4y2Ba
.引入一个新的标量变量gydF4y2Ba
.注意这个不等式gydF4y2Ba
等于这个不等式吗gydF4y2Ba
.(3)gydF4y2Ba
现在的问题是最小化gydF4y2Ba
(4)gydF4y2Ba
受锥上的约束gydF4y2Ba 而且gydF4y2Ba 和附加锥约束(3)。锥约束(3)确保gydF4y2Ba .因此,问题(4)等价于问题(1)。gydF4y2Ba
问题(4)中的目标函数和锥约束适合于求解gydF4y2BaconeproggydF4y2Ba
.gydF4y2Ba
MATLAB®配方gydF4y2Ba
定义六个弹簧常数gydF4y2Ba ,六长常数gydF4y2Ba ,五块gydF4y2Ba .gydF4y2Ba
k = 40 * (1:6);L = [1 1/2 1 2 1 1/2];M = [2 1 3 2 1];g = 9.807;gydF4y2Ba
定义与数学问题变量对应的优化变量。为简单起见,将锚点设置为两个虚质量点gydF4y2Bax (1:)gydF4y2Ba
而且gydF4y2Bax(最终,:)gydF4y2Ba
.这个公式允许每个弹簧在两个物体之间拉伸。gydF4y2Ba
Nmass =长度(m) + 2;gydF4y2Ba% k和l有nmass-1个元素gydF4y2Ba% m有n质量- 2个元素gydF4y2Bax = optimvar (gydF4y2Ba“x”gydF4y2Ba[nmass 2]);t = optimvar (gydF4y2Ba“t”gydF4y2Banmass-1,gydF4y2Ba下界的gydF4y2Ba, 0);y = optimvar (gydF4y2Ba“y”gydF4y2Ba,gydF4y2Ba下界的gydF4y2Ba, 0);gydF4y2Ba
创建一个优化问题,并将目标函数设置为(4)中的表达式。gydF4y2Ba
概率= optimproblem;Obj = dot(x(2:(end-1),2),m)*g + y;概率。目标= obj;gydF4y2Ba
创建表达式(2)对应的圆锥约束。gydF4y2Ba
Conecons = optimineq(nmass - 1);gydF4y2Ba为gydF4y2Ba2 = 1:(nmass-1) conecons (ii) =规范(x (2 + 1,:) - x (ii,:)) - l (ii) < =√6 (2 / k (ii)) * t (2);gydF4y2Ba结束gydF4y2Baprob.Constraints.conecons = conecons;gydF4y2Ba
指定锚点gydF4y2Baanchor0gydF4y2Ba
而且gydF4y2BaanchorngydF4y2Ba
.创建相等约束,指定两个虚端质量位于锚点。gydF4y2Ba
Anchor0 = [0 5];Anchorn = [5 4];anchorcons = optimeq (2, 2);锚固(1,:)= x(1,:) ==锚固0;锚固(2,:)= x(end,:) ==锚固;prob.Constraints.anchorcons = anchorcons;gydF4y2Ba
创建表达式(3)对应的圆锥约束。gydF4y2Ba
Ycone = norm([2*t;(1-y)]) <= 1 + y;prob.Constraints.ycone = ycone;gydF4y2Ba
解决问题gydF4y2Ba
问题的表述是完整的。通过打电话来解决问题gydF4y2Ba解决gydF4y2Ba
.gydF4y2Ba
[溶胶,fval eflag、输出]=解决(问题);gydF4y2Ba
使用coneprog解决问题。找到最优解。gydF4y2Ba
画出解决点和锚点。gydF4y2Ba
情节(sol.x (2: (nmass-1), 1), sol.x (2: (nmass-1), 2),gydF4y2Ba“罗”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节([sol.x (1, 1), sol.x(, 1)]、[sol.x(1、2),sol.x (, 2)),gydF4y2Ba“ks”gydF4y2Ba)情节(sol.x (: 1) sol.x (:, 2),gydF4y2Ba“b——”gydF4y2Ba)传说(gydF4y2Ba“计算点”gydF4y2Ba,gydF4y2Ba“锚点”gydF4y2Ba,gydF4y2Ba“泉”gydF4y2Ba,gydF4y2Ba“位置”gydF4y2Ba,gydF4y2Ba“最佳”gydF4y2Ba) xlim ([sol.x (1,1) -0.5, sol.x(结束,1)+ 0.5])ylim ([min (sol.x(:, 2)) -0.5,马克斯(sol.x (:, 2)) + 0.5])gydF4y2Ba从gydF4y2Ba
您可以更改参数的值gydF4y2Ba米gydF4y2Ba
,gydF4y2BalgydF4y2Ba
,gydF4y2BakgydF4y2Ba
看看它们如何影响解决方案。你也可以改变质量的数量;代码从你提供的数据中获取质量的数量。gydF4y2Ba
参考文献gydF4y2Ba
[1] Lobo, Miguel Sousa, Lieven Vandenberghe, Stephen Boyd和Hervé Lebret。二阶锥规划的应用gydF4y2Ba线性代数及其应用gydF4y2Ba284年,没有。1-3(1998年11月):193-228。gydF4y2Bahttps://doi.org/10.1016/s0024 - 3795 (98) 10032 - 0gydF4y2Ba
.gydF4y2Ba