Rhino+Grasshopper

Pug|DQNエージェントでの強化学習

GrasshopperでPUGを使って、円の直径が300mmに近いほど「良い」というスコアリングを行うチュートリアルを、初心者向けにステップバイステップで解説します。このチュートリアルでは、円の直径と理想の直径(300mm)の差を基に、スコアリングを行います。


目標

円の直径が300mmに近いほど良いスコアを出すようにPUGを使ってスコアリングします。スコアは0(最悪)から10(理想的)までの範囲で出力されます。

ステップ1:Grasshopperを開く

  1. Rhinoを起動し、Grasshopperを開きます。
  • Rhinoのコマンドバーに「Grasshopper」と入力してEnterを押すか、ツールバーからGrasshopperを選択します。

ステップ2:円を作成

  1. Grasshopperで円を作成します。
  • Circleコンポーネントを使用します。Circleコンポーネントを右クリックして、Radiusに適当な半径(例えば150mm)を設定します。

ステップ3:円の直径を計算

  1. 円の直径を計算します。
  • 直径は半径の2倍ですので、Radiusの値を2倍にします。
  • Multiplicationコンポーネントを使い、半径を2倍にします。
    • Multiplicationコンポーネントを配置し、半径を入力端子(A)に接続します。
    • B端子に「2」を入力して、直径を計算します。

ステップ4:目標直径(300mm)との差を計算

  1. 目標直径300mmとの差を計算します。
  • Subtractionコンポーネントを使って、計算した直径と300mmとの差を求めます。
    • SubtractionコンポーネントのA端子に計算した直径を接続し、B端子に「300」を入力します。

ステップ5:スコアリングを行う

  1. スコアリングを行います。直径の差が小さいほど高いスコアが得られるようにします。
  • Absolute Valueコンポーネントを使用して、差の絶対値を取ります。これにより、正負の違いをなくします。
    • Subtractionコンポーネントから出力された差をAbsolute Valueコンポーネントに接続します。
  1. 次に、スコアを算出します。差が大きいほどスコアが低くなるようにします。
  • Divisionコンポーネントを使い、計算した差をスコアに変換します。
    • DivisionコンポーネントのA端子に差の絶対値を接続し、B端子にスケール値(例えば50)を入力します。これにより、差が大きければスコアが小さくなります。
  1. 最後に、スコアを0から10の範囲にスケーリングします。
  • Subtractionコンポーネントを使い、最大差(例えば100mm)を引いて、スコアを調整します。

ステップ6:PUGを使ったスコアリング

  1. PUGを使ってスコアリングを行います。
  • Pug Objectコンポーネントを使い、PUGのスコアリングシステムに接続します。
    • PUGの「スコア」や「評価関数」を使って、得られたスコアを評価します。

接続方法の詳細

  • CircleコンポーネントのRadius端子を、Multiplicationコンポーネントに接続します(半径を2倍にするため)。
  • Multiplicationの出力を、SubtractionコンポーネントのA端子に接続します。
  • 目標直径「300mm」をSubtractionコンポーネントのB端子に入力します。
  • Subtractionの出力をAbsolute Valueコンポーネントに接続します。
  • Absolute Valueの出力を、Divisionコンポーネントに接続します(スケール値で割る)。
  • 最後に、得られたスコアをPUGのスコア評価に渡します。

ステップ7:結果の表示

  1. 最後に、計算されたスコアをPanelコンポーネントに接続して表示します。

まとめ

  • Circleコンポーネントで円を作成し、その直径を計算します。
  • 目標直径(300mm)との差を計算し、その差に基づいてスコアリングします。
  • Pug ObjectコンポーネントでPUGを利用してスコアを評価し、結果を表示します。

これで、円の直径が300mmに近いほど良いスコアを得るスコアリングシステムが完成します。

-Rhino+Grasshopper
-