2012年5月17日木曜日

R&D工場の修理完了までの期間をみつもる


R&D Investment Returnsという今年の1月に立てられたスレがあります。元々このスレは、素のWitPではR&Dに力を注いでも生産開始を1-2ヶ月早めることができただけだったけど、WitP AEではもっと促進できたという発言を目にするので、そのあたりの真相はどうなの?というスレ主さんの疑問で始まりました。レスでは、適切に管理すれば紫電や疾風の生産開始を14ヶ月も早めることができると言う証言や、R&D工場の修理のしくみ、ベータパッチで加えられたエンジン在庫数ボーナス(その後、最新パッチにも取り入れられた)などが触れられました。それらが一通り済んで、 最後に「R&D工場の修理が完全に終わるのはいつなのか知りたい」というレスがついて しばらく放置されていました。ところがこの5月になって、alimentaryさんという方がR&D工場の修理のされ方についての考察をポストして、とても勉強になりました。以下にalimentaryさんのポストとそれに対するレスを紹介します。
alimentary : 私は次のような考え方でこれを推定している。
例えば震電の場合。1941年12月の開戦時から昭和20年12月(震電の生産開始予定月)まで1455日ある。開戦時から震電のR&Dを開始すると、
第787日までにある震電のR&D工場の修理が完了している確率は10%。
第914日までにある震電のR&D工場の修理が完了している確率は50%。
第1032日までにある震電のR&D工場の修理が完了している確率は90%。
つまり、1943年2月までには10%の確率で、1943年6月までには50%の確率で、1943年10月までには90%の確率で修理が完了している。
この推定は、以下のような単純な推測式にしたがっている。
days to full repair = days to availability * (1 - 1/e) 
 修理の完了までの日数=生産開始予定までの日数 x (1 - 1/e)
 eは自然対数の底 2.71828 = lim x->oo ( 1 + 1/x ) ** x 
