アカウント名:
パスワード:
これ、ループじゃないですよね。
状態 k を関数 f(k) と評価して、関数の返り値 kintermediate を 相手の出方の予想関数に g(f(k)) と与えると 状態 k1 が得られて、f(k) - g(f(k)) が心地よく小さくなるまでこれを n 回にわたって再帰的に呼ぶと理想の状態に達するわけですよね? でも、この状態 kn って常に kn-1 との差分方程式の形でしか表現できないので、状態 k0 から kn までのすべての状態を保持しないといけなくないですか?
純粋なループなら g(f(k)) の一般項なので、kn-1 を捨てながらイテレーションを続ければ平衡状態まで思考を続けられるはず。ところがこれは再帰なので、"計算"を続けるといずれかの地点でスタック領域が埋まって、関数の最終行で例外が飛び、思考が打ち切られて行動を決定せざるを得なくなるんじゃないでしょうか。
で、リンク先を読むと一般人は n = 0~1 でそれが発生するよ、と書いてありますね。なるほど。
相手が取る手は最終的に一つだから、この手を取ってくる(から対応する手を取ろう)と考えた時点で破棄してOK。knやkn-1は常に確定している。ただf(k)やg(f(k))には再帰が含まれているかもしれないし、一般人はf(k)やg(f(k))をn=0~1ぐらいしか計算しない。で最適化としてせいぜいnを2~3に設定すれば充分だろうということになるんじゃない?メモリは破棄できても計算時間(やそのリソース)はかかるんだから。
ゲーム木の探索と似たようなもんじゃないのか単純なループにはなかなかならないと思うんだけど
そこはfだのgだのでしょ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
ループじゃなくて再帰 (スコア:5, 興味深い)
これ、ループじゃないですよね。
状態 k を関数 f(k) と評価して、関数の返り値 kintermediate を 相手の出方の予想関数に g(f(k)) と与えると 状態 k1 が得られて、f(k) - g(f(k)) が心地よく小さくなるまでこれを n 回にわたって再帰的に呼ぶと理想の状態に達するわけですよね? でも、この状態 kn って常に kn-1 との差分方程式の形でしか表現できないので、状態 k0 から kn までのすべての状態を保持しないといけなくないですか?
純粋なループなら g(f(k)) の一般項なので、kn-1 を捨てながらイテレーションを続ければ平衡状態まで思考を続けられるはず。ところがこれは再帰なので、"計算"を続けるといずれかの地点でスタック領域が埋まって、関数の最終行で例外が飛び、思考が打ち切られて行動を決定せざるを得なくなるんじゃないでしょうか。
で、リンク先を読むと一般人は n = 0~1 でそれが発生するよ、と書いてありますね。なるほど。
Re:ループじゃなくて再帰 (スコア:0)
相手が取る手は最終的に一つだから、この手を取ってくる(から対応する手を取ろう)と考えた時点で破棄してOK。
knやkn-1は常に確定している。
ただf(k)やg(f(k))には再帰が含まれているかもしれないし、一般人はf(k)やg(f(k))をn=0~1ぐらいしか計算しない。
で最適化としてせいぜいnを2~3に設定すれば充分だろうということになるんじゃない?
メモリは破棄できても計算時間(やそのリソース)はかかるんだから。
Re: (スコア:0)
ゲーム木の探索と似たようなもんじゃないのか
単純なループにはなかなかならないと思うんだけど
Re: (スコア:0)
そこはfだのgだのでしょ。