Math Battle [ 0137: 0133 ふたたび ]

[ 0137: 0133 ふたたび ]


[ 丘品花志先生の出題の復習 ]

図に示すように 1 辺の長さが 1 の立方体の上面の対角頂点に 2 匹の虫がいます。 これらは同時に 3 方向 (隣の頂点のいずれか) に動き続けるものとします。 移動途中は無視して、2 匹が頂点にいる状態での平均距離を長時間にわたって求めると どういう値になるでしょうか?


[ 浅見多絵さんの回答 ]

前回の回答は間違っていましたので、 湯会老人にアドバイスをいただきながら再度挑戦しました。

同一平面上の対角頂点に 2 匹がいる状態からスタートしますと、 縦横上下にしか動けないチェス盤の世界みたいなものですから:

 ■ 距離 1 の状態 (隣の頂点同士) はありえません。
 ■ 距離 sqrt(3) の状態もありえません。

初期状態 (距離 sqrt(2)) からの次の一手では 距離 0 (同一頂点) になる場合と位置は違えど 距離 sqrt(2) を維持する状態がありますが、 距離 sqrt(2) の確率のほうが 3 倍になります。

距離 0 になりますと、次の一手では距離 sqrt(2) にしかなりません。

上記から、距離 sqrt(2) の状態のほうが多いことがわかりますが、 確率計算を頭でやると混乱しますので乱数を使ったシミュレーションで 統計をとってみました。結果は以下のとおりです。

Average distance: 1.0603
(0: 25.03%) (1: 0.00%) (sqrt(2): 74.97%) (sqrt(3): 0.00%)

距離 0 と距離 sqrt(2) の出現頻度の比は 1:3 でした。
これを式であらわしますと:

平均距離 = (1*0 + 3*sqrt(2))/(1 + 3) = 1.06066...

Perl スクリプトのソースコードは以下のとおりです。


#!/usr/local/bin/perl

$N = 1000000; # 試行回数。
$sum0 = 0;
$sum1 = 0;
$sum2 = 0;
$sum3 = 0;
$sum = 0;
# 初期状態。
$x1 = 0;
$y1 = 0;
$z1 = 1;
$x2 = 1;
$y2 = 1;
$z2 = 1;

MAIN: {
 my $d;
 for ($i=0; $i<$N; $i++) {
  $d = abs($x1-$x2)+abs($y1-$y2)+abs($z1-$z2);
  if ($d == 0) {$sum0++}
  elsif ($d == 1) {$sum1++}
  elsif ($d == 2) {$sum2++}
  else {$sum3++}
  $sum +=
   sqrt(($x1-$x2)**2+($y1-$y2)**2+($z1-$z2)**2);

  # 2匹の次の位置を求める。
  ($x1,$y1,$z1) = &get_next($x1,$y1,$z1);
  ($x2,$y2,$z2) = &get_next($x2,$y2,$z2);
 }
 printf("Average distance: %.4f\n", $sum/$N);
 printf(
  "(0: %.2f%) (1: %.2f%) (sqrt(2): %.2f%) (sqrt(3): %.2f%)\n",
  100*$sum0/$N, 100*$sum1/$N, 100*$sum2/$N, 100*$sum3/$N);
}

sub get_next() {
 my ($x,$y,$z) = @_;
 my $choice;
 my $ran = rand(1);

 if ($ran < 1/3) {
  $choice = 1;
 } elsif ($ran < 2/3) {
  $choice = 2;
 } else {
  $choice = 3;
 }

 if ($x == 0) {
  if ($y == 0) {
   if ($z == 0) {
    if ($choice == 1) {$x+=1}
    elsif ($choice == 2) {$y+=1}
    else {$z+=1}
   } else {
    if ($choice == 1) {$x+=1}
    elsif ($choice == 2) {$y+=1}
    else {$z+=-1}
   }
  } else {
   if ($z == 0) {
    if ($choice == 1) {$x+=1}
    elsif ($choice == 2) {$y+=-1}
    else {$z+=1}
   } else {
    if ($choice == 1) {$x+=1}
    elsif ($choice == 2) {$y+=-1}
    else {$z+=-1}
   }
  }
 } else {
  if ($y == 0) {
   if ($z == 0) {
   if ($choice == 1) {$x+=-1}
   elsif ($choice == 2) {$y+=1}
   else {$z+=1}
  } else {
   if ($choice == 1) {$x+=-1}
   elsif ($choice == 2) {$y+=1}
   else {$z+=-1}
  }
 } else {
  if ($z == 0) {
   if ($choice == 1) {$x+=-1}
    elsif ($choice == 2) {$y+=-1}
    else {$z+=1}
   } else {
    if ($choice == 1) {$x+=-1}
    elsif ($choice == 2) {$y+=-1}
    else {$z+=-1}
   }
  }
 }
 return($x,$y,$z);
}


[ 丘品花志先生のコメント ]

多絵さん、見事正解です。
いろいろ勘違いしやすい問題ですが、お見事 !!!

[ 0141: 次の記事 ]

[ 0140: 連想配列を使いました ]

[ 0139: 積み重ねた半円の面積 ]

[ 0138: 0137 の補足 ]

[ 0137: 0133 ふたたび ]

[ 0136: 出題と回答の振り返り ]

[ 0135: 3乗根の和 ]

[ 0134: 難問ふたたび ]

[ 0133: 立方体頂点上の2匹の平均距離 ]

[ 0132: 直角三角形の辺上の正三角形 ]

[ 0131: 円の中の2個の正三角形 ]

[ 0130: 2個の同心円と接線 ]

[ 0129: 長方形の中の2個の半円 ]

[ 0128: 半円の中の円 ]

[ 0127: 三角形の中の辺x ]

[ 0126: xy2次方程式の整数解 ]

[ 0125: 湯会老人の近況報告 ]

[ 0124: 真実の愛は無限にある? ]

[ 0123: AIで素敵な曲を作るのは可能? ]

[ 0122: 雪が降りはじめたのはいつ? ]

[ 0121: ドラゴン曲線の描画例 ]

[ 0120: 前の記事 ]

[ トップページへ ]