俺主催囲碁プログラミングコンテスト
■ このスレッドは過去ログ倉庫に格納されています
>>216
興味を広げる事はいいことだ。
囲碁のルールをまず覚えよう。
ところで、ニューラルネットは専門的じゃない?
俺も勉強しないとな。 囲碁を知らない人はこちらへ。
10分で40級になれます。
インタラクティブ囲碁入門
http://playgo.to/interactive/index-j.html ikuo タンか shigekiタン て、それ目指してなかったっけ >ここで粘着な議論して論破するかい? >>207
論破したいけど、なんの議論する?
粘着とか言ってるびびり君が多くて
最近議論してないからな。
>>202
>文面からして本人なのがミエミエなんだけど。
負け犬の遠吠えかぁ・・・・
しかも、俺197になってるし(嘲笑 >>217
なにそれ?
>>218
>>219のサイトで囲碁覚えてみようかな。
ニューラルネットって脳のシステムをコンピュータで再現するんだっけ?
専門的だし、面白そう。
>>222
違っているとしたら、全く同じ性格の人が2人いるってことか?
だいたい、ちょっとした雑談に勝ち負けなんてないだろ。
自分に否定的なレスをした人は即負けということか?
普段から自分にレスした人全てにそうしてるの?
釣り師ならともかく、違うならそういうけんか腰のレスはやめようよ。
俺は囲碁知らないからあなたに役立つレスはできないけど。
それと、>>202の発言訂正するけど、何のアドバイスが欲しいかきちんと書いてたね。 >>222
おいおい、議論という狭い世界に引き籠って勝ったとか負けたとか騒いでるの
はごく一部の人間だということにまだ気付かないのか? 誰も専門的なことを話してないのに、どうやって知識の差なんてわかるんだ?
>>225
なぜ>>215が何度もニューラルネットとかいっているのかと思ってたんだけど、
もしかしてその部分を>>197に対してのものだと思ったから?
そうじゃなくて、あのスレの164-207ではってことだよ。
そう思っているんならはっきりと言ってくれればいいのに。
俺、鈍感だったな(w 煽りにマジレスですか?
論破された厨房は粘着ですた、と。 >文面からして本人なのがミエミエなんだけど。
本人って誰? なんで202は164にコンプレックス持ってるんだ? >>234
テレビと実況スレ見ながら、ちょくちょくこのスレを確認しているから(w >>235
別にコンプレックスなんて持ってないよ。
持ちようがないし。 >>237
なんだかんだいって、楽しんでいる面もあるし 別に論破されたっていいじゃん>202
次回勝てばいいんだよ。
って、ココ何のスレ?
>そう思っているんならはっきりと言ってくれればいいのに。
言語障害? おまえバカだろ?
どう読んでも、失礼な態度でせまって行ったのは
お前だと思うが。
最後に囲碁わかりませんと、ネタか?
なんでそんなに反応してるんだ?
やっぱり、コンプレックスか論破なのか? >>247
テレビと実況スレ見ながらちょくちょく確認して、俺にレスがあれば返しているだけだよ。
それに>>202は失礼だとは思わないけど。 ようするに手を全部データベース化して1手づつ検索かければ必勝なんだろ。
全部の手をデータベースにすんのって何バイト必要なんだろ?
20*20*〜〜〜〜〜〜???わかんね 3^(19*19) > 2^400 = 1024^390 > 10^(3*390)
単純計算すると
0が1000個くらいつくのかな?
囲碁ってルールの実装がめちゃムズ
コウが組み込めない。 コウ:その手でバンメンが前と同じになったら打てない。
簡単そうだが。 全部記録しておけばいいの?
それって非効率的な気がして。 コウは日本ルールとスーパーコウルールなら読む深さが違うし、
スピードアップにどんなアルゴリズムを使うかで議論があるでしょう。
AI囲碁のDavid Fotlandはシンプルコウルール判断(日本/韓国?)で充分といっていますが。
普通はHashで保存した局面をさかのぼり同一局面をチェックかな?
場所とか1個取ったとかの条件判断はこんがらがりますね。
>>262
ハッシュ関数はどんなのを使えばいいの? スピードアップにどんな意味があるんだろうか・・・・ 評価関数+αβ探索だけでやっても
ほとんど何も上手くいかない・・・
なんで?
評価関数がダメなのかな。 日本ルールに限定するなら、
抜いた石が一個の時にコウフラグを立てて位置を記憶すればいいのでは。 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
との事。
1.最初にランダム数(32ビットか64ビット)を決め、着手(整数)とXOR
で次局面、戻るにはまたXORで戻る。チェスプログラマーの良くやる手です。
コウフラグ等よりも早いでしょう。コンピュータ囲碁の初期にZobristが
提唱しました。英文が各所にあります。検索はzobrisy keyで。
ただし、私は使っていませんが。
局所的にαβ探索、例えば詰め碁をやれば1命令でも早くしたいものです。
局面記憶もXORで簡単ですね。グラフィックの重ね合わせと同じでしょう。
私も10数年ぶりに囲碁プログラム再開しましたのでよろしく。 269です。書き忘れましたが、5*5は完全読みで黒25目勝ちが読みきれたそうです。
次は7*7か?もちろん枝はうまく刈りますが。 すみません。タイプミスです。
Zobristが正解。 >>269
なんかできそうな、できなさそうな。
少し考えないと理解できなさそうです。
何も打たれていない状態のハッシュコードをSとして、
次局面のハッシュコードS'を、打たれた手をAとして
S' = S xor A
とするわけですね。
でも、石の配置が同じ局面でも
異なったハッシュコードを持ちそうな気がするのですが、
どうでしょうか?
石が一度も取られなければ、
S→A→S'→A'→S''
S''=S xor A xor A'=S xor A' xor A
という事は理解できますが。 自分は使っていないが、コードの衝突は起こらないはず。
同一ゲームなら同じコードになります。あくまでそのゲーム
のチェック用ということで、新たなゲームでは最初の乱数が違うから
コードももちろん違う。3コウでも6手さかのぼるだけかな?
とにかくコウの場所、フラグ等は先読みからの手戻りで単純化できないから
不利と思います。
ボクもルールは自殺手などややこしいので日本ルールのみ考えています。
それから配列は1次元がたやすいですね。 >>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の部分は工夫して作らないとだめだけど。 コードと書いてあるので別に勘違いはしていません、と思います。
その後比較するのは当然。焦点はコードの出し方。
テーブルの保存方法やルールで後戻りが違ってくるのはプログラムで
変わる。言いたいのは別にXOR使わなくても局面を表現できる
整数値が違えばいいということ。もっといい方法があるかもね。
自分も最初は1個取ったとか場所がどうとか考えたがこれが最速で
簡単。自分はパターン照合の関係でつかっていない。
XORといえば 手番=手番 XOR 3ででる。黒1白2の場合。
手番=3−手番でも可だが。
もっといろいろ話しましょう。
追加です。
274のコ−ドで気が付いたがgetHashcodeは盤面を全走査
していますが、現局面と現着手のXORだけでいいのでは?
最初に配列の位置に乱数を割り当てて1手(位置、石)のみXORをとる。
もう一度着手(位置、石)XORで前局面に戻る。
アゲ石処理でXOR消去はもちろん必要だが。XOR 1命令で再走査がいらないところに
値打ちがあるように思います。
コード書いていないだけに間違っていたらスマン。
>コードと書いてあるので別に勘違いはしていません、と思います。
了解
>>274のコ−ドで気が付いたがgetHashcodeは盤面を全走査
結局のところは全走査する事で実現できる=手順によらない
という事を言いたかった。
実際は、
すべての局面を記録していくわけだけど、
その際、同時にhashcodeを生成してしまえばいいわけだよね。
石がとられたら、その分もxorで。
自分のは今のところ速度にこだわっていないので
これを実装するかどうかは未定かな。
今、考えてる事は、
探索の打ち切りとか、もっと深く読むとか。 囲碁のプログラムをやっとの事で完成させて
19*19で動かしてみると
その大きさに愕然とする。
そして、ほとんどの人がやめていく。 局地戦ならともかく、布石とかは相当厄介だと思われ。 布石ぐらいだったらデータベースで何とかできそうな気はするけど。
やっぱり死活でしょう。
攻め合いとかコウとか。 >>281
それはかなり高度な部類に入るかと・・・。
実際、それを生かすだけの棋力を持つプログラムは存在しないと思われ。 定石データベース+αβ探索だけで囲碁を作って見て思ったんだけど、
人間の脳ってなんであんなにすごいんだ? 囲碁は特に画面認識とか、人間の脳に向いている作業が多いからね。
しかし、αβということはまともに探索してるの?
それはすごいね。 学習して、自ら改善するっていうプログラムじゃないんだよねぇ。
なら、実際に打ってみて足りない点を逐一カバーしていくってのが
いいと思うよ。
つーわけで、遊ばせてくださイ。ちゃんと報告するから。
よろしく。 2chネラーだという事がばれると
なんか恥ずかしいのでそれは勘弁して>>285
それに、弱すぎてやっても意味ない。
αβに関してだけど、現状の評価関数だとほとんどやっても意味ないかも。
コンピューター同士で対戦させて
どのくらい読みが的中するのかを調べたところ
打つ場所の残りが10箇所くらいになって
当たりだすくらい。
それに19*19だと
最初の幅優先探索がえらく時間がかかる。
それをふまえて、自分がどうやっているのか
検証してみたんだけど・・・・ 無料の囲碁のフレームワークってないですかねぇ。
ルールを組み込むのがすごく大変で。 >>288
ありがと。
これでAI作りに専念できそうです。
まずは探索から実装してみます。 ルールは狭義には、コウと自殺手判断ぐらい。厳密には終局計算を含む。
昔アップルIIの囲碁ソフトはウッテガエシが打てなかったよ。
返品しようとおもったがそれ以外なかった。
どのルールも1石の自殺手はできないがSSTルールやニュージーランドルール
は認めている。
日本ルールではセキは地にならないが、中国ルールではなる。
とにかく市販ソフトでもセキ判断は完全でないのでルールが完璧とは
いえないのでこちらまかせ。
でもルール作りのハードルが高いならシチョウ、ゲタなんてもっと大変よ。
がんばってください。
>>どのルールも1石の自殺手はできないがSSTルールやニュージーランドルール
は認めている。
スマン。表現がおかしい。
多石の自殺手を認めているという意味。
パターンが楽なんじゃないの?
こんな形は1間で、これは2間、ケイマ、とか色々。 候補手列挙を学習する方法ってない?
例えば、パターンだったら
探索した結果良いものを集めてデータベース化していくと。
でも、パターンだとマッチングが大変じゃない?
ある点が候補としてあげられるかは
その点の付近のパターンを、データベースで比較しなくてはならない。
ハッシュを使えばいいのかな。 学習だったらプロ棋士の棋譜を使えばいいんじゃない?
たしか公開されてたはずだしね。
パターンマッチングの高速化はどうするんだろうね。
データベースをハッシュでまとめてしまえば高速で可能なような気もする。
完全一致から似ている形まで、とかなると難しそうだけど。
あと、単純なパターンだとうまくいかないかもね。
この石はシチョウで取られる、とか、ダメが2以上ある、とか
色々な情報をパターンの中に組み込む必要があるかも。
ここに打った場合の手順とかも。 データがあっても、アルゴリズムがないとね(藁
似ている物まで探してくるのは無理だと思うなぁ。
似ているの基準から定義しないとわからんけど。
>あと、単純なパターンだとうまくいかないかもね。
候補を列挙するだけだからいいんじゃない?
あとは、それを探索するだけ。 ハッシュよりも実プログラムでは2分木探索が速いという報告もありムヅ。
普通に照合するよりは何十倍か早いだろうけど。
パターンは骨格と肉付けがあり、20年前の同級生で様子が違ってもある程度
認識できるのと似ている。黒、白、空点と、黒白空点どちらでもいいというのが厄介。
rotationで8種類、反転で16種類ある。広さの問題もあるなあ。
人間は碁をやって入ればますます、パターン認識は早くなるが、機械は照合に
ドンドン時間が食われる。ここに根本的な問題ありだろ。
AI囲碁で2000くらい。最初手入力してたらしいが途中からBITMAPにして
グラフィックエディターで入力したらしい。うまいね。
学習のアルゴリズムかぁ。
分からんね(w
完全一致で出現した回数とかなら簡単だけど。
大量の棋譜から学習で楽をしよう、というのは誰もが誘われる麻薬みたいな
もの?だが実際は少数のパターンを人間が自分で判断して打ち込んだほうが
精度の高いものが出来そうな気もする。
何より、プログラムがその手をなぜ打ったかを推理できるからね。 >ハッシュよりも実プログラムでは2分木探索が速いという報告もありムヅ。
2分木にする時のキーとして、何を使うの?
それがハッシュコードなら
ハッシュテーブルの大きさによると思うよ。
似てる物を集めてくるのはちょっとつらいよね。
>だが実際は少数のパターンを人間が自分で判断して打ち込んだほうが
>精度の高いものが出来そうな気もする。
おそらくそうだと思う。
だから、外からのデータを与えるんじゃなくて
自分でデータを生成検証して、候補手を生成するアルゴリズムを
学習するようなものがいいね。
あらかじめ、全ての手を計算しておいて、データベース化しておく。
データベースの構築には、膨大な計算力とディスクスペースが必要なので、
SETIのように分散処理で解決。
データベースができた後は、最善手のみが打てる。
一度プロジェクト起こしてみては?
それなりに金になると思うぞ。
あと、首謀者は地位と名誉も得られる。 もし、それで碁の必勝法がみつかれば、歴史に名が残るね。
少ない資金で多大な効果が得られる、数少ないプロジェクト。
早い者勝ちだぞ。 お前ら・・・囲碁の可能な局面の数は
3^19^2 = 10^230 にもなるんだぞっと。 3^19^2 = 1350851717672992089 ≒ 10^18
1千万台(10^7台)のコンピュータを使えば、10^11回の演算で済む。
1台のコンピュータが1秒に3170回の演算が行えるとして、10年間。
現行の性能では難しいが、将来は可能になるかもしれない。
可能になった時点で、誰が先に演算を終えるか?
先に演算を始めた者に決まってる。 オセロならもっと早く演算が終了する。
早い者勝ちだぞ。
ゲームを消滅させろ。 >>2分木にする時のキーとして、何を使うの?
パターンをbit化すればいいのと違うかな?
>>ハッシュテーブルの大きさによると思うよ。
そうだね。やって見ないとわからない。ハッシュの計算や衝突の際の探索も時間がかかるし。
でも2,3千のパターンではアマ初段には間に合わない。
瀬越の手筋辞典や官子譜見たらとんでもない筋やパターンがでている。
NHK囲碁の解説聞いていても「これは筋ですねえ」といわれても、知らない、わからない
のが結構多い。筋の定義もムズだが、パターンとも共通性があるし。
コスミ自体は1種類しかないが、周りの状況でヨセからワタリ等等役目はゴマンと
ある。要するにパターンは目的を入れないと絵に描いたモチ。
分散処理で計算する方法は考えたんだけどさ、
黒(自分)が最善手を常に打つとして、
白(敵)が最善かどうかわからない手を打つとすると
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桁はあるな。 >>311
候補手といっても、いろいろなレベルがあると思う。
例えば、どの手を選んでも悪手にはならない
候補手の列挙から
どの手を選んでも良い手であるような
候補手の列挙から・・・
あるいは攻撃的な手だけを列挙できるようになるのも
有効だし
守備的な手だけを列挙できるようになるのも有効だね。
候補手が列挙できたら、あとは探索するのみ。 今考えてるのは
精度の粗い候補手列挙システム
(つまり、悪手は切り捨てるけど良手は絶対に切り捨ててはいけない。
判定不能の物は残す)
と
高機能なαβサーチの組み合わせでの
アルゴリズムを作ろうと思ってる。
候補手列挙は、やっぱり周辺パターンのデータベースしか
ないのかな。
候補手列挙で一つ思いついたのは、
応手作成アルゴリズム。
相手の手を、どんな手なのか予測分類して
(2つに分類するなら、攻撃的か守備的か)
候補手を列挙する。
まあ、まだアイディアを練ってる段階だけど 絶妙手をも切り落とさないシステムだと大変かもね。
そういう手は弱いレベルには悪手だから。
プログラムの棋力にふさわしい普通の手が10手から20手程度抽出できれば
十分じゃないかな。
囲碁はまだそれほど深く読めないので(シチョウは除いて)
探索手法自体の重要性は低いと思われ。
やはり最大の難関は評価関数かと。
地の判定から、石の連絡、強弱、空間の支配力、
この辺を適当に数値化しないといけないからね。 ■ このスレッドは過去ログ倉庫に格納されています