# 3.5.9: 梁的双向渐进结构优化 (BESO for Beams)

渐进结构优化（ESO）构成了一种拓扑优化方法，该方法由Y.M.谢和G.P.史蒂文首创，其基本原理很简单：用户从预定义支撑件上由结构元件所组成的给定体积开始，并对其施加预设荷载。计算结构响应将表明，某些区域承受的外部荷载较其他区域更多。现在，用户去除了结构中应变最小、效果最差的那些元素。再次确定现有稀疏模型的响应，删除未充分利用的元素，依此类推。当达到目标体积或达到剩余结构元素的数量时，此迭代过程将终止。

![图3.59.1：在使用“BESO for Beams（梁的双向渐进结构优化）”运算器后具有初始规则网格的悬臂。](https://2244769574-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M9XteyGDAU3Odla53cC%2Fsync%2Fea28540f10727e2c58a7d09db0b0cb50cc247848.png?generation=1591871192543913\&alt=media)

可将上述算法视为一种跟踪结构内力流并删除非该结构组成部分元件的方法。图3.5.9.1显示了应用&#x4E86;**“BESO for Beams（梁的双向渐进结构优化）”**&#x8FD0;算器后的悬臂。该算法仅适用于梁和桁架元件。对于壳体，则另有专门的运算器适用（参阅第[3.5.10](https://manual-1-3.karamba3d.com/chinese_1_3_3/3-in-depth-component-reference/3.5-algorithms/3.5.10-beso-for-shells)节）。

![图3.5.9.2：在(a)之前和(b)之后应用“BESO for Beams（梁的双向渐进结构优化）”运算器的梁三角网格。](https://2244769574-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M9XteyGDAU3Odla53cC%2Fsync%2Ffd54ff7910f07a62503bea8e698abab01bf2cf2b.png?generation=1591871192645998\&alt=media)

图3.5.9.2显示&#x4E86;**“BESO for Beams（梁的双向渐进结构优化）”**&#x8FD0;算器的工作情况。在左侧，可以看到初始几何形状，即：从表面派生的三角形网格。存在两种荷载情况，荷载分别於水平和垂直方向作用在结构平面中。结构的三个角节点保持固定。右图显示了经过20次设计迭代的优化结构，其质量与初始质量相比降低了45％。

#### 下面是输入参数说明：

|                        |                                                                                                                                                                                                                                                                                               |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **"Model（模型）"**        | 接收需要处理的模型。                                                                                                                                                                                                                                                                                    |
| **"ElemIds（元素符号）"**    | <p>关于该输入参数，有两种选择：</p><ul><li>无输入：优化过程将包括整个结构。</li><li>输入包含字符串列表：与标识符匹配的所有元素都将参与运算。</li></ul>                                                                                                                                                                                                  |
| **"LCases（荷载工况）"**     | 需考虑的荷载工况列表。零是首个工况的索引。考虑几个工况的总影响等于将它们各自的影响添加到一个元件上。                                                                                                                                                                                                                                            |
| **"TargetRatio（目标比）"** | 结构中梁或桁架单元目标质量（优化后质量）与其初始质量的比值。在确定梁或桁架元素的初始质量时，无论激活状态如何，结构的所有梁单元或桁架单元都要纳入计算。在目标结构中，只有被激活元素的质量被纳入计算。这样确保用户可以串联应用BESO运算器。根据模型元素激活状态，应&#x7528;**“BESO for Beams（梁的双向渐进结构优化）”**&#x8FD0;算器将导致激活元素数量的增加或减少。各个元素的激活状态可以通&#x8FC7;**“ModifyBeam（修改梁）”**&#x548C;**“ActivateModel（激活模型）”**&#x8FD0;算器进行设置。 |
| **"MaxChangeIter"**    | 应当达到结构目标质量的迭代次数。如果选择的迭代次数太少，则可能会发生单体梁与主体结构分离的情况，看起来分崩离析。其原因在于，Karamba3D采用了所谓的“soft-kill（柔性终止）”方法使结构变薄：不删除元素，而只是给出较小的刚度值。这样可确保在所有情况下都可以进行结构计算响应。                                                                                                                                               |
| **"MaxConvIter"**      | 在结构质量达到其目标值后，使&#x7528;**“MaxChangeIter”**&#x8FED;代可获取用于收敛的额外最大迭代次数。                                                                                                                                                                                                                           |
| **"GroupIds"**         | 期待输入一个字符串列表。与给定列表条目匹配的元素将参与优化并同属一组。在寻找力的路径期间，它们会被集体激活或停用。一个结构可由活动和非活动元素组成。一个组的初始状态由其大多数元素的状态决定。组与组之间无需相交。                                                                                                                                                                                     |

#### 通过单击“Settings（设置）”栏，用户可以展开以下输入端口：

力/力矩的权重因子：“BESO for Beams（梁的双向渐进结构优化）”运算器允许用户为元素中的不同力及弯曲元件选择权重因子。元件的重量是根据各个横截面力所引起的变形能的密度来确定的。与将用户给定的相应加权因子相乘，并累加分量份额，即可得出元素权重。组的权重由其构件的平均值得出。以下是可用的加权因子：&#x20;

* “WTension”：轴向张力权重因子&#x20;
* “WCompr.”: 轴向压力权重因子&#x20;
* “WShear”：合成剪力权重因子&#x20;
* “WMoment”：合成力矩权重因子

**"BESOFac"**：假设在每个迭代步骤中都需去除$$n\[kg]$$的质量，以便在给定的$$MaxChangeIter$$迭代次数中满足结构目标质量。当$$BESOFac = m$$时，将会有$$(m+1) \cdot n$$个活跃元素移至不活跃元素集合中。接下来是对结构响应的评估。第二步，将$$m\cdot n$$个构件从非活跃状态切换为活跃状态，以便再次恢复平衡。这在过程中增加了双向组件，通常可以改善结果。

**“MinDist（最小距离）”**：在某些情况下，用户希望限制在某个特定区域内添加或删除的元素的数量。**“MinDist（最小距离）”**&#x5141;许用户选择在一次迭代中可能更改元素端点之间的最小距离（以米为单位）。

**“WLimit”**：在BESO过程结束时，常会发生一小部分元件的利用率远低于平均值的情况。**“WLimit”**&#x5141;许用户删除那些其权重低&#x4E8E;**“WLimit”**&#x4E58;以平均权重的元件。

#### 这些输出端口位于“BESOBeam（梁的双向渐进结构优化）”运算器的右侧：

|                         |                                                                                                                                                                                                                                                                                                                                         |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **"Max.disp（最大位移）"**    | 所有荷载工况下所得模型的最大位移。                                                                                                                                                                                                                                                                                                                       |
| **"Model（模型）"**         | 根据已找到的力路径激活元素的结构。                                                                                                                                                                                                                                                                                                                       |
| **"Hist（历史）"**          | 由布尔值构成的数据树，包含每个迭代步骤的布尔值列表，这些布尔值表示元素是处于激活状态（true）还是非激活状态（false）。布尔值直接映射到模型元素上。通过使&#x7528;**“Tree Branch（树分支）”**&#x8FD0;算器以及&#x4E0E;**“Activate Model（激活模型）”**&#x8FD0;算器相连的滑块（请参阅第[3.1.5](https://manual-1-3.karamba3d.com/chinese_1_3_3/3-in-depth-component-reference/3.1-model/3.1.5-activate-element)节），可以检查BESO进程的历史记录（请参见图3.5.9.2）。 |
| **"Is active（处于活动状态）"** | 呈&#x73B0;**“True”**/**“False”**&#x503C;的列表——每个元素一个。**“True”**&#x8868;示相应元素是最终结构的一部分（即处于活动状态）。否则，它将包含一&#x4E2A;**“False”**&#x6761;目。                                                                                                                                                                                                      |
| **"Weights（权重）"**       | 在最终结构中按升序排列的元素列表或成组权重列表。这些可以用作结果的质量检查：权重分布越均匀，结构利用就越好。支撑物和外部荷载周围总会出现较为集中的力并显示为尖峰。一种较好的可视化方法是使&#x7528;**“Quick Graph（快速图表）”**&#x8FD0;算器（如图3.5.9.2）。                                                                                                                                                                                      |
