Re: [問題] 程式跑的"武器衝星期望張數"怪怪的

看板C_and_CPP作者 (-858993460)時間13年前 (2011/04/15 19:57), 編輯推噓7(7023)
留言30則, 8人參與, 最新討論串3/3 (看更多)
※ 引述《kyoiku (生死間有大恐怖)》之銘言: : ※ 引述《kyoiku (生死間有大恐怖)》之銘言: : : 某遊戲中武器衝星規則如下: : : 1. 武器初始 0 星,每次衝星需消耗一張武卷。 : : 2. 武器 0 星衝 1 星之機率為 1/2。 : : 3. 衝星成功則武器星數變為 1 星,若否則仍是 0 星。 : : 求武器 0 星衝 1 星平均需用幾張武卷? : 想請教大家一個問題。 : 我們都知道遊戲中武器衝星可以一直衝上去,例如承上面 3 點還可以再有: : 4. 武器 1 星衝到 2 星之機率為 40%,失敗則降為 0 星。 : 5. 武器 2 星衝到 3 星之機率為 30%,失敗則降為 1 星。 : 6. 武器 3 星衝到 4 星之機率為 20%,失敗則降為 2 星。 : 7. 武器 4 星衝到 5 星之機率為 10%,失敗則降為 3 星。 : 想求武器從 0 星衝 5 星平均需用幾張武卷? : 當然這用數學可以準確算出,但是牽涉到機率論中的馬可夫鏈和線代對角化。 : 我算過,但對角化特徵值數字不好要用 MATLAB 算近似值, 其實數學並不難 而且用不到特徵值 令由 +i 起到 +5 止需要 Ei 張武卷 (用 +i 我比較熟 XD) 那麼我們可以列出 E0 = 1 + .5 E0 + .5 E1 (一次之後有 0.5 在 +0 有 0.5 在 +1) E1 = 1 + .6 E0 + .4 E2 (etc.) E2 = 1 + .7 E1 + .3 E3 E3 = 1 + .8 E2 + .2 E4 E4 = 1 + .9 E3 + .1 E5 E5 = 0 解聯立方程可得 E0 = 2191/3, E1 = 2185/3, E2 = 4337/6, E3 = 2120/3, E4 = 637 (因為這矩陣是三對角線矩陣 比較單純 我在一張提款機收據的背面做 LU 分解就做得出來...) 2191/3 ≒ 730.33333 所以前篇推文做的 730 其實很準 XD 話說回來 這樣一分析 寫數學解的程式就很方便 只要任何一個可以解線性聯立方程的程式都行 -- いああオレたちには見えてるモノがあるbきっと誰にも奪われないモノがあるはずさ開口一番一虚一実跳梁跋扈形影相弔yL羊頭狗肉東奔西走国士無双南柯之夢 歪も ぶ  意味がないと思えるコトがあるPきっとでも意図はそこに必ずある んの く 依依恋恋空前絶後疾風怒濤有無相生H急転直下物情騷然愚者一得相思相愛 だが ろ 無意味じゃない6あの意図 恋た で 有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.131

04/15 20:42, , 1F
我算出來的理論張數是 719.1447
04/15 20:42, 1F

04/15 20:54, , 2F
真是一群魔人....XD
04/15 20:54, 2F

04/15 21:16, , 3F
E4 = 1 + .9 E3 + .1 E5 好似怪怪的?因為到了e5不用退下來
04/15 21:16, 3F

04/15 21:17, , 4F
kyoiku 的 transition matrix 應該是對的
04/15 21:17, 4F

04/15 21:19, , 5F
但求解不知道需不需要用到 eigen,我的話應該會跟你一樣
04/15 21:19, 5F

04/15 21:20, , 6F
直接解聯立 @@
04/15 21:20, 6F

04/15 21:22, , 7F
很直覺是這樣算
04/15 21:22, 7F

04/15 21:38, , 8F
原來730是對的,我還想說為什麼算不出719...XDDD
04/15 21:38, 8F

04/15 22:11, , 9F
老實說我看不懂LPH大的解法,@@。我對期望張數的定義是
04/15 22:11, 9F

04/15 22:12, , 10F
(剛好用N張衝到+5的機率)乘以(N),再把 N 從 1 加到無窮大
04/15 22:12, 10F

04/15 22:13, , 11F
所以期望張數是一個無窮級數的和
04/15 22:13, 11F

04/15 22:18, , 12F
把星數想成不同狀態, 個別有增加/減少兩種可能, 再加
04/15 22:18, 12F

04/15 22:19, , 13F
上遞迴關係來推
04/15 22:19, 13F

04/15 22:34, , 14F
這是我的簡單程式 http://pastie.org/1797634
04/15 22:34, 14F

04/15 23:55, , 15F
回三樓 所以 E5=0 啊
04/15 23:55, 15F

04/16 00:00, , 16F
kerker 對喔 我傻了 XD
04/16 00:00, 16F
早上起來看到被版主結案了.... 沒看到第三篇不知道原 PO 進度如何 不過還是照著原 PO 的思路做一次給他看 http://w.csie.org/~b94102/math/Math38.pdf 這樣應該能讓原 PO 找出他的計算錯誤在哪裡了 (他的方法思路上當然沒問題 單純只是計算問題而已) 再討論下去離版題就太遠 就此打住吧 ※ 編輯: LPH66 來自: 140.112.28.92 (04/16 09:18)

04/16 13:19, , 17F
我有修過simulation的課,剛好可以解決你的問題。
04/16 13:19, 17F

04/16 13:20, , 18F
我們用的隨機數剛好介於0~1
04/16 13:20, 18F

04/16 13:22, , 19F
ex:你要的機率是0.3,Ans:if(rand()<0.3) else...
04/16 13:22, 19F

04/16 13:23, , 20F
要隨機數的程式碼的話寄站內信給我就好了
04/16 13:23, 20F

04/16 13:25, , 21F
附加說明,我們是先寫好程式碼,然後#include拿來用
04/16 13:25, 21F

04/16 13:26, , 22F
機率的模擬已經有人在研究了。推ROSS的simulation
04/16 13:26, 22F

04/16 13:27, , 23F
解決類似問題你可以用機率問題的方式解決
04/16 13:27, 23F

04/16 13:28, , 24F
因為我覺得你的事件就是屬於幾何分布(不完全)
04/16 13:28, 24F

04/16 17:46, , 25F
一個遊戲能玩成這樣子!這個國家實在是非常的強
04/16 17:46, 25F

04/16 21:56, , 26F
原PO好像隱約透露自己的年齡 :P
04/16 21:56, 26F

04/16 23:52, , 27F
To LPH66:我們的方法都一樣,只有用matlab作計算的部份不同
04/16 23:52, 27F

04/16 23:53, , 28F
也許是我鍵入數字時打錯,不過也無從查起了,@@
04/16 23:53, 28F

04/16 23:54, , 29F
你的方法我後來有看懂了,就是+1用了一張後有0.5的機會要再
04/16 23:54, 29F

04/16 23:55, , 30F
用要 E0 張才會+5,有0.4的機會要再用E2張才會+5
04/16 23:55, 30F
文章代碼(AID): #1Dg3AVxC (C_and_CPP)
文章代碼(AID): #1Dg3AVxC (C_and_CPP)