2013年10月29日火曜日

水平線までの距離

MA方面の艦これユーザ向けゲームのコミュニティでは砲戦距離の実際が意見交換されているところ。思い立って計算してみる。

大和の艦橋の高さは諸説あるらしい。高めの説をとって50メートルとしよう。

海上の高さ50メートルの位置から地球の丸みによって見える水平線までの距離は図のように計算できる。余弦を二次の項までで切っているが、まあ目くじら立てるほどの誤差は出ない。




大体25キロほど。ほう、議論されている実際の砲戦距離が出た。50メートルが40メートルでも平方根の作用で大差ない。

水平線ぎりぎりだと遠近の測定は難しくなるはずだから、敵艦の艦橋が高くてもう少し遠くまで観測できたところで、まともな弾着修正ができるかどうか、なるほど疑問ではある。

頭ではわかっていても計算してみるものだ。

高雄型あたりの艦橋が大和型の半分程度として、水平線は\(1/\sqrt{2}=0.707...\)倍程度だから、17キロくらい。

身長が1メートルとして、大体6キロくらいか。以外に近い。

2013年10月14日月曜日

作戦級で局面の数を評価する

作戦級のウォーゲームの局面の数を評価しようと思います。可能な場合の数との違いを考えるために囲碁の場合を参考にしましょう。

囲碁の局面を単純に考えると(19x19)の階乗は361の階乗です。361の階乗は361の361乗におよそ等しくて、100の500乗 くらい。10の1000乗です。同型反復があって増えますがこれを無視。一方、決着のつく局面数が10の361乗といわれており、実質的な局面の乗数は単純な計算結果の3割程度とみ ることにします。

作戦級の場合、ユニット100個と移動力5、マップは十分広いとします。一個のユニットは半径5ヘックスの移動ができるからおよそ60ヘックスの移動可能な行き先があります。一ターンで60の100乗。10ターンある とすれば60の1000乗です。戦闘が一ターンで10回起きて1d6なら一回ごとに6通りあって一ターンで6の10乗、10ターンで6の100乗。結局は 10の1500乗くらいが単純な局面の数。戦線ができると劇的に減るでしょうし、乗数を1/3以下に見込むと、100ユニットで囲碁と同じくらいでしょうか。
最近のコンピュータ囲碁はモンテカルロ法を援用してアマ高段くらいは打ちます。9x9の狭い盤面だとプロ並みです。作戦級に応用するとしたら120シリーズくらいまでは何とかなるのかもしれません。40駒くらいの規模だと誰かが本気で研究したらいい線までいくのではないかと。

2013年8月20日火曜日

AAMの速度変化(解説)

読む人はあまりいないと思いますが書いてみます。SLGとは全く関係ありません。

質量mの物体の位置が時間tの関数として\(x(t)\)に沿って運動するとき、ニュートンの運動方程式に従います。ニュートンの運動方程式とは、加速度をaとし、物体にかかる力をFとして、\(ma(t)=F(t)\)です。aもFも時間の関数としておきます。

加速度は速度の時間微分で、速度は位置の時間微分です。つまり
\[a=\frac{d^2x}{dt^2}(t)\]
から
\[m\frac{d^2x}{dt^2}(t)=F(t)\]
です。

ミサイルの場合、F(t)は推力と空気抵抗ということにします。推力が一定値 F であるとして、空気抵抗は速度の二乗に比例するものとすれば
\[m\frac{d^2x}{dt^2}(t)=F-r v(t)^2\]
です。rは比例定数です。rとFとmはミサイルの種類によってそれぞれ定まるものです。

さて、\( v(t)=dx/dt \)ですから左辺を vで書き直すと
\[m\frac{dv}{dt}(t)=F-r v(t)^2\]
vだけの式になります。

右辺はvと定数だけの式だけですから、変数分離形の微分方程式です。

ニュートンの凄みは、物体の運動を位置の関数の微分方程式で書けることに気がついて、微分積分学を作り上げてしまったところにあります。

