トップページ⇒tech
42コメント23KB

【ニ】対KCС囲碁【ダ】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ィョゥおまえら
マ板の住人として、KCC囲碁を上回る囲碁ソフトを開発しないか?
北朝鮮を乗り越えるというより、オフィシャルな行事に2chの名前を
というわけで、とりあえず語れ
0004デフォルトの名無しさんNGNG
>>3 しるか
0005デフォルトの名無しさんNGNG
>>4
黙れ
0006デフォルトの名無しさんNGNG
>>5 うるせえ
00071NGNG
>>3
最強かどうかは分かりませんが、かなりの実力はあると思われます。
0008デフォルトの名無しさんNGNG
>>6
糞が
0009デフォルトの名無しさんNGNG
>>7
国内でのトーナメントってがあった気がするが、そこらへんの紹介はしてくれへんの?
00101NGNG
>>9
トーナメントでの成果を期待するより、トーナメントに出せる代物が作れるか否か、じゃないですか?
GAでの困難問題はどれも採用してるだろうから前提として、
ライフゲーム的なアプローチでなんかいい案ないかと思ってんですが
0011デフォルトの名無しさんNGNG
棋譜を死ぬほど詰め込んで、パターンに無い変化のみ特定のアルゴリズムで。
これ最強。
0012デフォルトの名無しさんNGNG
1が何か第一歩となるシステムを作らんと
00131NGNG
>>11
問題は、棋譜をどうやって解釈させるかなんですよね。
棋譜の詰め込みによる学習はどのソフトでもやってると思われり。
たぶん、ヌーラルネットワークで定石や、手を評価してると思われ
>>12
作る前に予想してこそマ(r
0014デフォルトの名無しさんNGNG
おもしろそうだから参加したいけど、なんかアイディアある?
NN や GA、GP に幻想抱いているようなレベルじゃないよね!?
一番重要なのは探索手法ではなくて、手の評価値(適応度)を
どう具体的に決めるかなんだけど、難しいよなぁ。
0015デフォルトの名無しさんNGNG
どなたか詳細じゃなくてもいいから、一般的なアルゴリズムやアーキテクチャを紹介してくださいな。
NN、GA、GPといわれてもいまいちよくわからなかったり・・・

アイデアだけど個人的には愛称の悪い定石を遠慮なく使わないように
大量の棋譜のなかから最適な定石をデータベース化できるようにしたい
隅と辺との境目の攻防が弱そうなのは勘弁だからねぇ

隅、隅と辺、辺と中と徐々に思考ルーチンを切り替えていく展開がいいかなと
00161NGNG
>>14
手の評価値は、サル探索ではなく、統計的なアプローチでかなり楽してるのが一般的だと思います
部分的・最終的には探索的なんだけど、全体としては。。という感じ。はい、むちゃくちゃ探索的ですよ?
一般的には、打っている人間を模した、嗜好を決定する部分と、戦術(たとえばここは破棄する、互角に持ち込むとか)を決定する戦略的な決定、具体的な戦術を困難問題として決定する部分。
(1000円のソフトでもこういうの採用してるんじゃねーかな)
手の算出には、3次元可視化する必要があるかはわからないけど、なんらかのヒエラルキー的な概念を抽象的に表現するのが必要ですよね?ね?
たとえば、ある場所はもはや打てる場所がないため、勝ち負けは決定しているから(r ここは勝ち負けが微妙だけど、負けるわけにはいかねー、とか
それを考えないと、戦略的な視点からの戦術提案ができなかったり、必要ねぇところに演算能力浪費したり。
戦術提案ごとにクワッド木を作成して、干渉があった場合、どちらを採用するか、というプロセスが妥当な線(r
で、これくらいのことは、すぐ思いつくわけで、ということは、どのソフトも考えてるわけで。
>>14が探索的手法に対して、幻想といったが、理由を知りたい。オーダーにn^が出現するからですか?pgr
語調が汚くなりましたが、バカにされてる印象を受けたので、顔を真っ赤にして釣られてみましたごめんなさい
NN/GAはゴリゴリ採用することになると思いますよ。GPってなんですか?

>>15
ソースが公開されているとなると、Javaアプレットの囲碁練習用のがあるんですが、
あれ、めちゃくちゃ巡回セールスマン問題って雰囲気があって、芋かもしれませぬ

棋譜から定石の出現を抽出して、近しい位置で違う定石が出現したらその関連性を強くするっての、よさそうですね
経験として良さそうな定石または、定石の使用を提案する確立が比較的高くなる、というとらえかたですね。
切り替えるのは、まずいかもです?タイムシェアを、たとえば、隅が現在の戦場というか、注目するべきところなら、そこに対する演算の割合を増やす、とかそういうアプローチじゃないと、遷移型ではなく逐次計算型になってしまって
あと、ダイナミズムにかける希ガス
0017デフォルトの名無しさんNGNG
人の局面の判断をどう数値化するのかってのが、
「弱くは無い定石指向」を実現する上での最初の課題だよね
その次が「間違いの無いヨセ」、これは前述の定石アプローチがきちんとしてればそつなくこなしてくれると思う
最後の段階が「勝つ為の妙手」、俺は囲碁が弱いので正直これはわからないw

前述二つがメインで、特定のパターンを発見した時に「勝つ為の妙手」を差し込んでいく形だと安定しないかな?
00181NGNG
>>17
そうですね。
局面の判断は、かなりの部分で確立論的な解釈ができるのはないかと、踏んでいます。
たとえば、話が交錯しますが、妙手と言われる手は、個人の高い技量から導き出された、
「(凡人が)思いつく確立はとても低い」手であると仮定すれば、どの程度まで試行を行えば、
「これくらい考えりゃいいんじゃ?」っていう試行数が求められると思います。
で。
そこで求められた試行数を元に、>>16で記述した盤の区分を元に探索問題解決して、勝てる確立として抽象化できねぇかなぁと。
例を挙げれば・・
区分Aで50回中40回の勝利つながり、現在は区分Bを中心に対し打っているので、
精度を上げるため試行回数を増やし、区分Bでは70回の試行を行い、30回の勝利、Cは50回中25回の勝利
区分は、戦術と考えれば、提案した戦術が勝ちまくれば、相対的に全体が勝っちゃうかもしれない、ってモデルです
その戦術がアボンする見込みが高くなったら、引き分けに終わる形にもっていけるような戦術を選択する・・・とか

定石はあくまで、省略された手順と考え、探索の演算量を軽減するもの、として考えたほうがよさげですかね
むしろ、相手が定石を重視することを考慮にいれ・・ あ、相手はソフトでしたね;o;
ヨセはもれも、なんとかなっちゃうんじゃない?とか、安直に考えてます
しぶとさを表現するために、試行回数をぐわっと上げるくらいで、いいんじゃないかな、と

戦術の抽象化がゼンゼンだと思います。
ヌーラルネットワークの経路を記述したものか...
0019デフォルトの名無しさんNGNG
棋譜上でのターニングポイントの付け所を判断できるといいかもね
勝ちパターンに導けるまで思考を繰り返すようにすれば、どこまで計算するかの目安も付けやすい
00201NGNG
>>19
なるほど..
全体的に見た勝率の変動が大きかった手は、重要度の高い手だ
という仮定ができそうですね
ターニングポイントがあり、そういう手がポアソン分布に従うとすれば、そういう手がでそうな時期の推測、その推測に基づいた演算量の上下とかへつながりそうですね。
計算量の目安として用いる・・
というのは、これから打とうとしている手を有利なターニングポイントとするためには、どれくらいの計算が必要か?を求める・・・
という意味ですか?
0021デフォルトの名無しさんNGNG
>>20
例えば勝ちパターンを記憶したリストがあるとしたら、そこへ導くまでのルーチンが一番の肝になる。
勝ちパターンに導くだけ計算コストは、全てを一元的に計算するより現実的な処理量で済むはずだよね。
目的の色模様に落ち着いたと判断したら、今度は勝ちパターンのルーチンにバトンタッチすればいい。
どこまで頑張ればいいのかが分かれば、自ずと計算量は現実的な有限になるという理屈。

あんまりこの手の知識が無いから説明がわかりにくいな。ごめん。
0022デフォルトの名無しさんNGNG
人の状態で吟味しつくした状態に持ち込めるかという勝負は、スポーツっぽくて面白い
00231NGNG
>>21
なるほど。
リストの探索は確かに、困難問題よりは演算が少なくてすみますね
しかし、強さをそれに依存させる場合、パターンや、パターンに持っていった後の手順の総量が・・・
厳しそうです。
色模様を選ぶという意味で、嗜好の一種として扱うなら、納得です。
戦術の提案というプロセスで、根拠として利用できそうです。
00241NGNG
>>22 強さの測定法ですか?
00251NGNG
ttp://ayusya.hp.infoseek.co.jp/AboutIgoApp.html
当面の目標として、これに勝つということで...?
0026デフォルトの名無しさんNGNG
今まで出たネタで良さそうなのを見繕って、1さんが作りたい形を決めるといいよ
002714NGNG
1さん、別に煽っているわけではありませんのでご理解を。
まず、NNはニューラルネットワーク、GAは遺伝的アルゴリズム、GPは遺伝的プログラミングの
略です。これが、囲碁に応用できるかというと、私は専門の研究者としてかなり否定的です。

まず、NN を使うというお話ですが、NN のパターン認識の能力ですが?それとも最小エネルギー
状態の探索の方(Hopfield model)?NN は任意の N→M 写像を学習可能ことが証明されてますが、
なんのパターンを学習するのでしょうか?
例えば、人間の書いた「あ」とう文字を認識するのなら、多少ずれても「あ」が「あ」に分類されてなんの
問題もありませんが、碁であれば一路石が違えば評価は激変する場合があります。
この辺が、統計で処理しきれない難しさかと思います。ちょっと難しく言えば盤面上のパターンとしての
位相と評価値空間での位相の相関が低いことが問題であるとうことです。これは GA でも遺伝子型空間と
表現型空間の位相の違いにつながり問題になります。
002814NGNG
つづき

GA、GP に代表される進化型計算は組み合わせ最適化問題に適しているといわれていますが、
囲碁は組み合わせ最適化問題ですか? まず、ある局面で最適の手を捜すという問題を考えま
しょう。実はこの問題は、探索空間は極端に狭く探索する意味すらありません。だって打てる場所は
高々19x19 しかないでしょう? おそらく「それは全然違う! それぞれの手の先には木構造で分岐する
多くの場合がありそれを探索しなければならないから複雑だ!」と思われるでしょうが、それは GA
ではどうしようもありません。GA は手の評価が数値として単純に得られるときにしか使えません。
これでは良く分からないので GA で良く使われる巡回セールスマン問題(TSP )と対比させて考えて
みましょう。TSP をご存じなければネットで検索してみて下さい。TSP では多くの解候補があります。
10都市問題でも 9!/2 もあり、100 都市問題ともなればとても全探索できません。しかし、一度閉路を
得れば、その評価(トータル距離)を得るのは10000都市問題であっても一瞬です。だから GA が適用
できるのです。結局、GA が使えるのは(膨大な解候補+解の評価の容易さ) が揃ったときだけです。
囲碁のように(高々400以下の手の候補+超難解な解の評価)という問題では使うのは難しいのです。
そもそも、手の評価が正確にできるのであればもう、最強囲碁プログラムは完成です。単に、 着手可能
な中から評価最大の手を打ち続ければいいだけですから。
002914NGNG
つづき

長々書きましたが、結論としては囲碁プログラムの肝は、各着手にどのようにして数値的な点数をつけるか?
がすべてだと思っています。データベースの利用が一つの方法ですが、それでは全然足りないのは自明で、
あとはその基本情報をどう汎化するかなんですが、今のところアイディアがありません。
例えば、今、ある隅の相手の石をこちらから攻めれば殺せることが分かったとします。しかし、大模様の要点
であるマゲも打ちたい。さて、どちらが大きいか?というのを数値的に解析する必要があるということです。
もちろん、正確にはプロでも無理でしょうから不完全なものしか実現できないでしょうが、不完全でも激ムズ
だと思います。特に抽象的な議論ではなく、プログラムとしての実装まで視野に入れるとちょっと私程度の
能力は越してしまってる感じ。

とまあ、こんな感じです。あまりこのスレの趣旨に沿わないようなら引っ込みますんで。
あと、よろしければみなさんの囲碁歴と棋力を簡単に教えていただけませんか?
私は、囲碁歴4年くらいで KGS 1d〜2d 程度です。あまり強くないので、もっと強い人にどのように、着手の
比較をしているかを教えてもらいたいです。
00301NGNG
>>26
じゃあ、まぁそんな感じで。
つっか、人、3人くらいしかいねぇんじゃ...orz=3
0031デフォルトの名無しさんNGNG
1さんがどのソフトにでもいいから、10目差負けくらいまでは頑張れるソフトを作る必要が在る
00321NGNG
>>14
ご丁寧に、どうも。かなりのやり手っぽいですね。頼りがいがあります。

まだ妄想レベルを脱していないので、具体的な回答はできませんが。
(最小エネルギー状態の探索=経路問題って理解でいいですか?)

NNに対する期待としては、前者(パターン認識)の部分、嗜好の表現性を考えています。
たとえば、どういう手の傾向を好み、その手に関連する候補として、どういうものが上げられるのか、という感じですね。
手と表現したものは、一石一石の投じ方を示すわけではなく、あるヒエラルキーを示したら、ここはどうするか?という抽象的な指針を示すことになります。
定石や色模様を組み込むといった関連性を表現することは、一般的なNNの用途であるCRMでの利用形態を考えると、実装の困難性は別として、表現可能っぽいし。
この場合では、膨大なパターンを解析しないでも、ある程度良質な解を得るための手法と見ています。

GAの利用は、NNから受け取った提案を最適化する目的で、と考えています。
問題となる手の評価に関しては(先にも書いた気がしますが)
たとえば、NNからの提案に従って試行を繰り返し、まぁこんくらい計算すりゃいいんじゃないってところでの勝ち負けの確立として評価します。
末端でみれば、完全な探索であり、GA採用による演算量の削減という効果はあまり期待していません。
むしろ、逆転写でしたっけ?突然変異のモデル、あれが欲しいというのも、大きな理由ですね。

で、肝心の、NNからの提案モデルですが、こういう手順がこの場合に近いというのを示すか、手を算出するルーチンへのパラメーターとして表現するのか、微妙です。
前者だと、それを優先的に検証して〜
後者だと、たとえば、ここは探索の深度を上げ、GA最適化の質を落とす(演算量はある一定の内に収まらないといけないという仮定の下で)

GPの目的は、生産性の向上じゃなかったですか?
生産性は関係ないだろうと思い、なんか違う香具師かなと思ったのですが。

棋力っていうか、俺は、趣味で囲碁ソフトをいじってるレベルですね。
着手の比較は、その手の意味が全うに説明できるか、その意味は正当か、って感じですか
00331NGNG
>>31
原型がねぇとナニモデキネーっていうのは、もっとも
あ、そういえば、言語決めてねぇや
アルゴリズムが肝になると思うから、誰でもあるていど読めるっていう理由で、Object PascalてかDelphiでいいと思うかい?
00341NGNG
てか、点呼とりますよおまぃら
1回以上挙手した香具師は漏れなく呪うからシクヨロ

じゃ、とりあえず俺から。ノシ
0035デフォルトの名無しさんNGNG
ノシ

しかし参加となると手を降ろすけどなw
00361NGNG
orz=3
003714NGNG
一応、見てますよ。
1さんへのアドバイスとしては…

1. コンピュータ囲碁 Great
2. GnuGo のソース

に目を通すことを強く勧めます。(もしチェック済みならごめんなさい)
その上で、少しずつプログラムを組んでいったらどうですか?

余裕があれば、オブジェクト指向言語とデザインパターンあたりをサラッと
勉強して、思考ルーチンを Strategy パターンで入れ替え可能な叩き台
プログラムを C++ か Java で組んでみるといいと思います。
0038デフォルトの名無しさんNGNG
スレ違いかも知れませんが
皆さん囲碁も知っていてプログラムを組める方なので質問します

 棋譜再生ソフトを作りたいのですが
どのような風に 棋譜データを表示させているのでしょうか?


最初にデータを読み込んで最後まで 取るなどの処理を終えたのを
配列に入れて 順番に再生でしょうか?

それとも計算しながらなんでしょうか?

0039デフォルトの名無しさんNGNG
最強の囲碁プログラム=プログラムをバグ・・・仕様で勝ちにする
超最強の囲碁プログラム=ユーザーが勝ったら腹いせにワームを仕掛ける
世界最強の囲碁プログラム=ユーザーが勝ったら腹いせにテポドン発射
0040 ◆R/rLuLKeEI NGNG
>>34:1
下手の横好きレベルですが、一応
0041デフォルトの名無しさんNGNG
囲碁の算法という本がいいらしいけど、検索したら絶版だった。
0042デフォルトの名無しさんNGNG
銀星囲碁5が強すぎて全く勝てません
■ このスレッドは過去ログ倉庫に格納されています