> For the complete documentation index, see [llms.txt](https://manual.karamba3d.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.karamba3d.com/jp/3-konpnentorifarensu/3.5-algorithms/3.5.9-beso-for-beams.md).

# 3.6.9: 梁用BESO

進化的構造最適化（ESO）は、Y.M. XieとG.P. Stevenによって開拓されたトポロジー最適化の方法を構成します。基本原理は単純です: 事前定義された支点上の構造要素から構成された与えられた体積から始まり、事前設定された荷重が作用します。構造応答を計算すると、他よりも外部荷重を多く担う領域があることがわかります。次に、最もひずみが少なく、したがって最も効果的でない構造の要素のいくつかを削除します。再び、薄くなったモデルの応答が決定され、未利用の要素が削除され、というように続きます。この反復手続きは、目標体積または残りの構造要素の数に達したときに停止します。

![図3.6.9.1: 「BESO for Beams」コンポーネントを適用した、初期は規則的なメッシュを持つ片持ち梁](https://147116332-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz9HWyQapP9tu9mJjh5O9%2Fuploads%2Fgit-blob-ea28540f10727e2c58a7d09db0b0cb50cc247848%2Fforcepathfindercantilever.png?alt=media)

上記のアルゴリズムは、構造を通る内部力の流れを追跡し、その一部を形成しない要素を削除する方法として見ることができます。図3.6.9.1は、「**BESO for Beams**」コンポーネントを適用した後の片持ち梁を示しています。アルゴリズムは梁およびトラス要素のみに作用します。シェルには別のコンポーネントがあります（セクション [3.5.10](/jp/3-konpnentorifarensu/3.5-algorithms/3.5.10-beso-for-shells.md) 参照）。

![図3.6.9.2: 「BESO for Beams」コンポーネントを適用する前 (a) および後 (b) の梁の三角形メッシュ](https://147116332-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz9HWyQapP9tu9mJjh5O9%2Fuploads%2Fgit-blob-fd54ff7910f07a62503bea8e698abab01bf2cf2b%2Fforcepathfinder.png?alt=media)

図3.6.9.2は、動作中の「**BESO for Beams**」コンポーネントを示しています。左側には、サーフェスから派生した三角形メッシュである初期ジオメトリが示されています。構造の平面内で水平および垂直方向にそれぞれ作用する荷重を持つ2つの荷重ケースが存在します。構造の3つの角ノードが固定されています。右の画像は、20回の設計反復の過程で初期質量の45%に縮小された最適化された構造を示しています。

## 入力パラメータの説明:

|                     |                                                                                                                                                                                                                                                                                              |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **「Model」**         | 処理されるモデルを受け取ります。                                                                                                                                                                                                                                                                             |
| **「ElemIds」**       | <p>この入力パラメータには2つの代替案があります:</p><ul><li>入力なし: 構造全体が最適化手続きに含まれます。</li><li>入力は文字列のリストで構成されます: IDが一致するすべての要素が参加します。</li></ul>                                                                                                                                                                     |
| **「LCases」**        | 考慮する荷重ケースのリスト。ゼロは最初の荷重ケースのインデックスです。複数の荷重ケースの総合的な効果を考慮することは、要素への個別の影響を加算することに相当します。                                                                                                                                                                                                           |
| **「TargetRatio」**   | 構造の梁/トラス要素の初期質量に対する梁またはトラス要素の目標質量の比。初期質量を決定する際、すべての梁またはトラス要素 - アクティブ化状態に関係なく - がカウントされます。目標構造では、アクティブな要素のみがその質量に寄与します。これにより、BESOコンポーネントを連続して適用できます。モデル要素のアクティブ化状態に応じて、「**BESO for Beams**」を適用すると、アクティブな要素の数が増加または減少します。個々の要素のアクティブ化状態は、「**ModifyBeam**」および「**ActivateModel**」コンポーネントで設定できます。 |
| **「MaxChangeIter」** | 構造の目標質量に達するべき反復数。反復数が少なすぎる場合、単一の梁がメインの構造から切り離されて飛んでいるように見えることがあります。その理由は、Karamba3Dが構造を薄くするために、いわゆるソフトキルアプローチを適用するためです: 要素は削除されず、単に小さな剛性値が与えられます。これにより、構造応答をすべての状況下で計算できます。                                                                                                                   |
| **「MaxConvIter」**   | 構造の質量が「**MaxChangeIter**」反復を使用して目標値に達した後の、収束のための追加の反復の最大数。                                                                                                                                                                                                                                   |
| **「GroupIds」**      | 文字列のリストを想定します。指定されたリストエントリと一致する要素が最適化に参加し、1つのグループに属します。これらは力経路探索中に集合的にアクティブ化または非アクティブ化されます。構造はアクティブおよび非アクティブの要素から構成される場合があります。グループの初期状態は、その要素の過半数の状態によって決定されます。グループは互いに素である必要はありません。                                                                                                         |

## 「Settings」バーをクリックすると、以下の入力プラグを展開できます:

力/モーメントの重み付け係数: 「**BESO for Beams**」コンポーネントを使用すると、要素内の異なる力および曲げ成分に対して重み付け係数を選択できます。要素の重みは、個々の断面力成分によって誘発される変形エネルギー密度に基づいて決定されます。対応するユーザー指定の重み付け係数を乗じ、成分の寄与を加算すると、要素の重みが得られます。グループの重みは、そのメンバーの平均から得られます。これらは利用可能な重み付け係数です:

* **「WTension」**: 軸引張力の係数
* **「WCompr.」**: 軸圧縮力の係数
* **「WShear」**: 合計せん断力の係数
* **「WMoment」**: 合計モーメントの係数

**「BESOFac」**: 各反復ステップで、与えられた$$nChangeIter$$反復数で構造の目標質量を満たすために、$$n\[kg]$$の質量を削除する必要があるとします。$$BESOFac = m$$では、$$(m+1) \cdot n$$のアクティブな要素が非アクティブな要素のプールに移動されます。構造の応答の評価が続きます。2番目のステップで、$$m \cdot n$$の部材が非アクティブからアクティブに反転され、バランスが正しくなります。これにより、双方向の成分がプロセスに追加され、結果が改善されることがよくあります。

**「MinDist」**: 場合によっては、特定の領域で追加または削除される要素の数を制限したい場合があります。「**MinDist**」を使用すると、1回の反復で変更される可能性のある要素の端点間の最小距離をメートル単位で選択できます。

**「WLimit」**: BESOプロセスの最後に、要素の小さな部分が平均よりもはるかに検定比が低いことがよくあります。「**WLimit**」を使用すると、要素の平均重量の「**WLimit**」倍未満の重量を持つ要素を削除できます。

## 「**BESOBeam**」コンポーネントの右側には以下の出力プラグがあります:

|                 |                                                                                                                                                                                                                                                                            |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **「Max.disp」**  | すべての荷重ケースの中での結果モデルの最大変位。                                                                                                                                                                                                                                                   |
| **「Model」**     | 見つかった力経路に従って要素がアクティブ化された構造。                                                                                                                                                                                                                                                |
| **「Hist」**      | 各反復ステップに対して、要素がアクティブ（true）か非アクティブ（false）かを示すブール値のリストを含むデータツリー。ブール値はモデル要素に直接マッピングされます。「**Tree Branch**」コンポーネントを「**Activate Model**」コンポーネント（セクション [3.1.5](/jp/3-konpnentorifarensu/3.1-model/3.1.5-activate-element.md) 参照）に接続されたスライダーで使用すると、BESOプロセスの履歴を検査できます（図3.6.9.2参照）。 |
| **「Is active」** | 各要素に1つずつ、「True」/「False」値のリストをレンダリングします。「True」は、対応する要素が最終構造の一部（つまりアクティブ）であることを示します。それ以外の場合は「False」エントリが含まれます。                                                                                                                                                               |
| **「Weights」**   | 最終構造の要素またはグループの重みの昇順リスト。これは結果の定性的なチェックとして使用できます: 重みが均等に分布しているほど、構造の検定比が良くなります。支点および外部荷重の周りには常に力の集中があり、これは鋭いピークとして表示されます。可視化の良い方法は、「**Quick Graph**」コンポーネントを使用することです（図3.6.9.2参照）。                                                                                           |

{% file src="/files/9ezR8mLfhtfB8nvgcBuY" %}

{% file src="/files/RSkGF9E7WfsrgeCJnM0A" %}

{% file src="/files/2vX6Zo6i4G04jVbTdODf" %}

*追加の例は、Grasshopperのメインタブの Karamba3D > Help > Examples > Local Examples > Algorithms > BESO から確認できます。*
