今回は、Grasshopperで使用できる「Galapagosコンポーネント」の基本的な使い方について解説していこうと思います。 「Galapagosコンポーネント」 を使用することで、最小値・最大値となる最適な値を算出してくれます。今回はバナナを(概ね)均等にカットする位置を算出する例題を用いて説明していこうと思います。
概要

今回は上画像の様なバナナっぽいオブジェクトを概ね均等に分割する位置を「Galapagosコンポーネント」を使用して算出していきます。
- Grasshopperプログラムの解説
- バナナを2等分する位置を「Galapagos」で算出
- バナナを4等分する位置を算出
Grasshopperプログラムの解説

上画像がGrasshopperのプログラムとなります。右上にあるコンポーネントが「Galapagosコンポーネント」となります。
- Rhinocerosを使用してSolidを作成し「Brepコンポーネント」にSetします。

- 「Deconstruct Brepコンポーネント」を使用してオブジェクトを分解します。
- 「List Itemコンポーネント」を「Deconstruct Brepコンポーネント」の出力端子Eに接続し、上画像の緑ラインの様な軸方向のラインを取得します。
- 「Evaluate Curveコンポーネント」を使用し、「List Itemコンポーネント」の出力端子に接続します。
- 「Evaluate Curveコンポーネント」の入力端子C上で右クリックを押し、「Reparametrize」します。取得した軸方向のラインの始点が0、終点を1としました。
- 「Evaluate Curveコンポーネント」の入力端子tに「NumberSliderコンポーネント」を使用し、「0~1.00」で動かせるよう設定します。


- 「Evaluate Curveコンポーネント」の出力端子Pに「YZ Planeコンポーネント」を接続し、取得した点におけるYZ平面を作成します。(※オブジェクトの向きによってはYZ平面ではないこともありますので、カットする平面を入力してください)


- 「Brep|Planeコンポーネント」を使用して、BrepとPlaneの交線、カットラインを取得します。
- 「Split Brepコンポーネント」を使用して、取得した交線でバナナを切断します。

- 「List Itemコンポーネント」を使用して、分割したオブジェクトをそれぞれ取得します。
- 「Cap Holesコンポーネント」を使用し、切断面をCapします。
- 「Volumeコンポーネント」を使用し、それぞれの体積を取得します。
- 「Subtractionコンポーネント」を使用し、それぞれの体積を引き算します。
- 「Absoluteコンポーネント」を使用し、引き算した解を絶対値にします。
分割したそれぞれの体積の差の絶対値が最小になるとき、バナナは概ね均等に分割されることになります。
それでは「Galapagosコンポーネント」を使用してこの値が最小値となる分割点を求めていきます。
バナナを2等分する位置を「Galapagos」で算出

- 「Galapagosコンポーネント」を使用し、Genome端子を切断位置となるパラメーターに接続したいので、「Evaluate Curveコンポーネント」に接続した「NumberSliderコンポーネント」に接続します。この時、「Galapagosコンポーネント」から「NumberSliderコンポーネント」に接続してください、逆だと接続できません。
- 同様に「Galapagosコンポーネント」のFitness端子を「Absoluteコンポーネント」の出力端子に接続します。
- 「Absoluteコンポーネント」の出力値が最小となる「NumberSliderコンポーネント」を算出する解析を回していきます。


- 「Galapagosコンポーネント」上で右クリックを押し、Galapagos Editorを開きます。
- OptionsタブでFittness項目を「Minimize」に設定します。最大値を求めたい場合は「Maximaize」としますが、今回は最小値なので「Minimize」を選択します。
- 解析時間の制限を設けたい場合は、Runtime LimitをEnableにチェックをいれて設定してください。基本的には解析を長く回せば回すほどより最適な解が算出されます。今回は、さほど難しい解析ではないので設定しません。
- SolversタブでStart Solverを押して解析をスタートさせます。

- 解析の完了結果を見てみます。「NumberSliderコンポーネント」が0.49の位置で止まりました。この位置でのそれぞれの体積が概ね近い数字になっていることがわかります。(「NumberSliderコンポーネント」の小数点をもっと細かくすれば、解析時間は長くなりますが、より精度の高い結果が取得できます。)
バナナを4等分する位置を算出

次に上画像の様に、バナナを4分割したときに、それぞれの体積が概ね同じぐらいになる位置を算出します。

詳細は割愛しますが、先ほどのプログラムを多少修正しております。
- 「Gene Poolコンポーネント」を用意します。コンポーネント上で右クリックを押し、Editを選択します。Gene Countを3にすることで変数を3つ用意します。
- 変数の最大値を1.0、最小値を0.0に設定します。
- 今回はバナナを4分割した平均値と、分割後の各体積を引き算し、それらの絶対値を「Mass Additionコンポーネント」で足し合わせた時の値が最小になる位置を算出することで、概ね均等に分割できる位置を算出します。
- 「Galapagosコンポーネント」のGenomeをGene Poolコンポーネントに接続し、Fittnessを「Mass Additionコンポーネント」の出力端子に接続します。


解析が完了しました。変数を小数点第一位としたので、あまり精度はよくないですが、上画像のような位置となりました。
以上が「Galapagosコンポーネント」の基礎的な使用方法となります。今回紹介したのは、基本的なことのみなので、ご興味あるかたは是非調べて使いこなして活用してみてください。
【参考文献】
- AppliCraft : https://www.applicraft.com/
- 「コンピュテーショナル・モデリング入門から応用」 著:中島淳雄+高木秀太[共著] 熊野優美+田上雅樹+金野圭祐[執筆協力]