さて、簡単のためにm=F=r=1としてv(t)=vと書いて
\[\frac{dv}{dt}=1- v^2\]
この微分方程式を解きます。両辺を\(1-v^2\)で割りましょう
\[ \frac{1}{1-v^2}\frac{dv}{dt}=1\]

両辺をtで積分すると、Cを積分定数として
\[ \int \frac{1}{1-v^2}\frac{dv}{dt}dt=t+C\]

置換積分の公式から、左辺はvでの積分になります。
\[ \int \frac{1}{1-v^2}dv=t+C\]

左辺の積分には、次の関係式を使います。
\[\frac{2}{1-v^2}=\frac{1}{1-v}+\frac{1}{1+v}\]

これから、左辺の積分は次の通りに計算できます。
\[ \frac{1}{2}(-\log|1-v| + \log|1+v| )=\frac{1}{2}\log|\frac{1+v}{1-v}|\]

結局、ニュートン方程式から得られた微分方程式から次の関係式を得られました。
\[ \frac{1}{2}\log|\frac{1+v}{1-v}|=t+C\]

vについて整理すると、
\[ \log|\frac{1+v}{1-v}|=2(t+C)\]
\[ \frac{1+v}{1-v}=e^{2(t+C)}\]

\(D=e^{2C}\)とおいて、
 \[ \frac{1+v}{1-v}=De^{2t}\]

結局、次のようにv=v(t)を得られました。
\[ v(t)=\frac{De^{2t}-1}{De^{2t}+1}\]


2013年8月18日日曜日

AAMの速度変化

いりやっくさんのMAの日記(MA会員のみ)から。AAMの速度変化はポアソン分布の密度関数のような感じになるようです。じゃあということでニュートンの運動方程式を立ててみます。(符号等が間違っていたので諸処修正)

初速というか母機の速度を\(v_0\)とします。高校の物理で習ったように、高速で運動する物体の空気抵抗は速度の二乗に比例するとします。質量も空気抵抗の比例定数も正規化して1としましょう。発射時を時刻0, 推力\(a\gt 0\)は時刻\(t_0\)まで一定で、その後は0になるものとします。

速度を\(v(t)\)で表すと、時刻0から\(t_0\)までは次のニュートンの運動方程式が成立します。

\[
\frac{dv}{dt}(t)=a-v(t)^2
\]

変数分離形なので解くことにします。まず
\[
\frac{1}{2}\log\frac{\sqrt{a}+v(t)}{\sqrt{a}-v(t)}+C=t
\]
(絶対値は省略。最後に符号を調整。)

整理して、
 \[
v(t)=\sqrt{a}\frac{De^{e^{2t}}+1}{De^{2t}-1}
\]
ここで、\(D\)は\(v_0\)から次のように定まります。
\[
D=\frac{\sqrt{a}+v_0}{\sqrt{a}-v_0}
\]
\(t\)が正負の無限大で\(\pm\sqrt{a}\)に収束します。これが推力\(a\)で飛翔し続けた時の限界速度です。が、今は\(t_0\)で推力が止まるのです。

\(t_0\)以降は次のようになります。
\[
\frac{dv}{dt}(t)=-v(t)^2
\]
\[
\frac{1}{v(t)}-\frac{1}{v(t_0)} =t-t_0
\]
これより、
\[
v(t)=\frac{v(t_0)}{v(t_0)(t-t_0)+1}
\]

\(t_0\)では滑らかな形になりませんが、推力を細かく与えると解けるかどうかわからなくなりますのでここまで。

a=1, t0=2, v0=1/2 でグラフを描くとこんな感じです。t=t0で推力が不連続に変わりますので、グラフは滑らかになりません。x軸は0から10までに1/100します。これを描くのに使ったMATLABクローンのフリーソフトoctaveのソースをつけます。

a=1;
v0=1/2;
t0=2;
function y=v(x,a,v0,t0)
d=(sqrt(a)+v0)/(sqrt(a)-v0);
if( x < t0 )
y=(d*exp(2*x)-sqrt(a))/(d*exp(2*x)+sqrt(a));
else
y=1/(x-t0+1/((sqrt(a)*(d*exp(2*t0)-1))/(d*exp(2*t0)+1)));
endif
endfunction

z=[1:1000];

