UA-115498173-1

2018年06月30日

ノンパラメトリック最適化

先週の続きです.トポロジー最適化をJMPで実施可能かという質問でした.一つの答えは寸法最適化に持ち込めばシンプルな事例では同等の最適化は可能,ということになります.寸法最適化にどうやって持ち込むかというとトポロジーを因子に持ち込むのです.即ち,考えられるトポロジーの候補を質的水準に設定します.例えば,二次元平面のレイアウトであれば,穴が一つ空いているレイアウトか二つ空いているレイアウトではトポロジーが異なるのでそれぞれを異なる水準として設定します.最適化することでどちらかのトポロジーが解として選択されるわけです.この手法には大きな問題があります.それぞれのトポロジーで,設定すべき設計因子が異なるような場合,想定する寸法が揃わないのですから,別々の計画にするしかありません.結局はトポロジーを設計因子ではなく前提条件(拙著では固定因子と呼びました)とすることになります.その上でトポロジー毎に別々の最適解を得て,それらを比較することになります.これは結局ごく普通の最適化設計ですね.想定されるトポロジーがそれほど多くなければこの方法でも最適化は可能です.しかしながら,厳密にはトポロジーは無数にあるので,これではトポロジー最適化とは言えず,真の最適解を得ることは難しいでしょう.
そこで,もっと厳密な意味でトポロジー最適化をJMPでやるにはどうしたらよいかを考えてみます.実用性はあまりないかもしれませんが,やってやれないことはありません.極シンプルなかなり限定された事例ににのみ適用できるとはいえ,それでも一応トポロジー最適化にはなってはいます.どうやるかというと,例えば,構造を最小単位の要素で表現することを考えます.最小単位の要素は2次元画像の画素(ピクセル)や3次元オブジェクトのボクセルのようなものだと思ってください.ピクセル位置に順番をつけ,それぞれのピクセルを設計因子と考えます.5x5ピクセルであれば25因子です.各々のピクセルに物質があるかないかをONかOFFかの二水準で構造を表現します.先の手法を通常の最適化としてパラメトリック最適化と呼ぶとすると,質的な因子で構造を表現するので,こちらの手法はノンパラメトリック最適化と呼ぶこともできるかもしれません.とはいえ,基本的に総当たりなので5x5の構造で512実験ですし,10x10ですと16384実験にもなります.もちろんカスタム計画で実験を圧縮することはできませんから,このままではJMPでやるには現実的ではありません.そこで,レイアウトの制約(例えば,穴の数を制約したり,同じ水準は斜め方向には配置しない(パターンが斜め方向に点で隣接する)などの禁則を設定するとぐっと実験数は減ります.と言ってもこのような制約をかけるにはJSLを組む必要があります.そこまでしてJMPで最適化する意味はないかもしれませんが,計画さえ組んでしまえば,JSLを使ってコンピュータシミュレーションと連成して特性等を計画テーブルに読み込むことができます.MATLABかPythonを使って例題を作って実際にやってみようと思っていたのですが,うまい例題が思いつきませんので,また後日ということにさせてください.(やってみたい事例があればコメントでお知らせください.)
今回紹介した手法はピクセルの順番をうまく設定すれば何らかの意味も取れるかもしれないので,面白い手法とは思っています.ですが,極小規模のシステムに適用する以外は現実的ではないので構造最適化というよりはレイアウト最適化といったほうが正確ですね.やはり本来はトポロジー最適化は専用の最適化ソフトを使ってソルバーと連成して力づくで実施することになるとは思います.ですが,こういうソフトは高価なのでそう簡単には手が出せません.システムを単純化してラフな最適化であればここで紹介した手法でも使えるかもしれません.例えば,回路基盤上の放熱板のレイアウトとかに使えないでしょうか?他にも色々な産業分野で使えるかもしれません.こういうことを考えるのが頼みにでもあります.私の経験では過去にこの手法が有効である事例が二つだけありました.
本日の話は文字ばかりだと分かり難くかったかもしれません.すいません.それではまた.
タグ:Q&A JMP
posted by Tad at 19:00| Comment(0) | TrackBack(0) | Q&A

2018年06月23日

トポロジー最適化

質問を受けたので今日はその話をします.こういった最適化がJMPで出来ますか?という質問です.リンクを踏みたくないという方のためにどういうものか説明しますと,CAEで実現した最低限の体積で最大の強度が出るような構造を持った機械部品で有機的なメッシュで構成されている,と言えばお分かりでしょうか.この手の工業製品を最近よく見かけるようになりました.これは構造最適化手法の一つのトポロジー最適化によるものです.原理は単純で基本形状からスタートしてそれにボクセルを付け加えたり削除したりしてその度に特性(重量と強度)を計算します.材料の分布を最適化すると考えるとわかりやすいかもしれません.当然ながら有限要素法によるシミュレーションソフトのようなソルバーとの連成が前提です.無数の繰り返し計算を必要とする計算負荷の大きい最適化です.腕力で最適化を達成するとはいえ,数値不安定現象(例えば,チェッカーボード現象といって材料が格子のように並んでしまう解が出てきたりします.)を如何に回避するかなど多くの研究がなされています.
この最適化では,構造が位相同値であることを前提としません.考え得る全ての構造が最適化の対象になります.ここで位相というのはトポロジーのことです.例えば,円板と円環はトポロジー的に異なる構造です.ですから,このような無数の穴が開いた構造も最適解になりうるわけです.上のリンクにある三次元構造は,強度と重量の多目的最適化の解になっているわけですが,従来の人間界では特異な形状かも知れません.とはいえ,自然界では普通にみられる構造です.これを書いていて思い出しましたが,この部品はアントニオ・ガウディのサクラダ・ファミリアを彷彿させますね.構造は自然から学ぶべきだとしたガウディの建築物とトポロジー最適化は同根であったわけですね.リソースの節約が基本的な戦略である生命の形態を顧みれば,自然界でこのような構造は合理的です.人間の吠骨も顕微鏡で拡大すれば複雑なネットワークを構成していますし,有孔虫という原生動物の殻を顕微鏡で見ると同様な構造が観察できるそうです.サンゴ礁の砂はこのような生物の脱け殻だということで,九州大学大学院の菅先生のHPに電子顕微鏡の写真が掲載されています.
トポロジー最適化は以前から知られていた手法でしたが,この手の構造物を最近よく見かけるようになったのは,PCやCAEソフトの高性能化に加えて,近年3Dプリンターの技術が格段に進歩したからです.今までは最適構造だとわかっていてもそれを実際に作るのが困難であったため,絵に描いた餅だったものがどんどん現実のものとなってきているのが現状です.例えば,ここに昨日まで開催されていた設計・製造ソリューション展の2015年(DMS2015)のレポートがあります.(私も毎年参加していたのでしが,今年は忙しくて行けませんでした.)この記事の最後の方にオートデスクがトポロジー最適化で作った椅子が紹介されています.おそらく,安定性や重量と強度などを多目的最適化したのでしょう.とはいえ,椅子であれば見た目や掃除のし易さなども重要な因子ですし,座りごごちなども忘れててはならないので,実用的な最適化とは言えないでしょう.工業製品の場合は修理も考えなければならないので,有機的な構造は不利です.とはいえ,今後はこれらの制約がないものには見た目はギョッとする構造が増えていくかもしれません.
前置きが長くなりましたが,JMPでトポロジー最適化ができますかという質問に戻ります.答えを先に言うと,上の椅子のような構造の最適化はできませんが,もっと単純な問題であれば工夫をすればそれらしきことはできます.最初に,最適化には三つの種類があることをリマインドしておきます.寸法最適化,形状最適化そしてトポロジー最適化です.形状最適化には少し説明が必要で,形状を最適化していれば形状最適化というわけではないのです.形状をいくつかの寸法で表現した場合,それは形状最適化ではなく寸法最適化で形状を最適化したというだけなのです.
寸法最適化の場合,標準形状を(非等方的に)アフィン変換(拡大,縮小,回転などの変形)した形状の中に最適解を探すイメージです.例えば,すり鉢様のコンタクトホールの形状を最適化するなどという場合,孔の上端,下端の直径及び深さという三つの寸法で規定される形状を最適化するだけならそれは寸法最適化に過ぎません.これに対し,位相同位体の中に最適解を探します.形状最適化では,孔の断面が例えば四角であったり深さ方向にボーイングしていたりといった複雑な構造の最適解もあり得るのです.これらの解は一定の寸法(群)では記述できません.
また,形状最適化の対象は風力発電の風車の羽根の断面ですとか,新幹線の形状などが多いので,流体や構造の重いシミュレーションを実施するソルバーと連成した環境で実施されることが多いです.トポロジー最適化では形状最適化における位相同値の制約を外すのです.即ち,ありとあらゆる構造の中から最適解を探します.当然ながら,ソルバー連成を前提とした手法です.そこで使われる最適化ロジックは,GA(Genetic Algorithm) 遺伝的アルゴリズムやSA(Simulated Annealing) 焼きなまし法などの手法です.JMPの満足度の最大化ではすでに応答関数が求まってから適用されるので,ソルバーと連成するということが基本的にできません.ですから,JMPで実施可能なのは寸法最適化とせいぜい一部の形状最適化どまりです.
しかしながら,限定したケースであれば,JMPを使った実験計画でもトポロジー最適化ができます.例えば,3x3のブロックで形成される二次元構造物を考えます.この構造物の総隣接ブロック数をY1,ブロック数をY2として,Y1を最大化,Y2を最小化する構造はどのようになるでしょうか.(但し,製造できるものに限ります.)寸法最適化であれば縦横の大きさをX1,X2のそれぞれ3水準で計画を立てればよいことはお分かりと思いますが,トポロジーが異なる穴あき形状は最適解としては得られません.本日は所用がありまして,続きは来週とさせていただきますが,それまでどのようにやったら良いか少し考えてみてください.
それでは,また.
タグ:Q&A JMP
posted by Tad at 19:00| Comment(0) | TrackBack(0) | Q&A

2018年03月03日

p82の列の寄与について

p82に示した,エクセルでやるようなクロス集計法との比較はオフトピックで,原稿段階でもこの部分は削除対象だったということもあってこの部分の手順説明は省略しています.p82一番上のグラフの描き方については少し前にお話していますが,今度はその下にある「列の寄与」のグラフが描けないとの質問をいただきました.統子ちゃんのセリフ「この結果を「パーティション」による「赤三角>列の寄与」と比較すればいいのね.」,その次のJMPくんのセリフ「これは装置#を除外してk分割交差検証によって自動分割した結果だよ.」をそのまま実行してもp82のグラフは得られません.ヒントは除外されている行の扱いです.以下に書くことはJMP経験者であればご存知だと思うのですが,本書をもとに新たにJMPを勉強してくださっている方もいるようなのでこの場でもう少し丁寧に説明します.詳細なJMPの操作を示すことまでは本書の守備範囲と考えていませんが,このブログでは可能な限りJMP操作もサポートしていこうと思っています.
さて,以下に手順を示します.まず,データは同じ「5_概観結果.jmp」を用意してください.ファイルを開いたら,すべての非表示かつ除外になっている行が選択されていることを確認して,もしも選択が解除されているならば,「装置No.」列と1行目を選択してから,右クリックで「一致するセルを選択」を実行します.これですべての非表示かつ除外になっている行(装置No.が#4)が選択されるので,この状態で「行>行の削除」です.(ここがポイント)
ここで「パーティション」を実行するわけですが,このとき装置#を「X」に入れないでください.パーティション プラットフォームが出てきたら,赤三角から「k分割交差検証」を実行するとkの値を入力するように聞いてきますので,デフォルトの5のままにして『OK』です.この操作で『分岐』『剪定』の隣に『実行』ボタンが出てきますので,それを押せばp82のグラフが描けます.
因みに,このデータでは「k分割交差検証」を実行しなくても最初から『実行』ボタンが出ています.それはなぜかという理由は,なぜ非表示かつ除外のままではいけないかという理由と同じなのです.JMPではモデリングの際のオーバーフィッティング対策として検証という機能が実装されています.データを学習セットと検証セットとに分けて,前者でモデルを作成し,後者でそのモデルを評価します.検証セットの指定方法にはいくつかあって,JMP Proでは検証列を指定することも可能ですが,JMP Stdで最も簡単なのが「k分割交差検証」を使うことです.デフォルトのk=5であれば,データを5分割してそのうちの一つが検証セットに割り当てられます.(kの選び方は観測データの性質によって選ばれるべきですが,今のデータサイズであればデフォルトのままでよいでしょう.)k個のデータセットそれぞれを検証セットとしたすべての結果が比較され,最終的にこれらの中で最もR二乗の大きいモデルが採用されます.ここで問題となるのは,「除外」された行があるとこれらが(頼みもしないのに)検証セットとして扱われてしまうという仕様があるのです.このためデータに除外された行があると本それは異常値としてモデル作成には使いたくないデータですから,「k分割交差検証」を実施してもおかしな結果になってしまうのです.このため,実質的に「k分割交差検証」をかけるデータでは一部を除外するという機能が使えないのでとても不便です.
厳密には装置#4以外にも除外されているデータが二つあるわけですが,この二つは削除しなくても「k分割交差検証」の結果には大きな違いはありません.すべての除外された行を削除して「k分割交差検証」を実施した結果を示しておきます.(p82の結果とは微妙に違います.)
列の寄与.png

今週は別のお話をしようと思っていたのですが,それはまた来週ということで.それではまた.
タグ:Q&A JMP
posted by Tad at 13:53| Comment(0) | TrackBack(0) | Q&A