俺主催囲碁プログラミングコンテスト

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
NGNG
俺に勝てたら、賞金が出ます
263デフォルトの名無しさん
垢版 |
NGNG
>>262
ハッシュ関数はどんなのを使えばいいの?
264デフォルトの名無しさん
垢版 |
NGNG
スピードアップにどんな意味があるんだろうか・・・・
NGNG
CPUの思考速度。
266デフォルトの名無しさん
垢版 |
NGNG
評価関数+αβ探索だけでやっても
ほとんど何も上手くいかない・・・

なんで?
評価関数がダメなのかな。
NGNG
日本ルールに限定するなら、
抜いた石が一個の時にコウフラグを立てて位置を記憶すればいいのでは。
268デフォルトの名無しさん
垢版 |
NGNG
http://www.google.co.jp/search?q=cache:m1o_rVb098YC:www.edu.ipc.hiroshima-cu.ac.jp/~f23006/SOTAGE/5/game.html+%CE%B1%CE%B2%E6%8E%A2%E7%B4%A2%E3%80%80%E5%9B%B2%E7%A2%81&hl=ja&ie=UTF-8
との事。
269デフォルトの名無しさん
垢版 |
NGNG
1.最初にランダム数(32ビットか64ビット)を決め、着手(整数)とXOR
で次局面、戻るにはまたXORで戻る。チェスプログラマーの良くやる手です。
コウフラグ等よりも早いでしょう。コンピュータ囲碁の初期にZobristが
提唱しました。英文が各所にあります。検索はzobrisy keyで。
ただし、私は使っていませんが。
局所的にαβ探索、例えば詰め碁をやれば1命令でも早くしたいものです。
局面記憶もXORで簡単ですね。グラフィックの重ね合わせと同じでしょう。
私も10数年ぶりに囲碁プログラム再開しましたのでよろしく。
270minikat
垢版 |
NGNG
269です。書き忘れましたが、5*5は完全読みで黒25目勝ちが読みきれたそうです。
次は7*7か?もちろん枝はうまく刈りますが。
271minikat
垢版 |
NGNG
すみません。タイプミスです。
Zobristが正解。
272デフォルトの名無しさん
垢版 |
NGNG
>>269
なんかできそうな、できなさそうな。
少し考えないと理解できなさそうです。

何も打たれていない状態のハッシュコードをSとして、
次局面のハッシュコードS'を、打たれた手をAとして
S' = S xor A
とするわけですね。

でも、石の配置が同じ局面でも
異なったハッシュコードを持ちそうな気がするのですが、
どうでしょうか?

石が一度も取られなければ、
S→A→S'→A'→S''
S''=S xor A xor A'=S xor A' xor A
という事は理解できますが。
273minikat
垢版 |
NGNG
自分は使っていないが、コードの衝突は起こらないはず。
同一ゲームなら同じコードになります。あくまでそのゲーム
のチェック用ということで、新たなゲームでは最初の乱数が違うから
コードももちろん違う。3コウでも6手さかのぼるだけかな?
とにかくコウの場所、フラグ等は先読みからの手戻りで単純化できないから
不利と思います。
ボクもルールは自殺手などややこしいので日本ルールのみ考えています。
それから配列は1次元がたやすいですね。
274デフォルトの名無しさん
垢版 |
NGNG
>>273
とりあえず勘違いしてるかも。
そのやり方で作るのはハッシュコード。

使い方は、
ある時点までの局面をすべて保存しておく際に
ハッシュコードで区別しながら保存する。
history[board.getHashcode()%HASHSIZE].add(board)
で、次の一手を指した後の局面のハッシュコードを計算して
そこの配列?の中に同一局面があるかどうかを調べる。
あれば同型反復禁止で、そこには置けない。

