FC2ブログ
育成論戦略ダブルバトルパーティー構築検証基礎知識対戦メモ雑記対戦会ポケモンその他コラム
ポケモンの対戦、育成、戦略について簡易な考察をしているブログです。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2008.05.06 Tue
さて、時間がかかり過ぎてしまいましたが、二回目です。今後も慌しいこの世の中に逆行しての、スローペース更新となりそうです(すみません)。
第二回目となるこの記事では、何故、研究に数値シミュレーションを使うのか紹介します。

そもそも、数値シミュレーションって何よ? って方も多いと思うので、ざっくりと説明します。

  プログラムを書いて、パソコン(というか計算機)に計算させる。

正しい定義は知らないのですが(おい)、こんな感じのイメージで捉えていただければ。

ちょっと、例題を出してみます。

  A=1+2+3+4+5+6+……+999998+999999+1000000
  このときAは?

これは実は簡単な解き方があるのですが(高校生の方なら分かると思いますが)それは後で説明するとします。
解法としては、1+2=3、3+3=6、6+4=10……と根気よく計算するのも決して間違いではないです。が、とてつもなく時間がかかりますし、膨大な量の手計算をするとなるとどうしても計算間違いの危険性があります。
ここで登場するのが、プログラムを書いて計算機に解かせてやろうという発想です。等差数列の和を計算するプログラムを作ればOKです。一度作ってしまえば、1000000までの和であろうと更に大きな数値までであろうと、パソコンが計算結果に間違いなく(プログラムにミスが無ければ)、しかもあっという間に計算してくれます。

ここで一つ注意して欲しいことがあります。というのは、何でもかんでも考えなしに数値シミュレーションすればいいわけではありません。先ほどの例題は、(1+1000000)×1000000÷2で簡単に手計算できてしまいます。逆にいえば、手計算で解くのが大変な問題を解くときに、数値シミュレーションを使うのがいいでしょう(スパコンに解かせても、一ヶ月で計算が終わらない大規模なプログラムもありますが^^)


では、次に数値シミュレーションがどのように日常生活で役立っているか、簡単に解説します。

例えば車。
車は安全性を確保するために頑丈に作る必要があります。でも頑丈にするとコストがかかります。なので、コストを抑えつつ安全性を確保できるようにしないといけません。
安全性を検証するためには、車の衝突実験をします。車を実際にぶつけて実験している映像を見たことがある人もいると思います。ただ、あれって明らかに大掛かりで、実物を使う分、お金がかかるし何台も実験するとなると大変です。そこで、パソコンでシミュレーションします。コストをどうやったら抑えられるかも検討します。
実際に計算する際は、多分、有限要素法を使っていると思います。車をモデリングする際、メッシュを切って微小な領域の集合体として計算します。このへんの計算をするアプリケーションが実は世の中に出回っています。LS-DYNA、ABAQUS、NASTRANで検索して調べると、ベンダのページがすぐ見つかると思います。これらのアプリケーションに解かせる入力データを作成するためのモデリングツールもあり(例えば、Patran、ABAQUS-CAEなど)、プログラミングをしなくても計算できる環境ができているのが凄いところですね。ちなみに、このあたりのアプリケーションは各研究施設や大学で保有している大型計算機には大抵入っているので、大学に行ってこういうことを研究したい人は意識しておくと楽しいかもしれません(ちなみに、これらのアプリケーションはとてつもなく値段が高いのも特徴です。一般市民にはさすがに買うのが厳しく研究機関や企業などで購入するのが一般的だと思います。まだマイクロソフト製品やAdobe製品が良心的と思えるくらいです)。

他にも色々な分野で役立っており、例えば、数値計算と関係なさそうな化学、高分子の分野でも活用されています。accelrys 社から出ている Discovery Studioでは、タンパク質の構造を計算したりもできるようで、多分、これ一つでも卒論くらいなら書けてしまう気がします……。
私はあまり詳しくないのですが、医療分野でも役立ってると思います。構造解析系アプリのマニュアルにも心臓の計算してる例題があったりしますし。

こんな感じで計算されたものは日常生活で様々な場面で役立てられています。身近な所では全国のパパさんの味方、よく飛ぶゴルフクラブ。水泳日本代表が来ている水着(水着一着変えるだけで一秒くらいの差も出るとか)なんかもそうですね。


では、次に計算速度と誤差、計算結果の妥当性について簡単に説明します。

まず、誤差について。
計算機で計算させる場合には誤差が発生することを頭に入れておく必要があります。誤差については、私が語るまでも無くweb上に様々な資料があるので、探せば色々でてきます(丸め誤差、桁落ち、情報落ちなどなど)。

次に計算結果の妥当性について。
コーディングのまずさで全く見当違いの計算結果がでることはよくある話。ある入力データでは計算が合うけど違うデータを入れると変な答えが出る、なんて話もよくあります。
もっともな答えをだすプログラムを作るのはかなり骨の折れる作業で、数値計算を行う研究者にとっても要となる部分な気がします。自分のプログラムで出した結果があっているかどうかの検証作業はとても重要です。例えば、既存論文と結果を照合してあっているかどうか確認したりすると思います。色々とチェックをかけることが大事です。

