Wolfram言語

最適なトラス設計

一端が壁に固定されており,もう一端にかかる負荷に耐える最小重量設計のトラスを構築する.

この例は,LinearOptimizationで効率よく解くことのできる線形最適化問題の記号形式を作成するのにWolfram言語の機能をいくつ使えばよいかを示す.

トラスを壁に固定するいくつかの特定の位置を選ぶ.

負荷がかかる位置はトラスの先端である.

トラスはリンクとノードを使ってモデル化することができる.それぞれのノードは,リンクによって隣接するノードに接続される.接続パターンの1例が以下で与えられる.

候補のノードは,矩形格子に置かれる.

ノードの位置,アンカー点の位置,力がかかる位置,トラスの中央の1つのノードの接続性を可視化する.

それぞれのノードは,一意の指標に関連付けられている. Associationは効率的に高速のルックアップ表を与える.

アンカーと力がかかる点に関連付けられた指標を求める.

任意の指定された接続パターンについて,任意の格子点の接続性を提供する関数を構築する.

指定されたノード について,どのリンクがそのノードを含んでいるかを判別するために接続性を使う.ノード が接続されているなら,は同じリンクを表す.反復を避けるために, のノードだけを考える.

ノード とノード がリンクを形成するなら であるような,リンクの集合を で記述する.

リンクの太さ,単位長の質量がそのリンクに働く力と比例する必要があると仮定する.リンクを で記述する便利な方法にリンクに指標を付けるというものがある.そうすることで,それぞれの接続されたペアについて の一意の指標 が付く.

この目的はを最小化することである.ここで は指標 のノード の間のリンクの長さ, は先端のジョイントのリンクによって使われる力である.

関数は非線形であるが, およびとなるようなを導入することによって線形関数として表すことができる.目的関数はである.

力点以外の各ノードでは,適用される外部の力はない.

力がかかる点では,垂直方向下向きの単位力がかかる.

アンカーではない各ノード では,力均衡 がなければならない.ここで はノード の位置, はノード における外部の力である.ノード i について力均衡の制約条件を与える関数を定義する.

Complementを使ってアンカーのノードが含まれないようにする.

最終的な制約条件は次のようになる.

結果の系を解く.

青がリンクの圧縮を,赤がリンクの拡張を表す最適トラスを可視化する.

関連する例

de en es fr ko pt-br zh