xorは a xor b xor c.... = b xor a xor c....
なので
おそらく
石を取り除く時もxorをするのだと思う。
そうするると
同じ盤面であれば同じハッシュコードが作れる。
まあ、要するに
int getHashcode(int board[][]){
int start=0;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
if(board[i][j]==black)start=start xor (i*j);
else if(board[i][j]==white)start = start xor (-i*j);
}
}
return start;
}
って事なんだけどね。
i*jの部分は工夫して作らないとだめだけど。
275minikat
垢版 |
NGNG
コードと書いてあるので別に勘違いはしていません、と思います。
その後比較するのは当然。焦点はコードの出し方。
テーブルの保存方法やルールで後戻りが違ってくるのはプログラムで
変わる。言いたいのは別にXOR使わなくても局面を表現できる
整数値が違えばいいということ。もっといい方法があるかもね。
自分も最初は1個取ったとか場所がどうとか考えたがこれが最速で
簡単。自分はパターン照合の関係でつかっていない。
XORといえば 手番=手番 XOR 3ででる。黒1白2の場合。
手番=3−手番でも可だが。
もっといろいろ話しましょう。

276minikat
垢版 |
NGNG
追加です。
274のコ−ドで気が付いたがgetHashcodeは盤面を全走査
していますが、現局面と現着手のXORだけでいいのでは?
最初に配列の位置に乱数を割り当てて1手(位置、石)のみXORをとる。
もう一度着手(位置、石)XORで前局面に戻る。
アゲ石処理でXOR消去はもちろん必要だが。XOR 1命令で再走査がいらないところに
値打ちがあるように思います。
コード書いていないだけに間違っていたらスマン。


277デフォルトの名無しさん
垢版 |
NGNG
>コードと書いてあるので別に勘違いはしていません、と思います。
了解

>>274のコ−ドで気が付いたがgetHashcodeは盤面を全走査
結局のところは全走査する事で実現できる=手順によらない
という事を言いたかった。
実際は、
すべての局面を記録していくわけだけど、
その際、同時にhashcodeを生成してしまえばいいわけだよね。
石がとられたら、その分もxorで。

自分のは今のところ速度にこだわっていないので
これを実装するかどうかは未定かな。

今、考えてる事は、
探索の打ち切りとか、もっと深く読むとか。
278デフォルトの名無しさん
垢版 |
NGNG
囲碁のプログラムをやっとの事で完成させて
19*19で動かしてみると
その大きさに愕然とする。
そして、ほとんどの人がやめていく。
279デフォルトの名無しさん
垢版 |
NGNG
局地戦ならともかく、布石とかは相当厄介だと思われ。
NGNG
布石ぐらいだったらデータベースで何とかできそうな気はするけど。
やっぱり死活でしょう。
攻め合いとかコウとか。
NGNG
別の隅を評価しながらの布石は、結構厄介だった。
NGNG
>>281
それはかなり高度な部類に入るかと・・・。
実際、それを生かすだけの棋力を持つプログラムは存在しないと思われ。
283278
垢版 |
NGNG
定石データベース+αβ探索だけで囲碁を作って見て思ったんだけど、
人間の脳ってなんであんなにすごいんだ?
NGNG
囲碁は特に画面認識とか、人間の脳に向いている作業が多いからね。
しかし、αβということはまともに探索してるの?
それはすごいね。
NGNG
学習して、自ら改善するっていうプログラムじゃないんだよねぇ。
なら、実際に打ってみて足りない点を逐一カバーしていくってのが
いいと思うよ。
つーわけで、遊ばせてくださイ。ちゃんと報告するから。
            よろしく。
286278
垢版 |
NGNG
2chネラーだという事がばれると
なんか恥ずかしいのでそれは勘弁して>>285

それに、弱すぎてやっても意味ない。

αβに関してだけど、現状の評価関数だとほとんどやっても意味ないかも。
コンピューター同士で対戦させて
どのくらい読みが的中するのかを調べたところ
打つ場所の残りが10箇所くらいになって
当たりだすくらい。

それに19*19だと
最初の幅優先探索がえらく時間がかかる。

