XGAG 遺伝的アルゴリズムによる翼型設計GUIアプリケーション

ご無沙汰しておりました。yuukivelです。

今回の記事は、遺伝的アルゴリズムによる翼型設計GUIアプリケーション
XGAG XFOIL Genetic Algolithm Graphical user interface airfoil design tool
の公開、および使い方の解説です。

XGAGは以下のレポジトリよりダウンロードできます。Window向けに.exeを用意しています。Mac用.appは少々お待ち下さい pythonを入れている人はソースコードも使用できます。(モジュールの要求あり)

Windows
https://dl.dropboxusercontent.com/u/36164244/XGAG_1.01_Win.zip

(前バージョン : https://dl.dropboxusercontent.com/u/36164244/XGAG_1.00_Win.zip)

ソースコードはこちらより閲覧できます。今後より読みやすくする予定です。
https://github.com/NaotoMorita/NFoilDesign/


また、11/30に行われたスカイスポーツシンポジウムで用いたスライドを公開します。
https://dl.dropboxusercontent.com/u/36164244/NaotoMORITA19thSSS%E7%99%BA%E8%A1%A8%E3%83%91%E3%83%AF%E3%83%9D.pptx


XGAGは、自分の機体にあった翼型を設計したい飛行機設計者だけでなく、翼型のことを理解したい鳥人間、および模型飛行機製作者など、わかりやすく、幅広く使えるように配慮しました。
特に人力飛行機開発チームにおいては、設計者が指定したパラメータでXGAGを用いて、各自できた翼型を持ち寄るといった使い方もできるでしょう。

もちろんこのソフト単体でも使うことができますが、既存の翼型解析アプリケーションであるXFLR5と組み合わせると非常に有用です。個人的には、XGAGがとっかかりとなって翼型や翼の事についての理解が深まる人が増えてくれればいいなと思っています。

では早速使い方にうつっていきましょう。

XGAGの使い方-設定編

まず翼型を集めましょう。以下のサイトをオススメします。
http://www.airfoildb.com/
・欲しい翼型を検索して、そのページを表示。Other formatのDATの中身を保存しましょう。DATの中身をメモ帳とかに貼って.datの拡張子で(分からなかったら.txtでもよい)保存するのでも結構です。翼型ファイルの本質は、縦にダーっとならんだXY座標ですので、それがあれば大丈夫です。

上のサイトは時々アクセスできなくなったりするので、有名どころも載せておきます。
http://aerospace.illinois.edu/m-selig/ads/coord_database.html

余談ですがUIUCのM-Selig先生は翼型界の超大御所です。プロペラの人とか知っている人も多いでしょうSD7037とかはSelig先生とDonovan先生の開発です。

DAE-11 //// DAEシリーズのなかで最も太い翼型です。31、21と比べると空力的性能はちょっと微妙。。。
DAE-21 //// DAEシリーズのなかでよく使われる翼型です。太さと空力性能がちょうどいいです。
DAE-31 //// 言わずと知れた名作。細いですが空力的な性能が良いです。
DAE-41 //// 影に隠れてあまりぱっとしないですが、低揚力係数での抗力係数が小さく、翼端向けの翼型としてよい翼型です。
DAE-51 //// プロペラ向けの翼型です。低レイノルズ数で使いやすいです。細いですが。
FX76MP120 //// 高いレイノルズ数、高い揚力係数では、圧倒的な揚抗比を誇ります。1度解析して取り憑かれる人が多いですが、高すぎる揚力係数、凄まじい捻りモーメント係数など欠点も多いです。
FX76MP140 //// FX76MP120のとんでもない性能には劣りますが、その代わり翼型の中ではかなり太い部類に入ります。それでも十分に良い性能です。
FX76MP160 //// 太さがとんでもないです。太すぎて二段失速の傾向が見えていますが、性能はよいです。
SD7037 //// うちのチームでプロペラに使っていました。下面が直線で作りやすいです。性能は普通です。探せば風洞試験データが手に入るようです。
epper66 //// 低レイノルズ数での揚抗比がとんでもないです。ちょっと細いですが使いやすいです。

保存した翼型はXGAG内の「FOILS」に保存しておくと、後々選択が楽です。このデフォルトの翼型フォルダは、プログラム内で変更することができます。

ではソフトを起動しましょう。

起動すると以下のような画面になります。これがターミナルです。(画像は開発中のものです。レイアウト等は今後変わることがあります)

初回起動したらOptionタブからDefault Directory & Foilsを選択して翼型ディレクトリとデフォルト翼型を設定して下さい。次回起動時からその翼型が選択された状態で起動します。
(初回起動時でもFileタブでNewを選ぶと、デフォルトがすべてBase Airfoilに設定されます)

初めデフォルトに設定されているXGAG内のFOILSディレクトリには、サンプルとしていくつか翼型を入れてあります。このまま翼型ディレクトリとして使うのもいいと思います。

デフォルト設定が終わったら早速解析の設定を行います。翼型はデフォルトから変えることも簡単です。.datもしくは.txtの翼型座標ファイルを選択するだけです。

まずは目標値を設定します。

解析する迎角α(deg) : XFOILで解析する迎角を設定します。

Reynolds数 : 解析するレイノルズ数です。初めのうちは高レイノルズ数=500000、低レイノルズ数=200000としておきましょう。定義はRe = Chord * Velocity / \nu \nu : 動粘係数(空気だと1.512×10^(-5)くらい)

揚力係数 : 目標となる揚力係数を設定します。揚力係数とは、単位面積の板が発生する揚力が、その板を風に垂直に立てた時の何倍になるかを表す係数です。

翼厚 : 翼の厚さが翼弦長に対して何%になるかを表しています。13〜15%くらいは太い翼型、8〜9%くらいが細身の翼型と呼ばれます。

翼厚計算位置 : 翼の厚さをどこで計算するか指定します。翼にかかる捻りモーメントができるだけ0になるように設定します。だいたい35〜40%が多いです。(別の考え方もあります)

最小抗力係数 : 計算で現れる異常値を弾くために設定します。抗力係数がこれ以下になると計算しません。とりあえずデフォルト値で大丈夫です。

続いて、評価関数について。評価関数は解析に書けた翼型がどれだけ目標に近づいているかの”点数”を表しています。高ければ高いほどその評価関数の中でよい翼型です。
抗力を小さくする場合は1/Cdの係数を大きく、捻りモーメントを小さくするには1/Cmの係数を大きくして下さい。となりの指数関数項は目標値から離れれば離れるほど小さくなります。いわば”罰則”です。
きつい制限を加えたければ罰則の項を大きくして下さい。大きくしすぎると抗力やモーメントの低減効果も小さくなってしまいます。

これで設定が済んだので、早速実行してみましょう!

XGAGの使い方-実行編


実行は startボタンです。途中で止めるのはstopでできます。restartボタンはその設定のまま初めから計算し直します。

ある程度計算をすすめると、下のような画面になります。解析をすすめて、これはとっておきたい!という翼型ができたら、エクスポート(後述)するか、計算のセーブをしましょう。Ctrl+SもしくはファイルタブのSave,Save as で計算状況が.gagで保存されます (.gagの中身は基本的にCSVですが、エクセルで開いてしまうと壊れるので独自拡張子にしました。メモ帳で中身が見られます)

さて、計算をストップすると、以下のようなことができるようになります。

  1. 新規プロジェクトの開始 (Fileタブ→New)
  2. プロジェクトのオープン (Fileタブ→Open)
  3. 翼型のエクスポート (翼型表示の下の世代選択ボタンとexprot foilボタン
  4. 翼型のロールバック

XGAGの使い方 -翼型のエクスポートについて

翼型のエクスポートは、解析を実行した全ての各世代で、最も良かった翼型を出力できます。出力したい翼型の世代を世代選択ボタンで選択して、export foilボタンを押して下さい。そうするとこんなウィンドウが出てきます。

このうち、速度分布平滑化とは


こんな圧力分布(速度分布)を

こんな風にすることです。

翼型の速度分布の振動は、翼型座標の2階微分値の不連続によって現れます。様々な2階微分値をもつ翼型を混ぜているのですから、速度分布の振動がでるのはある意味当然です。(元となる翼型の座標点ファイルの点数を増やしたり、翼弦長の正規化等をすれば多少は改善します。)速度分布振動をXFOILの機能であるMDES(複素速度マッピング)のFILTER機能を用いてある程度取り除くかどうか聞いているのが先のウインドウです。

上の段落よんで、訳分からん、という人はとりあえず平滑化かけておけばいいでしょう。ただし、その場合指定した揚力係数や翼厚からは少々ずれます。厳密に指定値を使いたい設計者さんとかは、平滑化せずにXFLR5等を用いて自分で速度分布いじってください。ついでに、その際のヒントは
「揚力係数の値は圧力係数Cpを用いて
 CL = \int_0^1Cpdx * cos(\alpha)
(上面下面両方積分して下さい。つまりは翼型座標のxを横軸にCpを縦軸にとったグラフの囲む面積に迎え角のコサインをかけたものです)
このことは基本中の基本なのに意外と知られていないです。僕も翼型始めるまで知りませんでした。

要は面積一定になるように速度分布いじれって事です。

XGAGの使い方 -翼型のリバートについて

遺伝的アルゴリズムはもともと非効率な最適化手法です。少しでも効率を良くするためにXGAGは以下のような手法を取り入れています。

  • ルーレットルール (評価の低い翼型も生き残る可能性を残すことによって系の多様性を維持する)
  • 突然変異 (系の多様性を維持)
  • エリート戦略 

このうちエリート戦略とは今までで最も良い個体の遺伝子を毎世代必ず1つ投入することによって、系の収束を早める手法の事をいいます。すごく重要なのですがこれがちょっと困ったちゃんなのです。
つまり、解析に異常値がでて最良個体の更新が行われてしまった場合あまり良くない遺伝子が毎世代投入されることになり、収束に悪影響を与える、ということです。XFOILは時々とんでもないCDを吐いたりするので、これを防ぐ必要があります。

対策として、最小抗力の設定を行っていますが、これだけでは不十分です。最適化をかけて放っておいて、異常値がトップに来てるのは哀しいものがあります。

そこで、リバートを使います。この機能は、セーブされている最良個体の遺伝子を、何世代か前のものに戻すことができます。
これはおかしい、と感じたら、履歴を見ながら世代選択ボタンで世代を選択し、その世代まで最良個体を戻すのが良いでしょう。変わるのは最良個体一つだけです。

終わりに

操作説明はこんなところでお終いです。何か不具合やバグ等見つけたら、コメント等で知らせていただけると幸いです。

アプリケーションを開発した身としては普及して、もっともっと自由に、飛行機創りを楽しんでくれるといいなと思います。

かつて、DAE Seriesというユートピアがありました。それの使用に理由は必要なく、賛美の歌を歌っていればよかった。
このXGAGが新しいユートピアを作り出してくれることを望みます。
そして、もしユートピアが完成したら、そのディストピアで、自由を求める主人公たちが現れることを、切に望んでいます。

つまらないギャグで笑うなんて、そんなのジョークだろ、と笑い飛ばしてもらえることを。