この連載について

シリーズ全5回のテーマを以下に設定した。BIMについて、アプリケーションの使い方やノウハウを中心に紹介したこれまでの記事から、少し違う方向にハンドルを切って「BIMでこう変えていこう」「BIMをこう変えていこう」と提案できるような記事にしていきたい。

シリーズ記事

1.コンピューターが設計してくれる?

ここで取り上げるのは人工知能が建物を設計してくれるという話ではない。解決するのに手間と時間のかかる問題を、コンピューターがちょっと助けてくれるという話だ。

例えばこんな多角形の境界線があって、その中に境界線に接する三角形を作るとする。何通りもの三角形が作れるが、そのうちで最も面積が大きく、重心がある点に近いのはどの三角形だろう? 設計の実務でこの問題が何の役に立つのかは分からないが、筆者が例として無理やりに考えた問題だ。

その答えは「試してみれば分かる」だ。試してみるといっても実際に机の上の紙に三角形をたくさん書いてみたり、2D CADで三角形を作図してチェックしてみたりするのは手間がかかる。なんとなく直感で答えが出そうな気もするが、あえてコンピューターに任せてみよう。

正しい答えはコンピューターの中で何回も試すことで得ることができる。そんな風にコンピューターの力を借りてデザインを作ることを「コンピュテーショナルデザイン」あるいは「ジェネレーティブデザイン」という。

2.Revit 2021の新機能「ジェネレーティブ デザイン」

BIMアプリケーションRevitの2021バージョンが今年リリースされた。このRevit 2021に新機能「ジェネレーティブ デザイン」が搭載された。今回はこの機能を使って「境界線の中にできるだけ大きな三角形を作図する」を解いてみよう。

Revit 2021「管理」タブの「ジェネレーティブ デザイン」パレット

3.Dynamoで問題を作成する

「ジェネレーティブ デザイン」で問題を解く前にしなければいけないことがある。そう、問題を作ることである。

RevitではDynamo(ダイナモ)というビジュアルプログラミングツールを使うことができる。今回は次の図のプログラムを作成した。Dynamoについての詳しい解説は別の機会に譲るが、グラフィカルなインターフェイスを使ってプログラムを作ることのできる便利なツールだ。

今回はプログラムを簡単にするためにRevitからモデルや図形を読み込んだり、Revitに結果を書き出したりということは行っていない。Dynamoの中で完結するプログラムだ。

Dynamoで作られたプログラム

プログラムの構造を簡単に解説しておこう。

(1)最初にCSVファイルから座標を読み込んで外周の境界線を作成する。

(2)0から8の境界線の節点番号から一つを選んで三つの点を入力、三角形を作成する。

(3)できあがった三角形をサーフェスという面にして面積を出力する。

(4)同じ三角形を3Dのソリッドにして、重心位置を算出、重心から原点までの距離を出力する。

(5)次にこのプログラムを使ってみよう。(2)で入力した点番号を変えて図形と出力値がどう変わるかを見る。0-4-2と入力すると面積が27.7、原点-重心の距離が0.857と変わった。スライダーを動かすと図形と出力数値が瞬時に変わる。

(6)7-4-1と入力すると面積は41.8と大きいが、原点-重心の距離が2.27と離れてしまった。直感的には正三角形に近く、これがいいかもしれない。

4.Dynamoをジェネレーティブデザイン用に書き出し

できあがったDynamoプログラムをジェネレーティブデザインが使えるように書き出す。いったん書き出しておけばこのプログラムを幾つかの方法で計算することができる。書き出しさえしてしまえばDynamoのウィンドウを閉じて、Revitのアイコンからジェネレーティブデザインを実行することができる。

Dynamoから「ジェネレーティブ デザイン用に書き出し」

5.スタディを作成してジェネレーティブデザインを行う

書き出しが終われば次は「スタディを作成」する。先に書き出した「三角形の面積と重心」以外も幾つかのサンプルが表示される。今回は目的の「三角形の面積と重心」を選択する。

「スタディを作成」ダイアログボックス

ジェネレーティブデザインの計算の方法として次の4種類の方法が用意されている。

6.最適化された結果を見る

「Optimize」を指定して計算してみよう。残念ながら日本語のダイアログボックスには「変数を選択(Choose variables)」を「異なる入力を選択」とするなど、幾つかの誤訳があるので、英語のダイアログボックスと二つ並べて紹介する。両者を比べて用語の意味を理解いただきたい。

変数は「A点の番号」「B点の番号」「C点の番号」の三つを選ぶ。目標は「三角形の面積」を「最大化」と「原点-重心までの距離」を「最小化」だ。遺伝的アルゴリズムの設定は「Population Size」を「40」、「Generations」を「20」、「Seed」を「1」とした。

「スタディを定義」ダイアログボックス(右は英語版)

結果は図のように14種類の案がピックアップされた。計算上は9×8×7=504通りの案があるはずなので、そのうち14種類が候補になったというわけだ。分かりやすいように横軸を「原点-重心までの距離」、縦軸を「三角形の面積」として表示させてみる。このグラフの点をクリックすると、候補が表示された。やはり7-4-1の三角形の面積が大きく、候補に選ばれた。「原点-重心までの距離」を優先するなら8-4-2がよいだろう。14種類からどれを選ぶかは設計者の判断だ。

手間のかかる計算を1分もかからずコンピューターがこなしてくれた。これがジェネレーティブデザインだ。

「成果を検討」ダイアログボックスで結果を表示

7.全ケースを計算

遺伝的アルゴリズムを使った最適化によって14種類の候補を選ぶことができた。では全ケースを計算して、比較してみるとどうなるのだろう?

重複して三角形にならないケースも含めて9×9×9=729通りを計算することになる。計算方法はRandomize(ランダム)もしくはLike This(条件を設定)だ。さぞ時間がかかるだろうと思ったが、2分ほどで終わった。結果は次の図のとおりだ。比べるとOptimize最適化が遅かったということになる。計算条件の設定がまずかったのかもしれない。ただ得られた結果は同じだ。

Randomize(ランダム)で729通りの計算

8.本当はこれがやりたかった

筆者としてはこの例で「これがジェネレーティブデザインです」というのはちょっとつらい。あまりにも簡単すぎる。もう少し本格的で実務につながることをやってみたかった。そこで考えたのは平板の屋根のどこに柱を建てればいいかを検討するというテーマだ。
そのためにはDynamoでDynaShapeやStructural Analysis with Dynamoといったパッケージやアプリケーションを使う必要がある。しかし、これらのアプリケーションをジェネレーティブデザインとともに動かすことができなかった。本稿が記事としてリリースされる頃には、うまくいっているかもしれない。そのときは次回の記事で報告することにする。

立体トラスの支点位置と変形

床スラブの支点位置と変形

シリーズ記事