それをふまえて、自分がどうやっているのか
検証してみたんだけど・・・・
287デフォルトの名無しさん
垢版 |
NGNG
無料の囲碁のフレームワークってないですかねぇ。
ルールを組み込むのがすごく大変で。
NGNG
ここを見てみたら。
http://www.inventivity.com/OpenGo/
289デフォルトの名無しさん
垢版 |
NGNG
>>288
ありがと。
これでAI作りに専念できそうです。

まずは探索から実装してみます。
290minikat
垢版 |
NGNG
ルールは狭義には、コウと自殺手判断ぐらい。厳密には終局計算を含む。
昔アップルIIの囲碁ソフトはウッテガエシが打てなかったよ。
返品しようとおもったがそれ以外なかった。
どのルールも1石の自殺手はできないがSSTルールやニュージーランドルール
は認めている。
日本ルールではセキは地にならないが、中国ルールではなる。
とにかく市販ソフトでもセキ判断は完全でないのでルールが完璧とは
いえないのでこちらまかせ。 
でもルール作りのハードルが高いならシチョウ、ゲタなんてもっと大変よ。
がんばってください。

291minikat
垢版 |
NGNG
>>どのルールも1石の自殺手はできないがSSTルールやニュージーランドルール
は認めている。
スマン。表現がおかしい。
多石の自殺手を認めているという意味。
292デフォルトの名無しさん
垢版 |
NGNG
ルールなんか 日本ルールに 決まってるだろ
293デフォルトの名無しさん
垢版 |
NGNG
とりあえず五路地盤のを作ってみたら?
NGNG
ジャップ消すゾ
295デフォルトの名無しさん
垢版 |
NGNG
もう少しにぎやかにならないかな。
296デフォルトの名無しさん
垢版 |
NGNG
着手生成アルゴリズムってどんなのがあるの?
NGNG
パターンが楽なんじゃないの?
こんな形は1間で、これは2間、ケイマ、とか色々。
298デフォルトの名無しさん
垢版 |
NGNG
候補手列挙を学習する方法ってない?
例えば、パターンだったら
探索した結果良いものを集めてデータベース化していくと。

でも、パターンだとマッチングが大変じゃない?
ある点が候補としてあげられるかは
その点の付近のパターンを、データベースで比較しなくてはならない。
ハッシュを使えばいいのかな。
NGNG
学習だったらプロ棋士の棋譜を使えばいいんじゃない?
たしか公開されてたはずだしね。

パターンマッチングの高速化はどうするんだろうね。
データベースをハッシュでまとめてしまえば高速で可能なような気もする。
完全一致から似ている形まで、とかなると難しそうだけど。

