2019年4月13日土曜日

【Grasshopper_20】galapagosのトライアル

★galapagosで一筆書きのサンプルを作ってみた



以前から気になっていた、Grasshopperに存在するgalapagosを使ってみたくなり、自分なりに調べてサンプルを作ってみました。


galapagosは遺伝的アルゴリズムをGrasshopper上で再現するためのコンポーネントです。

遺伝的アルゴリズムとは、簡単に言うと、遺伝子の組み合わせを何通りか作成し、その中の遺伝子を組み替えたり差し替えたりした中から最も優秀な(環境に強くて生き残る)組み合わせを見つけるというもの。

その考え方をプログラミングに応用すると、例えば乗換案内アプリのように、最も運賃の安いルート、最も移動距離の短いルートなど、条件に合わせた最適な答えが導けます。
※巡回セールスマン問題というのがそれに相当するので気になる方は調べてみてください。

組み合わせを総当たりで計算すると膨大な時間がかかりますが、遺伝子(例えば経由地など)を部分的に差し替えたり切り捨てることで範囲を絞りながら最適値を求めていくので時間が短くて済むというメリットがありますが、最初の組み合わせが悪いと永遠に最適解が求まらないというデメリットもあるみたいです。

今回のサンプルは、galapagosで立方体の中にあるランダムな点を結んだpolylineカーブの最短距離のときの一筆書き順路を求めます。

ビジュアル的な勉強も兼ねて、processingで出力してみました。

Step.1 適当な大きさの立方体を作る


Step.2 ランダムな点を作る


・Step.1で作成した立方体の中に、Populate 3Dコンポーネントを使ってランダムな点を作る。

・個数はお好みで。

・並行して、一筆書きの開始点と終了点を求めます。Deconstruct Brepコンポーネントを使ってボックスの頂点を求め、List Itemで指定した点をそれぞれ設定します。

Step.3 シャッフルの設定


・Step.2で求めたランダムな点を、Jitterコンポーネントで中の順番をシャッフルします。
 ※パラメータは後でgalapagos側で変更されるので適当な数字でOKです。

Step.4 点のリスト一本化と座標値の分解


・Step.3で求めたJitterコンポーネントの出力に、Step.2で求めた開始点と終了点をInsert   Itemsコンポーネントを使って0番目と末尾(-1番目)に挿入して、点群を一つのリストにまとめます。

・Processing側に、まとめた点の座標値を送るので、X,Y,Zの各値に分解します。

Step.5 Galapagosの設定


・galapagosコンポーネントを上図のようにつなぎます。

・Fitness(評価関数)とは、求めたい最適な答えのことです。今回はpolylineカーブの長さの最短値を求めたいので、Step.4でまとめた点群をpolylineコンポーネントでカーブを作り、Lengthコンポーネントの出力をFitnessにつなぎます。

・Genomeとは組み替える遺伝子のことです。今回は、点群の順序を入れ替えて最短距離を求めますので、JitterコンポーネントのJとSにつないでいるスライダーをつなぎます。

Step.6 パラメータの設定


・続いて、計算の際のパラメータの設定です。galapagosのアイコンをダブルクリックすると上図のような画面が開きます。

・Grasshopperの遺伝的アルゴリズムは、面積や長さなどのパラメータが最小、あるいは最大になるときのgenomeの組み合わせを見つけるのが目的です。今回は最小の長さを求めたいのでMinimizeを選択します。

・残りの設定はデフォルトでOK。

Step.7 解析を実行


・続いてSolverタブを開いてStart Solverボタンを押すと解析が始まります。

Step.8 結果


・画面をOKボタンを押して閉じると結果は上の図のような感じです。

Step.9 Processingに出力


・Processingには点の座標値のみを送信し、残りはProcessing内で描画します。

・galapagosで求める座標がリアルタイムに送られます。

・X,Y,Z座標をそれぞれxでつないたテキストをUDP Senderコンポーネントにつなぎます。

・ポート番号は4000とし、Processingも同じにします。

以下、processingのソースコードです↓

0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。