for x=[1:1000];
z(x)=v(x/100,1,1/2,2);
endfor


plot(z)


2013年6月3日月曜日

Panzer Leader 対戦その2

5-8ターン、粘っていた北方の都市も壊滅し、独軍の突破も確実となって投了。

Panzer Leader 対戦 その1

コマ送りで前半を再現します。

1-4ターン、北方(奥)で突破され、南方(手前)では守るべき都市に突入される連合軍。


2013年3月16日土曜日

電撃戦1939 (CMJ)

 サッポロ辺境伯さんとの対戦時に初期配置のスタック超過をどうするか、ヘラ要塞に何も配置しなくてよいのか、疑問が出たのでコマンドマガジン編集部に質問して回答をもらいました。古いゲームへの曖昧な質問に答えて頂いてありがとうございました。

質問1
ヘックス2733には独機械化師団3個と非機械化師団1個を初期配置します。これではスタック制限を超過しますので、第一ターンの移動で超過を解消するようにプレイしました。この解釈で正しいでしょうか、あるいは初期配置が異なるのでしょうか。

回答
「機会化師団 諸兵科連合部隊「1L」の初期配置情報が間違っておりました。正しくは
諸兵科連合部隊1L 2733 → 2634
となります。」

質問2
ヘックス1125のヘラ要塞に初期配置するユニットがありません。3530配置の海軍ユニットを置くのだろうと解釈してプレイしました。ヘラ要塞に初期配置するユニットがないと、特別ルール6.10「ヘラ要塞の降伏」に意味がなくなるように思います。この解釈は正しいでしょうか。それとも、ヘラ要塞の初期配置なしでよいのでしょうか。

回答
「エラッタや変更は見つからないのですが、海軍部隊が内陸に配置されるのは不自然ですし、cyberboardの初期セットアップなどを確認すると、ヘラ要塞の一部に含まれる町グディニャに海軍部隊を配置していますので、ご指摘の通り、ヘラ要塞(1026)に配置してプレイしてください。」

なるほど、cyberboardもチェックするべきなのかと再認識しました。vassalモジュールがなさそうだったのであきらめていたのです。


対戦前に参考にしたサッポロ辺境伯さんと舞方雅人さんとのリプレイはこちら。
http://masatomaikata.blog55.fc2.com/blog-entry-1930.html
http://www.mustattack.com/?m=pc&a=page_fh_diary&target_c_diary_id=11105

ゲーム以外の記事が「パリ陥落1940」同様に充実しているのは、本家コマンドマガジン由来だからでしょうか。 何人かでパリ陥落1940の1939年シナリオと並行にプレイして、片方の戦況に応じて独軍が引き抜かれたり増援が来なかったりする、というのはどうだろう。WaWの次の号はそんな感じなんだろうか。

2013年3月1日金曜日

Google Map ヘックス追加




Ardenne, Dec. 1944

Google Mapの座標系は緯度と経度を指定する。地球だから当然か。だから、六角形を描くのは難しい。そういうことで球面上の「正方形」を互い違いに置いて代用する。


ポリゴンにしてしまうと、地図上へのマウスクリックイベントを拾えないようだ。ヘックス番号をポリラインに付与できるだろうか。



2013年2月23日土曜日

Google Map で戦況図もどき




Ardenne, Dec. 1944

Google Mapを使って戦況図じみたものを作ろうとした。一年ほど前に作ったものをBlogger向けに直したもの。外部ファイルのJavaScriptをhtml内に展開してAjaxを外すだけで済む。思ったより楽だった。マップはアルデンヌ周辺。部隊名を左側の入力ボックスに入れて、独軍か連合軍かを選択、部隊規模を選択して、マップをクリックするとマーカーがZOCとともに表示される。マウスオーバーで部隊名表示。NATO記号を使おうと思えば使えるだろうけれど、挫折。

部隊の情報はJSON形式で右側のテキストエリアに反映する。これをコピーしておけば後から再利用できるはず。

デフォルトには、実際の師団を記述したものを入れている。WaW #3 The Bulge を参考にした。これ、うまく使ってゲームにできないだろうか。