最後に計算速度について。
パソコンで計算させる場合に重要なのがマシンの性能です。といっても、最近のパソコンは家庭用もかなり高性能なので、小規模な計算ならそんなには気にならないと思います。はじめに例を出した数列の和の計算なんかは一瞬で計算してくれるでしょう。ただ、計算時間がかかるものは優秀なマシンを使うのが好ましいです。
スーパーコンピュータ(略してスパコン)はNHKの番組なんかで紹介されているので知っている方も多いと思います。国内だとベクトル計算機として名高い地球シミュレータ、現時点Linpackベンチマーク結果で国内最速のTSUBAME(Tをとるとスバメになる)が有名だと思います。スーパーコンピュータ性能ランキングTOP500(http://www.top500.org/list/2007/11/100)では現時点ではアメリカが上位をかなり占めています。最近、インドが入ってきているのが興味深いですね。
大規模な計算をしたい方はやはりこのようなマシンを使うのがいいです。特に東工大は確か学内関係者なら誰でもアカウントを取れた気がします。TSUBAMEのwebサイトを見る限りでは無料のキューは一時間制限があり、課金キューでないと大規模なものは計算できないっぽいですけども。

このようなマシンでは「並列化」が一つ重要となります。多分、MPIを使っていると思います。並列化を分かりやすく説明するなら駅の改札でしょうか。東京のような都会ではかなりの人の出入りがあります。切符を通す改札口が一つしかない場合だと、人の出入りに時間が大分かかりますが沢山改札があると処理が分散し時間短縮となります。これが、並列化(ちょっと乱暴な説明ですが)です。沢山のCPUに処理を分けて計算させるので速く計算がすみます。一般的にはループ処理をしている部分を並列化します(MPIには様々なサブルーチンがあり、それで動きを制御します)。
もう一つ重要なのがチューニング。もし、2倍計算速度が早くなるマシンを使っても、プログラムが遅いと宝の持ち腐れとなります。プログラムを書き換えることで、2倍以上早くなるなんてこともよくあります。有名なのが、多次元配列と多重ループです。例えば、C言語の2次元配列はa[i][j]という配列があった場合、a[0][0],a[0][1],a[0][2]……の順番でメモリ上に配置されます。もし、プログラムでa[0][0],a[1][0],a[2][0]という風に読んでしまうと飛び飛びの場所を見ることになるのでキャッシュミスが起こりやすくなります。というわけで、大規模な計算をするならキャッシュミスが少なくなるような心がけが大事です。逆に一瞬で終わるようなプログラムならチューニングしても差はそんなに出ないのでチューニングに労力を割いても無駄といえます。


とまあ、ポケモンと随分とかけ離れた話となりましたが、二回目は数値シミュレーションについての紹介ということで、こんな内容としました。ポケモンで何か計算する場合は、そこまで大規模にならない気がするので高速化は実はあまり意識しなくてもいい気もします。
次はモンテカルロ法についての話を予定してます。

早く書けるように努力はしますが、遅くなってしまうと思います(すみません)。

スポンサーサイト
pi-tras
まずい、2回目にしてもう混乱している><;;
この先、話についていけるか不安ですが、更新楽しみに待っていますね~^^b
2008.05.28 Wed 03:47 URL [ Edit ]
aona
こんばんは。
今回の話ですが、実は「パソコンって色んな計算ができるんだよ」ってことを言いたかっただけだったりします。で、ポケモン用の計算をするのはどう? っていうのが、このコラムです。一文一文の内容を追わなくても、雰囲気だけ味わえればOKだと思います。

今回は、私の趣味がかなり入ってしまったので、次回以降はもっと噛み砕いて話せればいいかなと考えています(時間を置いて、読み直してみるとなかなか酷いと自分で思っているあたりダメダメですね……)
2008.06.02 Mon 00:16 URL [ Edit ]
シク
自分には話しが難しすぎます;;
いきなりですがブログの閉鎖をすることになりました
長い間お世話になりました
ではまたいつか^^
2008.06.21 Sat 22:12 URL [ Edit ]
aona
こんばんは。
返事が遅くなりすぎてすみませんでした。

難しいのは、多分私の書き方の問題だと思います。もうちょいと、人の興味引けるかき方にするよう努力が足りなかったかなと思ってます。

ブログお疲れ様でした。
2008.07.07 Mon 20:58 URL [ Edit ]
このコメントは管理者の承認待ちです
2010.02.04 Thu 14:25 [ Edit ]
このコメントは管理者の承認待ちです
2011.10.25 Tue 18:28 [ Edit ]
このコメントは管理者の承認待ちです
2012.11.07 Wed 11:41 [ Edit ]
このコメントは管理者の承認待ちです
2012.11.29 Thu 04:40 [ Edit ]
このコメントは管理者の承認待ちです
2013.01.24 Thu 11:07 [ Edit ]
このコメントは管理者の承認待ちです
2013.03.04 Mon 13:40 [ Edit ]
このコメントは管理者の承認待ちです
2013.10.16 Wed 22:51 [ Edit ]
管理者にだけ表示を許可する

TrackBackURL
→ http://aonablog.blog54.fc2.com/tb.php/178-31305743
Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。