【Ladybug+Honeybee】×【Wallacei】多目的最適化を実装してみる ルーバー編

皆様こんにちは。
AMDlabの前川です。
今回はgrasshopperのプラグインであるWallaceiをつかって前回の窓際に設置するルーバーの変数モデルに多目的最適化を実装していきたいと思います。

Wallaceiのインストール方法や使い方については過去の記事で森山さんがわかりやすく解説されています。
自分も幾度となく読み返しました。

前回の記事では、室内への積算日射量が最小化するようなルーバーの角度を遺伝的アルゴリズムによって導きました。
今回は積算日射量に加えて、隣家からの視線の抜けを評価値として扱い、この二つが最小化するようにルーバーの角度を最適化していきます。

隣家の窓が写真のような位置にあると過程します。

 

それでは、grasshopperで任意のルーバー角度に対する隣家からの視線の抜けを数値化していきます。

まず、リビングの窓と隣家の窓に並行な線を引いて、それぞれを[curve]コンポーネントに格納します。

次にそれぞれの[curve]を[divide curve]に繋いで分割数を指定します。
今回は分割数を100とします。

 

次に、隣家の窓側の点群とリビングの窓際の点群を[Line]コンポーネントで繋ぎます。
今回はこのLineを隣家からのリビングへの視線とします。

 

次に、ルーバーと交差する線の数をカウントしていきましょう。
[split with brep]に線とルーバーを繋いでC(curve)から出力されるオブジェクトの数を[List length]で数えます。
(これに関してはもっと効率的な処理があると思うのですが思いつかなかったのと、そこまで処理が重くならなかったのでよしとしました。)

この数字が、視線とルーバーの交差する数となるのでこの数値を最大化するように設定すればいいです。

Wallaceiはgalapagosと違い、評価値は最小化しか選択肢がないのでこのまま繋ぐとリビングへの視線量を最大化するルーバーの角度になってしまいます。なのでこのように[divide]に繋いで逆数にしてからObjectiveに接続します。

 

積算日射量についても同様に、ctrlキーを押しながらObjectiveに接続します。

それではあとは世代数や個体数を設定して、解析をスタートします。

概ねRuntimeに表示されてる時間通りに解析が終わりました。
ルーバーに干渉する視線が比較的多い気がしますね。

 

パレートフロント解を抽出してそれぞれの個体の評価値を可視化してみました。
(ルーバーだけだとあまり並べても写真映えしませんね。。)

最終的に変数は一つの組み合わせに収束しますが、このようにパレートフロント解を表示して評価値を比較しながらデザインを選択することもできますね。

 

多目的最適化は、評価値が複数あるためにそれらの重み付けによって最適な形が変化します。
視線を防ぐことを重視すればFV1の評価値の高い解を選択することになりますし、その逆もしかりです。

 

評価値が複数ある場合の多目的最適化については以上です。

今回もプログラムのキャプチャを載せておきます。

作業は前回記事の流れと同様で変数モデルの作成(genes)→評価値の設定(fitness)→最適化という感じでした。

いずれにしても、デザインにおいて自身が検討したい部分を的確に変数モデル化する過程がミソになると思います。

 

また何か自身のプロジェクト等で今回のような最適化を導入する事例があれば紹介しようと思います。

それでは今日はこの辺で。

ARTICLES