出発場所、目的場所をそれぞれ複数指定して、各出発場所から各目的場所まで(マルチ)最短経路で移動した場合の、通過回数(passcount)を各ノードに対して加算します。 graph_module_betweenness1 このサンプルは、出発ポイント群、と目的ポイント群を分けて入力しています。各ポイントそれぞれ最寄のノードを距離計測の出発ノード・目的ノードにしています。計算が終わった後の結果ソート、今回のケースではノードのリストをpasscountおn多い順、つまり降順に行うほうが、直感に即しているでしょう。これも同様、pythonではラムダ式ソートが可能ですので、非常に簡潔です。降順では reverseというキーのフラグをTrueにします。 こうすると、g.nodes というノードのインスタンスの入ったリストを、Nodeクラスの passcountというプロパティメンバーに対して降順ソートが行われ、ソート済みのリストが passscountrank に返ってきます。
Category: python
複数の特定場所からのminisum計算
場所を複数指定して、そこからの距離の合計(sumdist)を各ノードに対して行います。 graph_module_minisum1 今回は、ポイントを複数入力して各ポイントそれぞれ最寄のノードを距離計測の出発点にしています。計算が終わった後、結果をソートする場合、今回のケースではノードのリスト Graph.nodes コード中では g.nodes をソートすることにあります。つまりクラスのインスタンスのリストをソートすることになりますが、pythonではラムダ式ソートが可能ですので、非常に簡潔です。 こうすると、g.nodes というノードのインスタンスの入ったリストを、Nodeクラスの sumdist というプロパティメンバーに対してソートが行われ、ソート済みのリストが minisumrank に返ってきます。
Rhino/GH-python Graph Module 勾配負荷設定(有向グラフ化)
一つ一つのエッジに対して、往路 復路 の距離を変更します。下のコードは勾配を求めるところまでで、勾配の値をどのように距離に変換するかは未記述です。すごく勾配負荷を影響させるか、ほどほどにするか、各自の関数(formula)を考えてください。 この関数を作ってエッジの重みを変更した後、Dijkstraでその経路選択に影響が出ます。またminisum, betweennessの計算にも影響があるはずです。
Rhino/GH-python Graph Module 評価関数サンプル(近接度)
評価関数サンプル(媒介度)の続きです。 有向グラフにおいてminisum評価の基になる、各ノードからの他のすべてのノードに行く距離の合計の求め方 有向グラフにおいてminisum評価の基になる、各ノードへの他のすべてのノードから来る距離の合計の求め方(超絶微妙な違いわかります?) 以下のように続ければ、数値の高いノードほどminisum近接性が高いということになります
Rhino/GH-python Graph Module 評価関数サンプル(媒介度)
Rhino/GH-python Graph Module 、内部に組み込まれているDijkstra(Fast)関数や、traceRoute(s)関数を使って、評価関数を作る例です。以下のサンプルはこのライノモデルの使用を想定。 全通りを行き来する媒介度計算(エッジを2つだけ持つノードを含める場合) 全通りを行き来する媒介度計算(エッジを2つだけ持つノードを含めない場合)
Rhino/GH-python Graph Module
graph_1_0.py → Rhino-python / GH-Python 用のGraphモジュール version 1.0 です(重みつき有向グラフ、マルチショーテストパス対応フレーム)。スタジオ用拡張モジュール置き場の c:\MAsunit\ 直下にコピーし(始めてモジュールを追加する人はパスも通してください)、アップしてライノを再起動してください。 グラフの作り方は今のところ2通り。こちらサンプルです。 graph_module_test.zip TextDotとそれらをつないだCurveからインスタンスを作る方法(クラスGraphDot) つながったCurveからインスタンスを作る方法(クラスGraph, hclab. Street Viewに近い) 全ノードアクセス 全エッジアクセス 現在組み込んである関数は、ダイクストラ法による最短経路距離計算、ショーテストパス検出のみです。 g.Dijkstra(基点ノードのインスタンス) g.DijkstraFast(基点ノードのインスタンス) g.traceRoute(目的ノードのインスタンス) g.traceRoutesNode(目的ノードのインスタンス) g.traceRoutesEdge(目的ノードのインスタンス) シングルパスダイクストラ、各ノードまでのコスト シングルパスダイクストラ、トレースルート(ノードリスト取得) マルチパス対応ダイクストラ、トレースルート(ノードリスト取得、エッジリスト取得)
Graph tips を GH-python (Grasshopper)で
各典型グラフ参考例にコード(GG, MST, DT)を追加しました → Graph tips Minimum Spanning Tree: MST (最小木) のみ grasshopper , gh-pythonのサンプルを貼ります。 MST_test.gh ポイントは、rs.Addxx などで生成したらいのオブジェクトを全て objs というリストに格納して、最後に 出力ポート a にリダイレクトする、というところです。今回は最初のランダムポイント生成数をスライダで x 入力 に割りあえてています。
python excel module (which works on Iron-Python)
簡単な統計的処理分布図作成などexelはとても便利です。同様の機能を持ったフリーのソフトもあります → libre →OpenOffice python 用 excel モジュールがあります。excelの簡単な統計機能を使う想定で、pythonからexcel file の読み書きを行います。 xlwt: 書き込み xlwt-0.7.5 xlrd: 読み込み xlrd-0.8.0 注意: xlwt, xlrd は基本的に c-python用モジュールです。iron -pythonでの動作は保障されませんし、特に最新バージョン(xlwt 1.0.0, xlrd 0.9.3)はiron-python で動きません。xlwt-0.7.5、xlrd-0.8.0が iron-python上で .xls ファイル拡張子に対してのみ動作する模様。 rhino-python, GH-pythoで使う場合のインストール先は、諸説ありますが、本スタジオではここに統一します。 c:\MAsunit\xlwt c:\MAsunit\xlrd と配置してください。配置後モジュールまでのパスも確認してください。モジュールインストール後はライノ本体の再起動が必要です。 書き込みサンプル 読み込みサンプル ヒストグラムの作り方
配列感覚
配列(リスト)は3D系、グラフ(ネットワーク)関係などのコーディングで多用します。配列の中身(要素)のイメージ、要素へのアクセス方法など、コーディングの感覚を掴みましょう。下記のサンプルにおけるリストの要素は整数ですが、小数点、数値がまとまった構造体、クラスインスタンス、メモリアドレス、など色々な要素でできているリストが存在します。どのような要素からなるリストも同じように一元的にあつかえる感覚を掴んでください。 空のリストを作る リストの要素を指定して初期化、作成 リストの要素を指定して初期化、作成、リストの内容をクリア 要素にアクセス(ブラケット[] アクセス) 要素の総数外にアクセスすれば当然エラー 要素に連続的にアクセス(for 文を使う) 要素の全てにアクセス(for 文を使う、インデックス・ブラケットアクセス). リストの長さ(要素数)を調べる len() 関数 要素の全てにアクセス(for 文を使う、ラムダ文) 要素の追加 append 後方に挿入 リストの連結 extend 要素の重複を許さない set セットという配列もあります。 setの要素追加は add リストの重複を取り除く → リストを一度setセットに変換して リストに再変換する とするのがpython独特の方法です。
Rhino Python, GH-Python starter
過去ポストを下記の順に参照すると概ねつかめるかと思います。 Pythonを選ぶ理由 (Rhino script、C#、VB:Visual Basicではなく) GhPython Rhino-Python programming memo 1 transform programming memo2 python入門サイト、書籍、たくさんありますので、自分に合うものを適当に選んで参照してください。選んだものが適切かどうか迷いがある人は、都度相談してください。