あと、単純なパターンだとうまくいかないかもね。
この石はシチョウで取られる、とか、ダメが2以上ある、とか
色々な情報をパターンの中に組み込む必要があるかも。
ここに打った場合の手順とかも。
300デフォルトの名無しさん
垢版 |
NGNG
データがあっても、アルゴリズムがないとね(藁

似ている物まで探してくるのは無理だと思うなぁ。
似ているの基準から定義しないとわからんけど。

>あと、単純なパターンだとうまくいかないかもね。
候補を列挙するだけだからいいんじゃない?
あとは、それを探索するだけ。
301minikat
垢版 |
NGNG
ハッシュよりも実プログラムでは2分木探索が速いという報告もありムヅ。
普通に照合するよりは何十倍か早いだろうけど。
パターンは骨格と肉付けがあり、20年前の同級生で様子が違ってもある程度
認識できるのと似ている。黒、白、空点と、黒白空点どちらでもいいというのが厄介。
rotationで8種類、反転で16種類ある。広さの問題もあるなあ。
人間は碁をやって入ればますます、パターン認識は早くなるが、機械は照合に
ドンドン時間が食われる。ここに根本的な問題ありだろ。
AI囲碁で2000くらい。最初手入力してたらしいが途中からBITMAPにして
グラフィックエディターで入力したらしい。うまいね。

NGNG
学習のアルゴリズムかぁ。
分からんね(w
完全一致で出現した回数とかなら簡単だけど。

大量の棋譜から学習で楽をしよう、というのは誰もが誘われる麻薬みたいな
もの?だが実際は少数のパターンを人間が自分で判断して打ち込んだほうが
精度の高いものが出来そうな気もする。
何より、プログラムがその手をなぜ打ったかを推理できるからね。
303デフォルトの名無しさん
垢版 |
NGNG
>ハッシュよりも実プログラムでは2分木探索が速いという報告もありムヅ。
2分木にする時のキーとして、何を使うの?
それがハッシュコードなら
ハッシュテーブルの大きさによると思うよ。

似てる物を集めてくるのはちょっとつらいよね。

>だが実際は少数のパターンを人間が自分で判断して打ち込んだほうが
>精度の高いものが出来そうな気もする。
おそらくそうだと思う。
だから、外からのデータを与えるんじゃなくて
自分でデータを生成検証して、候補手を生成するアルゴリズムを
学習するようなものがいいね。
304デフォルトの名無しさん
垢版 |
NGNG
あらかじめ、全ての手を計算しておいて、データベース化しておく。
データベースの構築には、膨大な計算力とディスクスペースが必要なので、
SETIのように分散処理で解決。
データベースができた後は、最善手のみが打てる。

一度プロジェクト起こしてみては?
それなりに金になると思うぞ。
あと、首謀者は地位と名誉も得られる。
305デフォルトの名無しさん
垢版 |
NGNG
もし、それで碁の必勝法がみつかれば、歴史に名が残るね。
少ない資金で多大な効果が得られる、数少ないプロジェクト。
早い者勝ちだぞ。
NGNG
相手が知ってたら意味ないじゃ〜ん
NGNG
お前ら・・・囲碁の可能な局面の数は
3^19^2 = 10^230 にもなるんだぞっと。
NGNG
完全解析したらゲーム自体消滅
309デフォルトの名無しさん
垢版 |
NGNG
3^19^2 = 1350851717672992089 ≒ 10^18
1千万台(10^7台)のコンピュータを使えば、10^11回の演算で済む。
1台のコンピュータが1秒に3170回の演算が行えるとして、10年間。
現行の性能では難しいが、将来は可能になるかもしれない。
可能になった時点で、誰が先に演算を終えるか?
先に演算を始めた者に決まってる。
310デフォルトの名無しさん
垢版 |
NGNG
オセロならもっと早く演算が終了する。
早い者勝ちだぞ。
ゲームを消滅させろ。
311minikat
垢版 |
NGNG
>>2分木にする時のキーとして、何を使うの?
パターンをbit化すればいいのと違うかな?
>>ハッシュテーブルの大きさによると思うよ。
そうだね。やって見ないとわからない。ハッシュの計算や衝突の際の探索も時間がかかるし。
でも2,3千のパターンではアマ初段には間に合わない。
瀬越の手筋辞典や官子譜見たらとんでもない筋やパターンがでている。
NHK囲碁の解説聞いていても「これは筋ですねえ」といわれても、知らない、わからない
のが結構多い。筋の定義もムズだが、パターンとも共通性があるし。
コスミ自体は1種類しかないが、周りの状況でヨセからワタリ等等役目はゴマンと
ある。要するにパターンは目的を入れないと絵に描いたモチ。

312デフォルトの名無しさん
垢版 |
NGNG
分散処理で計算する方法は考えたんだけどさ、
黒(自分)が最善手を常に打つとして、
白(敵)が最善かどうかわからない手を打つとすると
19*19では
(19*19-1)*(19*19-3)*(19*19-5)....となる。

これを300*300*300......(19*19-100)
と近似しても激しい値になる。
コレをどこへ保存すればいいのだろうか?
地球上のコンピューターをすべて集めてきても
保存できない。

>3^19^2 = 1350851717672992089 ≒ 10^18
コレ間違ってるよ。
3^(19*19) > 2^400
log10 2^10=3
log10 2^400 =120
まあ120桁はあるな。
NGNG
爺さんの楽しみが無くなるなあ〜
314デフォルトの名無しさん
垢版 |
NGNG
賞金 100円
みんな ガンバレ〜〜
315デフォルトの名無しさん
垢版 |
NGNG
>>311
候補手といっても、いろいろなレベルがあると思う。
例えば、どの手を選んでも悪手にはならない
候補手の列挙から
どの手を選んでも良い手であるような
候補手の列挙から・・・

あるいは攻撃的な手だけを列挙できるようになるのも
有効だし
守備的な手だけを列挙できるようになるのも有効だね。

候補手が列挙できたら、あとは探索するのみ。
316デフォルトの名無しさん
垢版 |
NGNG
今考えてるのは
精度の粗い候補手列挙システム
(つまり、悪手は切り捨てるけど良手は絶対に切り捨ててはいけない。
判定不能の物は残す)

高機能なαβサーチの組み合わせでの
アルゴリズムを作ろうと思ってる。

候補手列挙は、やっぱり周辺パターンのデータベースしか
ないのかな。

候補手列挙で一つ思いついたのは、
応手作成アルゴリズム。
相手の手を、どんな手なのか予測分類して
(2つに分類するなら、攻撃的か守備的か)
候補手を列挙する。

まあ、まだアイディアを練ってる段階だけど
NGNG
絶妙手をも切り落とさないシステムだと大変かもね。
そういう手は弱いレベルには悪手だから。
プログラムの棋力にふさわしい普通の手が10手から20手程度抽出できれば
十分じゃないかな。

囲碁はまだそれほど深く読めないので(シチョウは除いて)
探索手法自体の重要性は低いと思われ。

やはり最大の難関は評価関数かと。
地の判定から、石の連絡、強弱、空間の支配力、
この辺を適当に数値化しないといけないからね。
318デフォルトの名無しさん
垢版 |
NGNG
>>317
俺は(中盤の)評価関数の作成が無理だと思うんだよね。
評価関数の作成が将棋と同程度の難しさなら、
現状のルールベースの候補手生成アルゴリズムと組み合わせれば
きっと将棋と同程度の強さになってると思うんだ。
探索空間の広さが同程度になると思うから。

囲碁は、終盤に近づくほど評価関数が正確な値を示すようになってくる(気がする)が
序盤では定石に頼らないとまったく打てない(はず)。
それは定石データベースを持たない囲碁プログラムを作れば
おのずとわかると思う。
という事は、評価関数の精度をあげるには深く読んでみる事が
一つの方法であると思う。

そこで、いかに有効な手を深く読むかが重要だと思う。
評価関数が曖昧と仮定している以上、αβサーチは使えない。
じゃあ、どうするかというと、深く読む。
どうやって幅を絞るかというと・・・
アイディアはあるけど今は暖め中という事で。

>そういう手は弱いレベルには悪手だから。
絶対評価と相対評価がメチャクチャになってるかもね。
人間にとって一見悪手にみえるが良い手である手を妙手という?から
それがコンピューターにとって妙手かといえば、違うと思う。
目指すは”最強”なのでw
319minikat
垢版 |
NGNG
例えば、10年くらい前の棋道で趙治勲の読みの内容に関するする連載があったが、
プロでも驚くところまで読んでいる。多分、プロの頭には過去の膨大な筋や
パターンと、ものすごい読む力が備わっている。全部の可能着手数なんて考える必要ないんだ。
反面、故岩本九段のようにパラパラ打って碁にする棋風もあるが。それは一言で言えば、バランス。
理論でもいいから趙さんの読みの深さまで深化できるアルゴリズムでなければ
先の見通しは暗い。
評価関数でいえば、人間は盤面計算や評価を毎着手やっていないでしょ。
一段落したところでやる。それまでは手順をつくすか、ある死活なら死活に集中する。
その意味でプログラムは人間を徹底的に模倣し、攻めあいや終盤計算等の得意分野で人間を追い越さ
なければいつまでたっても初心者レベル。と思う。
それから今のプログラムはエントロピーが低い。着手に多様性がないからプログラムは
かならずこう来るんだ。とか読まれてしまう。ノゾキにいつもツグぐようなものやね。
プロでも道策にケイマにカケられて安井家はいつも下うけでこなされる。
道策の深読みと多様性についていけない。この2点をどう表現するか。




320デフォルトの名無しさん
垢版 |
NGNG
多様性に関しては学習なのかな。
負けたゲームから何かを学ぶ。
少なくても、相手が同じ事をしてきたら
それに対して何か別の策をこうじるようにならないと。
まあ、それができるなら
永遠とコンピューター同士で学習すると
最強になってしまうんだけど。

NGNG
深く読むかぁ。
何手ぐらい読めば妥当なんだろうね。
>>319さんの言うように当然の手順、というのを抽出できれば
それに沿って読みさえすれば5手、10手、20手先の局面でも
正確に読めそうな気もする。

この場合、地合でなく、戦いを重視したプログラム、ということになるのかな。
322デフォルトの名無しさん
垢版 |
NGNG
実際に人間は何手くらい読んでるのかな?

俺は囲碁初心者だけど
ぱっとみで候補が5くらいあがって
そして7手先くらいは読んでるね。

確かに、読みっていうのは
そこへ打っても大丈夫かといった
チェックをしているような気がする。
つまり、感覚だけである種の最善手がはじき出されている。
323デフォルトの名無しさん
垢版 |
NGNG
>この場合、地合でなく、戦いを重視したプログラム、ということになるのかな。
それは、当然の手順=最適な手順がなんなのかによりそう。
NGNG
将棋や囲碁では、状態をイメージ(画像)として捕らえるような作業を
人間は行っているだろうね。陣形とか、血合とか。

以前ちょっと考えたことがあるのが、上記の考えを元に、
盤面を白黒で2分割、4分割・・・16分割くらいして、
(分割はそれぞれが優勢な部分を中心とする)
そのそれぞれのブロックで、細かい判定を行うというもの。

でも、すでに他の人が同じような研究を行っていたという罠。
325デフォルトの名無しさん
垢版 |
NGNG
>>324
白黒で・・・ってどういう意味ですか?

これだけだと実装の仕方だけでもいろいろあると思うから
他の人が研究してようが問題ないのでは?

たとえば、優勢な部分を判定するアルゴリズムが大きく効いてそうだし
細かい判定で何を判定するのかによっても全然違うものが
でき上がると思うよ。
俺には作れなさそうだ。
326デフォルトの名無しさん
垢版 |
NGNG

いい加減な事を書くなよ
327名無しさんに接続中…
垢版 |
NGNG
囲碁の場合、アバウトなイメージだから難しい。
将棋の場合は、駒がぶつかったら「取る」ことを考えるし
王手をかけられたら「避ける」しかないので必然の手がある
囲碁の場合は1マスぐらいずらして打っても構わないので
これをプログラミングするのは難しいだろうな
328デフォルトの名無しさん
垢版 |
NGNG
学習といえば、ニューラルネット使った奴が
けっこういい成績残したね。
俺にはサパーリなんですが。
NGNG
どこかに論文があったと思うよ。

あった。ここ。
http://www.markus-enzenberger.de/compgo.html
NGNG
とうとう7行に収まったようです。
http://pc3.2ch.net/test/read.cgi/tech/1033143528/530
331
垢版 |
NGNG
コンクール・コンテスト総合掲示板
http://jbbs.shitaraba.com/music/3054/
3321
垢版 |
NGNG
結局、俺に勝てる囲碁プログラムを作れた奴はいないのか。
2chってバカばっか。
NGNG
>>332
結局、自分に勝てる囲碁プログラムを作れた1はいないのか。
2chってバカばっか。
334デフォルトの名無しさん
垢版 |
NGNG
厳しい事言うね。
プログラムの中でも囲碁は難しいほうだよ。
日本中探し回っても、囲碁の思考の部分をプログラムできる人は
数えるほどしかいないと思うけど。
NGNG
だいたいまだ300レスじゃねーか。
NGNG
囲碁の評価関数の話をしませんか?

思うに、評価関数自体で再帰的に探索するような仕組みを作れば
いいような気がする。
石の死活はこの石を殺すには先にこの石を殺して、その前に・・・と
延々続いていくので、この部分を上手に再帰的に処理できれば
石の死活に関してはかなり強くなるのでは。

とか書いてみる。もちろんアイデアだけで実現できてません。
337デフォルトの名無しさん
垢版 |
NGNG
>>336
提案してるのは「再帰」なわけ?
ぶっちゃけ、君相当レベル低いかも。
MiniMaxとか知ってる?
木構造=再帰で処理できる
再帰的に処理できる事のメリットはコーディングが容易なだけだけど。

評価関数の話で一つ問題を提起すれば
状況に応じて評価関数を切り替えるという方法は
一般的な方法だけれど、
では、状況というものをどう定義するか。
つまり、どういう状況に振り分けるか。
序盤、中盤、終盤に分ける方法が一番短絡的かもしれない。
他にもコウの時は別の評価関数を用意できるかもしれない。
評価関数の中身は別として、
どれくらいの状況に分けられるのか?
振り分けるアルゴリズムがあるかどうかはまた別の問題だと思う。
まあ、囲碁に限った話ではないんだが。
338デフォルトの名無しさん
垢版 |
NGNG
再帰という言葉を覚えたから使ってみたかったんだろ。
NGNG
盤の端っこでの死活の問題はさ、強い人ほど先を読まずに形を暗記して
うってるんですよ。
というわけで、死活はデータベースを作ればよろしい。
340デフォルトの名無しさん
垢版 |
NGNG
今なら10万件くらいは余裕で処理できそうだから・・・
log3 100000 =10
よって3*3の範囲なら全部覚えられる。
マス目の数*0.477=必要なレコードの桁数
16マスなら7桁、つまり100万レコードだ。
NGNG
>>340
とりあえず、死活100選とかそういう本をざっと眺めてみる
ことをお勧めする。
342デフォルトの名無しさん
垢版 |
NGNG
>>341
たしかに、すべてのパターンは必要にならないけど
相手が常に最善を打ってくるとは限らないので
340に出てる数字と大差ないというか。
一マス増やしただけで、桁数が0.5桁増えるというのは
恐ろしい事だよ。

まあ、実際のプログラムでは
眼形データベースと演繹的な処理で判定するわけだけど。
詰め碁がデータベースでできたら、学会誌には出てこないよ。
343デフォルトの名無しさん
垢版 |
NGNG
書き逃げ?
NGNG
HSP イイ!!
345デフォルトの名無しさん
垢版 |
NGNG
あきらめたとか?
NGNG
盤のはしっこのデータベースつっても3*3じゃ正直狭すぎでわ?
5目中手ですら3*4の大きさは必要だし。
外側の石の状態とかも必要と思われ(安全、攻め合いになってる、とか)
NGNG
>1に勝ったら賞金が出力されるロジックが必要なんだと思ってた・・
348デフォルトの名無しさん
垢版 |
NGNG
うにゅ
349デフォルトの名無しさん
垢版 |
NGNG
完全読みすれば死活の判定はできそうだけど
350デフォルトの名無しさん
垢版 |
NGNG
2*2でも、完全読みをするのはめちゃくちゃ時間がかかる
NGNG
3x3が何とかなるレベル。
4は、今のPCだと辛すぎる。
5以上は間に睡眠や人生をはさまないと無理。
NGNG
5x5は解かれた、と情報が流れていたけど?
353minikat
垢版 |
NGNG
解いた見たいですね。
確か結果は、白全滅。
354デフォルトの名無しさん
垢版 |
NGNG
それは完全読みじゃなくて、
ヒューリスティックを使ってるんじゃなかったっけ?
NGNG
10/21のメールから。
天元に打って黒25目勝ち。
4時間で解いたとか書いてるな。

Yesterday my program solved 5x5 Go starting with the first move in the
centre. As was expected it is a win for the first player with 25 points
(the whole board belongs to black).

I used an iterative deepening Alpha-beta search (PVS) with:
- Transposition tables (2-deep replacement scheme, 2 x 2^24 entries)
- Enhanced transposition cut-offs
- Symmetry lookups in the Transposition table
- 2 killer moves
- History heuristic
- Benson's algorithm for unconditional live (extended with unconditional
territory)
- Heuristic evaluation for positions that are not fixed by benson

The solution was found at 22 ply deep (23 for the empty
board).(searching 4.472.000.000 nodes in about 4 hours on a P4 2.0Ghz)

The main reason why my search was able to solve 5x5 is Benson's
algorithm which reduced the depth where a proven full-board-win is
detected by at least 6 plies (compared to by old implementation which
had to play many things out).

Only the simple (japanese) ko-rule was used, so the result is
independent of any superko-rule. This does not mean that super-ko is
irrelevant, just that from the empty 5x5 board there is a forced line
that avoids all long cycles.
356デフォルトの名無しさん
垢版 |
NGNG
This does not mean that super-ko is
irrelevant, just that from the empty 5x5 board there is a forced line
that avoids all long cycles.
誰かここ訳して

As was expected
って書いてあるから、完全読みではないんだよね?
NGNG
>>356
日本ルールの単純なコウだけを考えていて、3コウとか長生とかの無限手順は
考慮していない、ってことでしょ。

3コウとかを軽視したわけではなく、5x5の盤では3コウとかになるのを
防ぐ強制的な手が存在するから、ということかな。
NGNG
>>356
As was expected
それは、予期していた通り、という意味だと思う。
完全読みしてるんじゃないかな。
359鬼池田 ◆uADIuuYAIU
垢版 |
NGNG
拙訳です。用語、意味で間違ってたら直してください。

 昨日、私のプログラムは初手天元の手から5路盤を解決しました。
予想通り、先番25目勝ち(全盤面が黒に属す)

反復アルファーベータ探索(PVS)を使用して:
-移項テーブル(2手先置換計画、 2 x 2^24 候補手)
-改良置換枝狩り
-対称置き換えテーブル
-2キラームーブ
-ヒューリスティック
-無条件生きのベンソンのアルゴリズム(無条件地に拡張された)
-ベンソンのアルゴリズムに用意されていない盤面のヒューリスティック評価

22手の深さで解答が見つかったが(空の盤からは23手)
(探索ノード数4,472,000、ペンティアム4の2Ghzで4時間)

私の探索が5路盤を解決できた主たる理由は、ベンソンのアルゴリズムが、少なくとも
6手必要なと思われる証明すべき全面勝ちの深さを、減らしてくれるからです。
(多くのことをやらねばならない従来の方法に比べて)

日本の単純コウルールだけを使用したので、結果はいかなるスパーコウルール(使用条件)
からも独立していると考える。これはスーパーコウルールが不適切という意味ではなく
すべての長い循環を避けるための、5路盤に限定された結果です。
360デフォルトの名無しさん
垢版 |
NGNG
>>359
グッジョブ
でも、完全読みかどうはうよくわからないね。
NGNG
>>360
そうとは書いてないから完全読でしょう。
でなければ解いたとは言わないだろうし。
362鬼池田 ◆uADIuuYAIU
垢版 |
NGNG
すまん 探索ノード数は0が3つ足りません。(間違い)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況