骰子遊戲 - 拼圖

Table of Contents

我的想法是,算期望值,如果放在十位數的期望值比放在個位數高,

就放十位數,反之亦然。

EX:

現在你已經得了 100 分,你還剩 1 個十位數、1 個個位數可以放,

當你擲到 3 的時候,你應該要放在哪裡?

1. 放在個位數 => (103 * 4 + (10 + 20 + 30 + 40)) / 6 = 85.33

2. 放在十位數 => 130 + (1 + 2 + 3 + 4 + 5 + 6) / 6 = 133.5

所以應該要放在十位數。#

令函數 E(tens , ones , point , score) 代表:

還有 tens 個 十位數、 ones 個 個位數,要放的點數是 point ,

現在的分數是 score 時,所得分數的期望值

當 tens, ones > 1 時

E(tens , ones , point , score) =
max{
Sum[E(tens - 1 , ones , 1 ~ 6 , score + point * 10)] / 6 ,
Sum[E(tens , ones - 1 , 1 ~ 6 , score + point)] / 6
}

如果要建表的話,最多有 5 * 5 * 6 * 151 格 (tens , ones = 0 ~ 4,

point = 1 ~ 6 , score = 0 ~ 150)

很快就可以算完了,這樣算出來的期望值是 118.621 ,比 100 大一些些。

實測 10000 次,平均 118.7 ,爆掉 1077 次 (爆掉的算 0 分)

Code: http://codepad.org/3Wpwdswj

主要的重點是 decide 這個函數,把現在的狀態傳入,傳回兩個值:

1. 選擇 (個位數 或 十位數)
2. 在這種選擇下的期望值
--------------------------------------------------------------------------

如果把電腦的選擇記下來,會得到這個表:

http://codepad.org/R3hdLwuc

這裡已經把沒什麼好選的(只能選十位或只能選個位)或是怎麼選都是爆掉的去掉了,

還是有大約 200 條 "規則" ,不過還看不出來能不能簡化。

(畢竟當人在玩的時候不太可能看著手上的200條規則來玩,

理想上是把規則化簡到十條以內)

--

All Comments

Ida avatarIda2010-12-21
好像一個有兩百條規則的自動機。最佳化問題真有趣。
Dorothy avatarDorothy2010-12-25
E函數的角色像選擇函數。最佳化=改參數使E最大化。
Belly avatarBelly2010-12-25
放在個位數的那行應該是(103*4+10+20+30+40)/6 = 85.3333
Adele avatarAdele2010-12-29
期望值耶,對耶,期望值耶! 我怎麼沒想到 = ="