変わり種としては,モンテカルロ法はコンピュータ囲碁の世界でも使われてい ます.1990年代に初めて提案された時は,私も含めてゲーム研究者の多くが 「うまくいくはずがない」と思っていて,実際当初はまったく強くプログラム が作れなかったのですが,ここ数年の進歩で急に強くなりました.このあたり は,美添一樹さんによる 「コンピュータ囲碁におけるモンテカルロ法 - 理論編 -」 が参考になると思います.なお,コンピュータ将棋ではモンテカルロ法はあまり成功していません.
def f(x) 1.0/(1+x**2) end def simpson(xs,xe,n) deltax = (xe-xs)*0.5/n sum = f(xs)+f(xe)+4*f(xs+deltax) for i in 1..(n-1) sum = sum + 2 * f(xs+2*i*deltax) + 4 * f(xs+(2*i+1)*deltax) end deltax * sum / 3.0 end
def simpson(xs,xe,n) deltax = (xe-xs)*0.5/n sum = f(xs)/3.0+f(xe)/3.0+4*f(xs+deltax)/3.0 for i in 1..(n-1) sum = sum + 2 * f(xs+2*i*deltax)/3.0 + 4 * f(xs+(2*i+1)*deltax)/3.0 end deltax * sum end
def simpson(xs, xe, n) deltax = (xe - xs) * 0.5 / n sum = f(xs) + f(xe) for i in 1 .. (2 * n - 1) sum += f(xs + i * deltax) * ( 2 << (i % 2)) # iが奇数の時と偶数の時で係数が4,2と変わる end deltax * sum / 3.0 end
ruby vote.rb 選択肢番号のように使う.