このスクリプト (このスレのレス #39に添付されている)は、R&Dを開始した日から生産開始可能になる日までの間のある日の、R&D工場の修理済みの部分の大きさの確率分布を計算して、ある日までに修理の完了する確率を示してくれる。
興味深い結果だ。DOA*(1-exp(-1))という式は、解析的な方法で導いたもの?もしそうなら、あなたは古来からの数学に堪能な選民の一人だね。わたしがこれを検討した時には、入力(生産開始予定日と工場の規模)を違えて大量のシミュレーションを行ってみて、初期値がどうであれ結果はすべて生産開始予定までの日数の0.63倍に収斂してゆくこと(別の言い方をすれば、あるR&D工場が完全に修理を要する状態から始まっても、生産開始予定までの日数の37%はR&Dポイントの生産に振り向けることができる)を発見しただけで満足してしまった。あなたの推定式は、わたしの得た結果を確認してくれていて、とてもうれしい。
alimentary : 背後にある論理を再現できているかどうか確認してみると
R&D工場の修理に関する式では、ある日に修理のおきる確率(%)は、対象のR&D工場の規模に、(生産開始予定までの日数)分の1をかけたもの。
生産開始予定まで100日、R&D工場の規模が1 = 1修理される確率は1%
生産開始予定まで100日、R&D工場の規模が30 = 1修理される確率は30%
生産開始予定まで1000日、R&D工場の規模が30 = 1修理される確率は3%
一般に、修理されるのを待ち始めてから生産開始予定までの日数の10%が経過すると、そのR&D工場の10%の修理が済んでいると期待できる。また、修理されるのを待ち始めてから生産開始予定までの日数の1%が経過すると、そのR&D工場の1%の修理が済んでいると期待できる。
つまり、おおざっぱな見積もりとしては、R&D工場が10%まで修理されるのは、 生産開始予定までの日数の90%が残っている時点。
もう少しくわしく見積もると、R&D工場が1%まで修理されるのは、 生産開始予定までの日数の99%が残っている時点。その次の1%が修理されるのは、(生産開始予定までの日数の99%)の99%が残っている時点。
生産開始予定までの日数を10%ごとに区切って考えると、(1 - 1/10) ** 10 となる
生産開始予定までの日数を1%ごとに区切って考えると、(1 - 1/100) ** 100 となる
生産開始予定までの期間を際限なく短く区切ってゆくと、lim x->oo (1 - 1/x) ** x となる
xは非常に大きくなるのでここでは概算として99をつかうと、 0.99はだいたい(1/1.01)と等しいので、(1 - 1/x) はおおよそ 1 / (1 + 1/x)となる。
そうすると、上記の極限は lim x->oo 1/(1 + 1/x) ** x と書き直せ、 1 / lim x->oo (1 + 1/x) ** x と等しくなる。これは 1/e と同じこと。
対象のR&D工場の修理が終了した時点で、生産開始予定までに残された日数の割合は、 修理を始めた時点での生産開始予定までの日数に(1 - 1/e)をかけたものになる。
Q.E.D. 
ありがとう、納得できた。数学的に示されて、この件は解決した。コンピュータに頼らずに、鉛筆と頭だけで仕事のできる人を見るのは清々しい。
あなたのperlのスクリプトは一カ所修正すべき点があるように思う。
# A factory generates research if it was fully repaired at the start of the day. 
$p = (maxsize)/30 は
$p = ($maxsize+1)/30 とした方がいい
"+1"の理由は、生産の公式(すくなくとも私が最後にチェックした時の)は、(RepairedSize+RAND1(30))/30 で、30日ごとに1のボーナスが得られる仕様だから。小さなR&D工場(大きさが30未満のもの)にだけ関連する些細な修正で、いずれにせよ小さな工場は効率が良くないし。
実際的な観点からより興味深いのは、R&Dの成果に、Damianさん(WitP Trackerの作者)の指摘しているエンジン在庫によるR&Dボーナスという新しい仕様を組み合わせるとどうなるかという点だ。
もうひとつ、生産開始予定までの日数($days)が、本当は定数ではなく変数であるという点をスクリプトに反映させるという面倒な課題が残っている。毎日、確率pでR&Dポイントが100になって生産開始予定までの日数($days)から30が引き去られる(実際には各月の日数の違いからさらに些細な変化が生まれる)可能性と、確率(1-p)でそのまま維持される可能性とがある。こういった「量子的」飛躍はR&Dポイントが実際に生産・集積してゆく日数のみならず、確率分布の計算にも影響を与えるだろう。これは、R&D工場の数が1の時($facilities=1)には大した影響はない。というのも、工場が1なら全分布は最終行(maxsize)で考慮されていることになるので。しかし工場の数が複数になると、修理が完了してR&Dポイントを産出し始めている工場が、修理中のR&D工場の修理のスピードに影響を与えるだろう。
「AFBが日本機のR&Dのおかしな点を理解して文句をつけるのには数学の博士号が必要になっちゃう」とレスをつけている人がいるが、そんなに難しいことじゃない。alimentaryさんの
結論で実戦に役立つ点は、完全に未修理の状態のR&D工場の修理が完了するのに必要な日数が推定できるようになったこと。修理にかかる日数の平均が生産可能開始までの日数の63%ということは、残りの3分の1強をR&Dポイントの産出につかえるということ。これは概算に過ぎず、個々のR&D工場ごとに修理完了までの日数がこの63%を中心にかなりばらつくものと思わなければならない。しかし、alimentaryさんの提供してくれたスクリプトの算出する確率分布を使えば、もっと複雑な疑問にも答えを与えることができる。例えば、ある特定の時点である特定のR&D工場の修理がおきる確率はどのくらいかなど。また、一部だけ未修理のR&D工場にも応用できる。
あのスレですでに言われているが、エンジン在庫数ボーナスのような新たな仕様や、飛行機のアップグレードパスに沿えばR&D工場を未修理の状態に戻すことなく機種変更できる特徴(チートとよぶべきかも)により、素のWitPに比べてWitP AEでのR&Dはずっと容易になっている。スレ主さんの言うのとは違って、自分が何をすべきなのかを理解していれば、素のWitPのR&Dでもかなりの成果をあげることができたけど!
alimentary : あなたのコメントは二つとも適切なものだ。修正を施した。しっかりした検証が済んだとまではいえないが、お使いになれるようここに添付しておく。前のレスに添付してあったものは削除した。
あなたのいう通りだとすると、大戦後期の戦闘機の開発に数工場を振り向けることには大きな意味があることになる。そういった機種の研究の足取りはゆっくりだが、それだけに経済に対する悪影響は小さいし、なにより37%という研究期間は大きい。少数の機種ならかなり生産開始を早めることができそうだ。そうだとすると、四式戦疾風はその対象としてはずせないし、ほかの大戦後期の戦闘機(海軍機がいいかな)のR&Dにあてるのに充分な数のR&D工場があるように思える。
あなたの意見に賛成だ。素のWitPで私がやっていたこともそれで、計画を立て、早いうちから開発を開始し、そして... 辛抱強く待つ。とても辛抱強く。はじめのうち、大戦後期の機種の工場の修理のテンポはいらつかせるほどゆっくりだが、あなたのいう通り、サプライの消費が少なくて済むという利点もある。
ところで、このゆっくりさは、alimentaryさんのつくってくれた確率分布の表からも明らかだ。あの表のエントリーごとの$sizedist[D][S]という数値は、修理開始後第D日目の規模Sの工場に修理の起きる確率を精確に表している。数学に対してかわいいといってもいいのであれば、このスクリプトはほんとにかわいいといいたい。
素のWitPの時代から例をとってみる。四式戦疾風の研究を生産開始予定の28ヶ月前から始めると、28x0.37ヶ月、安全のために切り捨てると10ヶ月をR&Dポイントの算出される期間と考えることができる。規模30のR&D工場を5つ、四式戦疾風の研究に振り向けると、2ヶ月ごとに300R&Dポイントの産出を期待でき、2ヶ月ごとに生産開始が3ヶ月早まることになる。これを2回繰り返すと、10ヶ月のはずだった研究期間が終わる(訳注:2ヶ月の研究を2回で合計6ヶ月早まるので2x2+6=10)。4ヶ月の研究で生産開始が半年早まるわけで、悪くない話だと思う。もちろん、これは理想的に進んだ場合のことだが。理想的な条件の実現を妨げる要因として考えうるのは、本土でのサプライの逼迫がある(R&D工場のある全根拠地に10000トンのサプライを準備しておかないと、R&Dの進行に悪影響を及ぼす)。
さらに、大戦後期の機種の開発に重大な悪影響を及ぼすもう一つの重大な問題がある。R&Dの完了する前に、連合軍側プレイヤーが四発爆撃機をR&D工場のある根拠地を航続圏内におさめるように配置してしまうことだ。素のWitPで積極的な連合軍プレイヤーは硫黄島定跡やサハリン定跡をつかって、1943年後半には戦略爆撃を始めることができた。
alimentaryさん、スクリプトの修正をしてくれてありがとう。正直なところ、あなたの加えた修正の正否は評価することができない。$facilities=1の場合はうまく処置してくれるがそれだけで、それより多い場合については私の直感は違うといっている。
私は厳密な解($days変数それ自身の確率分布表も、工場の修理状況表と同時に算出される)について考えてみた。でも、これは複雑すぎて私の手には負えない。
まあ、三次的な要素とまではいわないまでも副次的な影響しか与えない要素、特にR&D工場の数がとても多い機種にのみ関連するようなことがらについて追求しようとするのは重要ではなく、そうすることには学術的な面白さしかないと個人的には思う。実用的な観点からは、1工場の確率分布が判明すれば充分だ。あなたの書いてくれたスクリプトはR&D工場1本が対象なら数学的に正しく完璧で、 連合軍側と日本側とのどちらに興味がある人にも役立つ解を与えてくれる。例えば、ある期間にR&D工場の修理にどのくらいのサプライが消費されるのかを精確かつ容易に知ることができる。だから、いつかはTrackerのR&D工場の設定をする画面に、R&D工場の修理による毎日のサプライ消費量の予測が組み込まれる日がくるかもしれない。
日本の飛行機のR&Dの仕組みに関しては、マニュアルに明解な解説がないことから謎に包まれていました。しかし、完全に修理の済んだR&D工場がどんな風にR&Dポイントを生み出すのかについては、ベータパッチ(その後、最新のオフィシャルパッチv1.01.08r9になりました)の開発にあたってMichaelさんからの発言があって、かなり明らかになっています。それについては、日本の飛行機のR&Dの仕組みというエントリーで紹介したので、そちらをご覧下さい。
R&D工場がR&Dポイントを産出するためには、その工場すべての修理が完了していることが必要です。開発済みの機種の生産工場やエンジンの生産工場(開発済みのエンジンもR&D中のエンジンも)の修理は一日に規模1ずつ進んでゆきます。しかし飛行機のR&D工場の修理がどんな風に進むのか、マニュアルにも記載がなく、またわたしの読んだ範囲ではフォーラムにもDevの人からのはっきりした説明がこれまでなかったと記憶しています。ただし、 R&D工場はその規模に関わらず修理にかかる平均的な日数は同じ(規模0(30)の工場も規模0(2)の工場も同じ日数で修理が完了する)という結果が、検証を行った人から報告されていました。
R&D工場の修理のしくみについてまったく見当がつかないようだと、alimentaryさんも上記のような議論をできなかったろう、しなかったろうと感じます。しかも、うるさ方の少なくないフォーラムの常連さんたちからも、alimentaryさんの結論に対して異論はつけられていませんから、おそらく、R&D工場の修理のしくみについては、このフォーラムのベテランたちの間ではコンセンサスがあるのだろうと感じます。そのコンセンサスというのは、alimentaryさんの議論の基礎である「R&D工場の修理に関する式では、ある日に修理のおきる確率(%)は、対象のR&D工場の規模に、(生産開始予定までの日数)分の1をかけたもの」という仮定でしょう。マニュアルにもない、Devチームから正解と確認されたこともないこの仮定が無理なく受け入れられている理由は、素のWitPではこの仮定に沿ってR&D工場が修理されていて、Devチームもそれを確認していたからではないかと、私は想像します。私自身は素のWitPをプレイしたことがなく(所有してはいますが)、また素のWitPのフォーラムを覗いたこともないので、その推測が正しいのかどうかを確認できませんが。
R&D工場の修理だけでなく、戦闘の解決などに使用されるWitP AEのアルゴリズムの少なからぬ部分が、素のWitPで使われていたものを流用していると信じられています。また、「R&D工場の修理に関する式では、ある日に修理のおきる確率(%)は、対象のR&D工場の規模に、(生産開始予定までの日数)分の1をかけたもの」という想定は、R&D工場はその規模に関わらず修理にかかる平均的な日数は同じという検証結果とも矛盾しません。こういった状況証拠からも、alimentaryさんの議論は正しいのだろうと感じます。
ともあれ、修理にかかる日数の平均が生産可能開始までの日数の63%で、残りの37%をR&Dポイントの産出につかえそうな見込みだという知識は非常に重要だと感じます。 生産開始予定までの日数が短いものについては別にしても、レスをつけていた人がいますが、四式戦疾風や震電のような大戦後期~末期の機種のR&Dについては特にそうですね。うちでも五式戦疾風のR&Dは12月上旬から始めていましたが、まだ震電のR&Dを始めていませんでした。ちょうど二式戦・Ki-44-IIa Tojoの生産開始が昭和17年7月からになったので、これの研究をしていたR&D工場を震電に変更しようかと思います。
添付されているパールのスクリプトはtxtファイルなので中を読めるのですが、私にはチンプンカンプンですし、どうやったら利用できるのか見当がつきません。詳しい方、教えてください。

0 件のコメント: