育成論戦略ダブルバトルパーティー構築検証基礎知識対戦メモ雑記対戦会ポケモンその他コラム
ポケモンの対戦、育成、戦略について簡易な考察をしているブログです。
--.--.-- --
上記の広告は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]という風に読んでしまうと飛び飛びの場所を見ることになるのでキャッシュミスが起こりやすくなります。というわけで、大規模な計算をするならキャッシュミスが少なくなるような心がけが大事です。逆に一瞬で終わるようなプログラムならチューニングしても差はそんなに出ないのでチューニングに労力を割いても無駄といえます。


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

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

スポンサーサイト
2008.02.03 Sun
さて、長らく、更新していなかったブログですが、久々の更新となりました。

対戦関係のことは、最近は、対戦研究掲示板で行えばいいと考えています。
その割には、あまり議論のまとめや、発言など行えていなくすみません。

このブログでどういうことを発信していくか考えていました。
ダイヤモンド・パールが出てもう一年以上たつので、ちょっとマニアックなことを書きはじめてもいいかなと思い、これから発信していこうと思います。
内容は、題名にもあるとおり、数値シミュレーションによるポケモンバトルの研究。具体的には勝率導出を行うためのノウハウを書いていこうと思います。私がプログラムを作るわけでもなく、また需要もかなり少ない分野だとは思います。更にいうと、こういうことができたからといって実戦に即役立つわけでもないのですが、私自身は価値あるポケモンバトル研究のアプローチ方法だと思っています。

多分、更新頻度はかなり遅めですが(下手すると更新間隔一ヶ月以上かかるかも)、少しずつ書いていこうと思います。
第一回目は、とりあえず、このコラムの紹介ということで、具体的なことは第二回目以降に書いていこうと思います。
2007.12.30 Sun
29日にチャット会を開きました。たくさんの方が参加してくださりました。
エンテイ様の理解者も多かったようで、うれしいです。


さてさて、対戦研究掲示板が年明けに本格運用となります。

試用運転期間中に色々気付き、よりよくするために、改善すべき点をいくつか見つけました。いくつか書いていきますが、ここに書くものを採用すると決まっているわけではなく、あくまでもこうしたらいいのではないかという提案です。

□議論期間

 現在、デフォルトを2週間とし、一週間ごとに新規議論追加とていますが、期間が短いと感じています。
 そのため、4週間に伸ばすと、いいのではないかと考えました。また、期間を長くすることで同時進行スレが4つになるメリットもあります。

□募集用テンプレについて

 現在、テンプレ項目が色々足りないと感じています。
 今のところ、次のように補えばいいのではないかと感じています。

 ----------------------------------------
 【テーマ名】
 【ルール】
 【背景】
 【目的】
 【観点】
 【初期議題】
 【備考】
 ----------------------------------------

  ◇背景
   テーマを選んだ動機、対戦界の環境、事情など。
   これがあると、どうしてその議題を取り扱うのか分かりやすくなります。

  ◇目的
   何を目的とするか。
   他の人の意見を知りたいのでいっぱい意見を出すだけか、色々な人と研究したいのか、
   優れた戦法を探したり吟味したいのか色々あると思います。

  ◇初期議題
   はじめのネタ振り。
   やっぱり、とっかかりとなるネタがあると話しやすいと思います。
   そのあと、どの観点について話すか、また、新しく気付いた点などについて深めていければいいと思います。


一応、年明けから本格運用となりますが、まだまだ固まりきっておらず、改善点もあると思われるので、数ヶ月は変更がでたりすることもあるかもしれません。変更があった際は、掲示板のトップページにて告知を行います。変更が出た際は、ご迷惑をおかけする形となりますが、よりよくするためなのでご理解のほどよろしくお願いします。
この記事や、対戦研究掲示板の「運営についての意見」スレッドで皆さんの意見、提案をお待ちしております。

# しばし冬眠する予定なので、返信は年明けの5日あたりになるかもしれません。
2007.12.29 Sat
今日は、21時からチャット会を開きます。

# 書いてる途中に日が変わっちゃいました。

適当に雑談でいいと思うのですが、対戦研究掲示板の運営などについて意見を伺うかもしれません。

今回、試用運転してみて気付いたのですが、2週間に期間を設定するとあまりに短い気がしました。
期間設定の仕方、またテーマによって期間を変えたらいいのではないか、など改善点は数多いです。

あと、初めのうちは何から話を進めていいか分かりにくいと思うので、話の種を初めに出して置くのがいいかなとも思いました。

色々、改善の余地はあると思うので、どんどん提案していただけると嬉しいです。



今後、掲示板の方を活性化させようと考えているので、このブログへの書き込み回数は
以前よりも更にスローペースとなる見込みです。

# 更についでですが、今日はコミケに行ってポケモン関係の出し物を見学してみようと思います。
2007.12.11 Tue
対戦について話し合う場についての今後の運営予定を書いておきます。

■お題募集期間 ~12/18(火)

 対戦研究掲示板(仮)を12/15(土)までに設置。
 『お題募集スレッド』『運営についての意見』の二つのスレッドを作成。
 スレッド新規作成機能は使えないようになっている。

 お題募集スレッドでお題を提供してもらいます。
 なるべく、曖昧さがなく話しやすいものがいいかなと思います。
 今回は期間的な問題で私がチョイスを行いますが、
 今回選ばれなかったものも年明けの本格的な運営で、順次選ばれる予定です。

■試用運転期間 12/19(水)~12/29(土)

 お題募集期間で決めたテーマについて色々な意見を出し合います。
 色々な角度から光を当てた話し合いができると有意義かなと思います。
 議論の方向性をどうするかは決まっていないため、
 『運営についての意見』スレッドやこの記事で提案していただけるとありがたいです。

 個人的な考えでは、とりあえず、性急に結論は急がなくてもいいかなと思います。
 まず、初めのうちは色々な意見を思いつく限りだしてみて、
 そこから実戦ではこういうのが役立つよ、とか、
 こういうパーティーと合うんじゃないか……といった応用的な意見を出すのでいいと思います。
 話し合い内容に絡んだ対戦ログなんかがでてくると盛り上がるかもしれませんね。

■チャット会 12/29(土)

 一年の締めということで、(実際の締め日の31日だと家族とかと過ごす人も多いでしょうから)、
 この日にチャット会やってみましょう。

■本格的な運用期間 年明け1/6(日)~

 一つのスレにつき、期間(2週間を予定)を決めて話し合います。
 1週間ごとに新スレを追加していきます。

 ちなみに、マニアックユーザ向けに、ちょっと掘り下げた話専用のスレを作る計画もしております。
 そういうスレには【濃厚】といった感じで、スレにタグ付けして区別しようかなと計画中です。
 【濃厚】印のスレの話し合い期間は、2週間よりも長くなりそうです。

 期間を設けてやるスレ以外にも企画物のスレがあってもいいのではと思っています。
 今の育成論板にあるような、自分で育てたポケモン晒しスレのような割と軽いノリで
 書き込めるスレなんかも、あるといいかなと考えています。
Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。