What have you found for these years?

2011-07-05

〈磔刑の聖女〉& probability monad

這兩天一直在放《Märchen》的第八首〈磔刑の聖女〉。
我很喜歡前半段的一些旋律。或是更精確地說,是 00:53 ~ 01:30
這一段吧,不知道是誰唱的。感覺很難形容,以後再慢慢想...
不限於這片的這一段,之前也有聽過不少會給我這種感覺的。

唉,然後每次聽這個就會想到金頂電池爆炸弄壞我的限定版盒子...
接著又會想到之前有幾張也想收普通版,因為覺得圖滿好看的,
而限定版比較醜。

然後昨天還前天,我才忽然想起來,之前買的 live DVD 好像還沒看完...
怎麼,好像找不到時間看?連我看到第幾片都忘記了 :/

* * *

確定的是昨天本來想打一下 GuildWars, 因為實在很累沒什麼力氣
弄別的。結果才剛準備開始打,上個廁所在想 Learn You a Haskell
for Great Good!
裡面的 Probability monad, 手癢忍不住就關掉
GuildWars 來寫一次看看。因為其實那時我也沒很想打 GuildWars...
目前要打的進度讓人有點提不起幹勁,因為很難打,都不能打 hard
mode, 不然失敗率太高了。

而 probability monad 我也想寫很久了。那乾脆就心血來潮一下吧!
尤其這幾天打 Estiah 又在想,如果我要第二抽到 Nightmare Blade,
那這樣到底放幾張可以讓勝率達到最高?與其用手算,還不如看看是否
能真的用 probability monad 幫我算出來。多實際。

結果寫是寫完了啦,成果在這 Prob.hs, 但是卻發覺要算第幾張抽到的
機率的話,光是這樣完全不夠。感覺這好像是需要「重複排列」的算法。
高中數學我完全忘光了。不過我現在還能從 P 推出 C, 可是 H 就沒有
那麼直覺了,洗澡的時候一時想不到,可能要用紙筆稍微推算一下。

但不管怎麼樣,單用 probability monad 都不足以算這些。我需要更好的
方式定義「總數」和「組合數」。可是光把 Prob.hs 寫完,就已經弄到
太晚了,我也沒什麼精神繼續寫下去。想到這裡,又想起之前用 Scala
寫的踩地雷 AI minei 也還沒寫完,我好不容易推算出所有的排列組合運算,
但只在腦海裡,來不及寫出來,也來不及寫成程式,過這麼久我看大概
忘光了吧。嘖。這要是寫出來,雖然肯定會跑很慢,但應該會很強...

然後如果把這 probability moand 寫得好用一點,說不定還能拿來輔助用。
至少至少,可以拿來算到底放幾張 Nightmare Blade 比較有勝算吧...。
雖然我用手算肯定比較快 :/

另外,排列組合和機率也幾乎可以說是我在學校裡學的數學,比較有興趣的...
或是說唯一完全沒忘光,而且自己還可以推算的。看什麼時候會想繼續做
下去吧。

* * *

在 Prob.hs 中也試了 QuickCheck 來驗證 probability monad 的 functor
laws 和 monad laws. 最讓人頭痛的是 monad 上的 composition 的
associativity, 用 QuickCheck 產生任意 function 看起來是沒什麼問題,
但是產生這麼多的 function 跑起來真的是慢到不能接受。而且不知道
為什麼,愈後面愈慢,我猜是 quickcheck 有用某種方式去調整產生的
東西,可能因為前面範圍還很大很容易產生,後面愈來愈難之類的,亂猜。
總之讓他跑完一次確定沒問題後,我就不想再跑第二次了,或是跑一半就
切掉。如果能限制他不要跑 100 次,而是 50 次的話倒是能接受。主要是
超過 50 之後才會開始變得慢到讓人難以忍受。

其實我這邊寫得很隨便,而且好像也沒查到什麼很明確的 functor laws
or monad laws, 所以就隨便選幾個我比較喜歡的寫... 反正全都要過就對了 :x
我不是很確定這些可不可以用證明的。每篇文章都說 functor/monad laws
要作者自己確認,但好像沒說過要怎麼確認才對。


胡言亂語,終。

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0