Re: [問題] 跳蚤馬戲團-模擬或解析?

看板Mathematica作者 (養花種魚數月亮賞星星)時間12年前 (2012/03/17 00:06), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《jurian0101 (Hysterisis)》之銘言: : 正在用我layman的實力努力攻Project Euler : http://projecteuler.net : 其實Mathematica解這平台的一些題目是有長處的,那些大致上只需要形成一個明確的 : data structure,算法也明確化之後,Mathematica的程式碼會(以layman觀點)很優雅 : - - - : 目前有疑問的是這一題 213:Flea Circus : 大意是有一個30 X 30 的大棋盤,每格中各有一隻跳蚤。每次鐘一響, : 跳蚤有平均的機率跳到相鄰的格子(如角落兩格各1/2,邊緣三格各1/3,其餘1/4) : 請問在50響鐘聲之後,沒有跳蚤的格子數量的期望值是多少? next[i_,j_]:=Block[{temp}, temp=Table[0,{x,30},{y,30}]; Which[ i==1&&j==1,temp[[1,2]]=temp[[2,1]]=1/2, i==1&&2<=j<=29,temp[[1,j-1]]=temp[[1,j+1]]=temp[[2,j]]=1/3, i==1&&j==30,temp[[1,29]]=temp[[2,30]]=1/2, 2<=i<=29&&2<=j<=29,temp[[i-1,j]]=temp[[i+1,j]]=temp[[i,j-1]]=temp[[i,j+1]]=1/4, 2<=i<=29&&j==1,temp[[i-1,1]]=temp[[i+1,1]]=temp[[i,2]]=1/3, 2<=i<=29&&j==30,temp[[i-1,30]]=temp[[i+1,30]]=temp[[i,29]]=1/3, i==30&&j==1,temp[[29,1]]=temp[[30,2]]=1/2, i==30&&2<=j<=29,temp[[30,j-1]]=temp[[30,j+1]]=temp[[29,j]]=1/3, i==30&&j==30,temp[[29,30]]=temp[[30,29]]=1/2 ]; N@Flatten[Table[temp[[x,y]],{x,30},{y,30}]] ] (* 轉移矩陣 *) tm=next@@@Flatten[Table[{i,j},{i,30},{j,30}],1]; (* 計算每隻跳蚤在50響鐘聲在各座標的機率,之後求積並做加總 *) ans213=Total[Times@@@(Table[1,{i,900},{j,900}]-Nest[#.tm&,tm,50])] (* monte carlo *) nextsquare[i_,j_]:= Which[ i==1&&j==1,RandomChoice[{{1,2},{2,1}}], i==1&&2<=j<=29,RandomChoice[{{1,j-1},{1,j+1},{2,j}}], i==1&&j==30,RandomChoice[{{1,29},{2,30}}], 2<=i<=29&&2<=j<=29,RandomChoice[{{i-1,j},{i+1,j},{i,j-1},{i,j+1}}], 2<=i<=29&&j==1,RandomChoice[{{i-1,1},{i+1,1},{i,2}}], 2<=i<=29&&j==30,RandomChoice[{{i-1,30},{i+1,30},{i,29}}], i==30&&j==1,RandomChoice[{{29,1},{30,2}}], i==30&&2<=j<=29,RandomChoice[{{30,j-1},{30,j+1},{29,j}}], i==30&&j==30,RandomChoice[{{29,30},{30,29}}] ] (* 所有方格座標 *) flea=Flatten[Table[{i,j},{i,30},{j,30}],1]; DistributeDefinitions[nextsquare,flea]; (* 計算每隻跳蚤在50響鐘聲之後的座標,之後取餘集,實驗1000次,最後求平均 *) Mean@ParallelTable[Length[Complement[flea, Table[Nest[nextsquare@@#&,z,50],{z,flea}]]],{1000}] -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.130.115 ※ 編輯: chungyuandye 來自: 218.173.130.115 (03/17 00:17)

03/17 10:42, , 1F
果然需要真的去模擬。竟然還出現平行運算^^ 戴老師的作
03/17 10:42, 1F

03/17 10:43, , 2F
法值得玩賞。
03/17 10:43, 2F
文章代碼(AID): #1FOsJvfO (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1FOsJvfO (Mathematica)