おまいら最強の将棋プログラムしてみろよ part6

このエントリーをはてなブックマークに追加
501デフォルトの名無しさん
おれも>>500と同意見。
結局、相手の思考を予測するってのは、自分の思考に自信が無い時の小手先の対策なんじゃね?
502デフォルトの名無しさん:2007/10/22(月) 23:21:25
>>498-499
相手のアルゴリズムを読んだとしても、その相手はこっちを騙すためにわざと気付かないふりをして
弱く見せかけているのかもしれないぞ
相手を見て判断するのは対人戦での面白さを出すには重要なとこではあるけどさ
503デフォルトの名無しさん:2007/10/23(火) 00:00:10
>500-501
人間のトッププロにはなかなか勝てない(全体的な実力では上回れない)
からこそ、そういう戦略に価値があるのでは?

例えばコンピュータ将棋は詰みのある局面でそれを発見するのが
やたら速いが、相手(人間)もそうだと仮定していたらその利点は
あまりうまく生かせずに>498の挙げたような状況に陥るかも知れない。
詰みを正確に速く見つける能力がむしろ弱みになってしまう。

>502
特定の相手の指し方を事前にじっくり研究していたらどうかな?
たとえば対渡辺竜王を想定して。

ディープブルーも実はカスパロフの指し手を事前にたっぷり研究して
相手の指し方のモデルを持ってたと言う話だし。
504デフォルトの名無しさん:2007/10/23(火) 00:08:06
>>503
個人的には、そういう方向性が好きなのだが、
こと「プロに勝つ」という目的においては、>>500が正しいと思う。
というか>>503の方法でプロに勝つには、とてつもないプログラム技術と
ハードウエア能力が必要になって現実的でない。

プロに勝つというのは、ほっといても100年後には達成できるけど、
楽しめる、指導してくれる、というコンピュータ将棋が今後の課題やね。
505デフォルトの名無しさん:2007/10/23(火) 00:25:15
>504
その考えが甘いとしたら。

つまりコンピュータが人間のトッププロより圧倒的に強くなると言う事は
相手がどんな指し手で来てもそれに対して正しく応手できると言う事だが
将棋と言うゲームがそう御しやすいもので無いとしたら厄介だぞ。

その可能性は多いにある……と俺は思う。

それよりは対戦相手のモデルを持っておいて相手の思考の癖(隙)を突いて
序盤からジワジワ優位を築いて行く方がまだ望みがありそうに思える。
確かにセコイ方法だけどなw。
506デフォルトの名無しさん:2007/10/23(火) 00:57:32
>>505
確かに俺の考えが絶対に正しいとは言えないが、
相手モデルとかでプロに勝てるなどというのは
とんでもなく甘い考えだと思う。

>>505がセコイ方法だとは全く思わない。
実現できたら本当に素晴らしいが、実現が難しすぎる。
507デフォルトの名無しさん:2007/10/23(火) 02:07:42
{41, 85, 45, 12, 02, 77, ・・・}  (これがひとつのデータです) という可変長データが複数あるとします
これらを効率よくメモリに記録するにはどうしたらいいですか?
508デフォルトの名無しさん:2007/10/23(火) 02:08:36
場所まちがえました すみません
509デフォルトの名無しさん:2007/10/23(火) 03:07:52
あんまりセコクない対人戦略だと、
短時間の勝負ほどコンピュータ有利であることを考えて
時間攻めがいいんじゃないかな?

極端な例だと、80台パソコンを連結して並列に先読みさせる。
可能な相手の指し手が80ある局面なら、人間の思考時間に全部考えて、
ほぼノータイムで指すこともできるはず。
そうされると持ち時間2時間でも、正味1時間位に感じるんじゃないかと。

あるいは、"少しよくなるけど局面を単純化する手"より
"よくもわるくもならないけど局面を複雑化する手"を優先する方針にする。
そうすると選択肢が多くなり、人間側の読み筋から外れる率が高くなる。

人間の場合かなり前から現在の局面のことを考えているので、
先読みを空振りさせた場合の負担は、コンピュータよりずっと重いはず。
一から考え直すことになって、かなり苦しくなるじゃないかな。
510デフォルトの名無しさん:2007/10/23(火) 10:16:44
竜王と対戦したボナンザも、予測読みが当たればノータイムで指した。
また、ボナンザは人間なら早期に枝刈りしてしまう手を指すこともあったので
読みを空振りさせるという点でもそれなりにできていた。
80台のパソコンというリソースがあるなら、普通にやらせても強くなるから
下手な小細工では意味がないということになると思う。

いや、、アイデアを否定してばかりであれだが、
実際そういうアイデア自体は貴重だし、生かしていくべきだと思う。
ただ、それはすごく難しい(だからこそ素晴らしい)と言いたかった。
511デフォルトの名無しさん:2007/10/23(火) 10:27:47
相手の指しやすい手から調べるのはかなり有効な手法だよ プロの棋譜、定跡を使うのはその為
個人に限定してもよい
512デフォルトの名無しさん:2007/10/23(火) 19:25:07
>>510
持ち時間1時間として
コンピューターが3回に1回ノータイムでも、1時間つかいきれば
人間側の思考時間は、自分の持ち時間と合わせて2時間ある
コンピューターが全部ノータイムの超早指すると
人間側の思考時間は、自分の持ち時間の1時間しかない
読みを空振りさせる回数が3回位増えると
1回あたり数分位とられるから10分くらい損する
ぜんぜん違うと思うんですが‥

結局、80台を良い手を捜すためにつかっても、2割位しか
最前手が変わらないなら、時間攻めで人間が間違うのに
かけた方がお得なように思うわけで

実際、複数台での並列先読みや、局面の複雑度を測ったりするのは、
相手の指し手の傾向をつかむより遥かに容易じゃない?
自分のプログラムはまだ弱いのでそんな段階ではないけど。
誰か人柱にならないかなあ。
513デフォルトの名無しさん:2007/10/23(火) 20:42:31
台数が80倍になると、一般的に思考時間を9倍にしたくらいの強さになる。
つまり、思考時間:1分、強さ:1台9分相当を選択するか、
思考時間:0分、強さ:1台1分相当を選択するかという問題になる。
(人間が常に同じ時間を消費するという前提)

コンピュータよりも人間の方が持ち時間の価値が高いことを利用するわけだ。
悪い手は切り捨てて愚直に80手読まないようにするなどの工夫もできる。
そうなると普通の予測読みとの境界がぼやけてくる。
俺は、通常の予測読みがいいと思う。俺も実測してないのでこれしか言えない。
514デフォルトの名無しさん:2007/11/01(木) 23:44:59
あの自演犬やってないと言い張ればいいと思ってるな
バレてないと思ってるのは自分だけだぞw
515デフォルトの名無しさん:2007/11/15(木) 01:22:32
ああ?おお?
516デフォルトの名無しさん:2007/11/18(日) 00:48:45
ボナンザVS勝負脳―最強将棋ソフトは人間を超えるか
http://www.amazon.co.jp/dp/4047101079/
517デフォルトの名無しさん:2007/12/04(火) 04:01:56
将棋のプログラム作っている人の開発環境が気になります。
VC6++っていうのは古いでしょうか?
518デフォルトの名無しさん:2007/12/04(火) 08:18:42
将棋ならコンパイラやIDEは関係ないと思うが、
VC2005EEがある今、VC6を使う理由がない。
519デフォルトの名無しさん:2007/12/04(火) 08:33:00
VC++6は軽い
520デフォルトの名無しさん:2007/12/04(火) 09:39:10
VC++6ってインテリセンスのだいぶ貧弱だったような
521デフォルトの名無しさん:2007/12/04(火) 19:52:33
まぁ、x64がコンパイルの出来ないでいいならVC++6でいいんじゃね。
522デフォルトの名無しさん:2007/12/04(火) 23:33:57
>>518-521
みなさんどうもありがとうございます。
VC++6でもよさそうですね。
523デフォルトの名無しさん:2007/12/05(水) 01:05:57
VC++6はバグが多くて嫌
524デフォルトの名無しさん:2007/12/05(水) 11:00:20
つーか、>518を読んでどうしてそういう結論になるのか判らん。
まぁ、VS6の正規ユーザで尚且つ時代遅れのPCを使っているというなら止めないが。
525デフォルトの名無しさん:2007/12/07(金) 00:45:10
VC6は2004にバージョンアップ版が出ている
新しいVistaつかうより、バージョンアップされたXPの方がいいということもある
526デフォルトの名無しさん:2007/12/07(金) 10:48:37
仕事じゃなければ好きなのを使えばどれでもいいさ
527デフォルトの名無しさん:2007/12/07(金) 12:17:57
VC6なぜか人気あるが自分の経験から言うとあまり印象よくないな。
特に付属のSTLかなりバグがあってひどかった。
528デフォルトの名無しさん:2007/12/08(土) 00:17:48
今となってはかなり古いコンパイラだから
テンプレートのサポートが微妙だったりするけど
自分の使い方では2003よりもよかったよ
インストール早いし、起動軽いし

STLはSTLPORTいれて使うもんだと思ってる。

そんな私も2005に移行しましたが。
529デフォルトの名無しさん:2007/12/14(金) 14:21:23
VC6の怖いとこは
一見するとコンパイル通って正常に動作しているようでも
トンデモな解釈をコンパイラがしている箇所があったはず。

std::cout << typeid(1.0F==1.0F).name() << std::endl;
std::cout << typeid(1==1).name() << std::endl;

仕事だからVC6とかいう発想は
無責任もいいとこ。

まともなコンパイラの機能テストをしていれば
Noob以外はそのような発想はしないでしょう。
530デフォルトの名無しさん:2007/12/16(日) 18:57:57
ぼ、Borland C++ Builderは? いいの?
531デフォルトの名無しさん:2007/12/22(土) 11:59:41
USIプロトコルの info コマンドって、minmax探索に偏ってるね。
MC+UCTだと info string ばっかになりそう。
もうちょっと融通利かせないとUSIプロトコル使う意味なす…
532デフォルトの名無しさん:2007/12/23(日) 11:08:28
>>531
setifnomenuコマンドなんてのが必要かもね。
533デフォルトの名無しさん:2007/12/23(日) 11:12:16
setinfomenuだった。
534デフォルトの名無しさん:2007/12/23(日) 23:38:23
info pvで「最後のモンテカルロシミュレーションの手順」でも送ってやればいいんじゃね。
GUIがちゃんと対応出来るかどうかは知らん。
535デフォルトの名無しさん:2008/01/08(火) 01:29:44
最強じゃなくてもいいからだれか大局将棋実装しておくれw
536デフォルトの名無しさん:2008/01/08(火) 19:45:25
やるからには最強を目指す!
ところで大局将棋ってナニ?
537デフォルトの名無しさん:2008/01/08(火) 20:11:06
538デフォルトの名無しさん:2008/01/08(火) 21:05:25
539デフォルトの名無しさん:2008/01/08(火) 22:32:19
ごめん、やっぱムリ。
てか、駒の動かし方全部把握してるヤツ居るのか、これ?
540デフォルトの名無しさん:2008/01/09(水) 00:20:09
仮に把握できたとしても、動かす気になれねぇ。
541デフォルトの名無しさん:2008/01/09(水) 03:23:18
ttp://taikyokushogi.hp.infoseek.co.jp/tkpieces.html
>>537のサイトに駒の説明があるけど

ページなげえw
542デフォルトの名無しさん:2008/01/09(水) 03:50:51
http://game14.2ch.net/test/read.cgi/bgame/1163033955/
最長テンプレだと聞いた。
543デフォルトの名無しさん:2008/01/09(水) 05:23:40
スレを立てるたびに貼る必要はあるのか…
最長の地位を保つための儀式なのか…
544デフォルトの名無しさん:2008/01/09(水) 07:43:19
こんなのランダムに動かしてれば人間の方が飽きて投了するだろw
545デフォルトの名無しさん:2008/01/09(水) 14:41:35
大局将棋はゲーム性が低いな
546デフォルトの名無しさん:2008/01/12(土) 19:35:41
ゲームと言うより占いの儀式みたいなものだったって聞いたような気がした(うろ覚え)。
547デフォルトの名無しさん:2008/01/13(日) 11:05:39
>>537
テレビ番組で、プロ棋士同士が対局してたな
駒の動かし方は本を見ながら確認してたw
1日では勝負がつかず、3日くらいかけていたと思った
548デフォルトの名無しさん:2008/01/13(日) 11:27:29
トリビアだな
549デフォルトの名無しさん:2008/01/13(日) 12:28:25
森羅万象棋作ろうぜ
550デフォルトの名無しさん:2008/01/13(日) 13:31:07
「バーサーカーソウル!」
551デフォルトの名無しさん:2008/01/13(日) 17:43:31
市販の将棋強すぎだろ。なんか将棋もプログラミングもやる気ナクナタ・・・
552デフォルトの名無しさん:2008/01/13(日) 18:23:59
おまいが弱いだけ
553デフォルトの名無しさん:2008/01/13(日) 21:01:55
前回のGA見てみろ。やる気沸くぞ。
554デフォルトの名無しさん:2008/01/17(木) 07:02:17
もっとこのスレ盛りageようぜ
555デフォルトの名無しさん:2008/01/19(土) 02:12:54
【訃報】チェス元世界王者、ボビー・フィッシャーさん死去 64歳
http://mamono.2ch.net/test/read.cgi/newsplus/1200665136/
556デフォルトの名無しさん:2008/01/20(日) 14:49:16
C言語でやってる人いる?
C++の方がいいのかな?
557デフォルトの名無しさん:2008/01/20(日) 14:56:43
C++の方がいい
部分的にC言語やアセンブラも使える
558デフォルトの名無しさん:2008/01/27(日) 14:07:14
スレッド使ってますか?
559デフォルトの名無しさん:2008/01/28(月) 16:28:29
使ってますがなにか?
560デフォルトの名無しさん:2008/01/28(月) 17:11:16
もう、ブルージーンで最強のチェスプログラムできちゃったので将棋プログラムは興味ないわ
561デフォルトの名無しさん:2008/01/28(月) 18:20:44
門外漢がよーいうわ
562デフォルトの名無しさん:2008/01/28(月) 19:46:33
作ってる人近況報告してよ
563デフォルトの名無しさん:2008/01/28(月) 20:34:23
強化学習してる。死にそう。
564デフォルトの名無しさん:2008/01/28(月) 20:45:55
いちから作り直してる。
565563:2008/01/28(月) 21:01:55
>>564
ばかやろう、俺なんてマイナスからの出発だぞ。
566564:2008/01/28(月) 21:16:24
>>565
なんだよ、マイナスってw

以下、マジレス。
おとといのUSIエンジンの登場でモチベーションがかなり上昇した。
弱くても、勝てなくても、笑われても、それでもいいからとにかく形にすることに決めたよ。
567デフォルトの名無しさん:2008/01/28(月) 22:13:56
>>566
ランダムざしに負けるのがマイナスじゃね?
568デフォルトの名無しさん:2008/01/28(月) 23:16:28
俺も強化学習やってる
俺よりは強いんだが・・・
569563:2008/01/28(月) 23:20:41
パソコンぶっ壊れたから修理するところから。
あと、部屋が汚くてどこに本があるか分からないから掃除するところから。

>>567
負けそうだから怖い。
570デフォルトの名無しさん:2008/01/28(月) 23:21:31
>>568
出現頻度の低いパラメータって学習が遅くね?
なんか対策考えないとなぁ。
571デフォルトの名無しさん:2008/01/28(月) 23:32:52
>>570
自分は出現頻度が低いパラメータは保持したまま
別のパラメータが変わるような局面に分岐させたりしてる
ちなみに効果の程は測ってないけど
572デフォルトの名無しさん:2008/01/28(月) 23:45:18
7五玉で投了
573デフォルトの名無しさん:2008/01/29(火) 19:40:24
>>571
なるほど、賢いなぁ。
俺は猿だから対局数でごまかそうかなっと。
574デフォルトの名無しさん:2008/02/05(火) 20:51:11
れさライブラリ使ってる人いる?
575デフォルトの名無しさん:2008/02/07(木) 15:10:40
あの! Delphiで将棋作るとC++より速度遅いですか?
576デフォルトの名無しさん:2008/02/07(木) 16:07:46
ボーランド製品ならどう速度だろ
577デフォルトの名無しさん:2008/02/07(木) 16:13:51
あの! Delphiで将棋作るとVisual C++より速度遅いですか?
578デフォルトの名無しさん:2008/02/07(木) 16:16:26
最適化や個人の技術によるが同程度ならVCの勝ち
579デフォルトの名無しさん:2008/02/09(土) 21:48:35
あの! Delphiでインラインアセンブラだけで将棋作るとC++より速度遅いですか?
580デフォルトの名無しさん:2008/02/10(日) 18:10:11
並列化のことで何年か前にYSS掲示板で議論になってましたけど

すごく初歩的な話なんですがrootでsplit(分割)する/しないってのは
どういう意味だったんでしょうか?

最初の深さ1だけは読んで、そのそれぞれの(1手読みの)手を並列化するのが
「rootでsplitする」でいいのかな?

しない、ってのはどういうことなんでしょう?
581デフォルトの名無しさん:2008/02/10(日) 22:43:52
YSS掲示板で訊いた方がいいんじゃね?
582デフォルトの名無しさん:2008/02/11(月) 09:44:18
あまりに初歩的すぎかなとおもって・・・
583デフォルトの名無しさん:2008/02/11(月) 11:46:16
真面目に質問すれば大丈夫
584デフォルトの名無しさん:2008/02/11(月) 11:48:45
あ,ここより将棋板の方が人(実際に作ってる人)が多いから
そっちでもいい alternative だったか,開発者用のスレがある
585デフォルトの名無しさん:2008/02/11(月) 13:40:49
32bitパソコンを使ってますがintでなくcharを使うと
メモリの節約にはなるが速度は遅くなるのですか?
586デフォルトの名無しさん:2008/02/11(月) 13:45:01
メモリアクセスが減るから速くなるケースもあるかもしれません。
要は、一概には言えないのでテストケースを充分絞って実験してみることです。
587デフォルトの名無しさん:2008/02/11(月) 14:21:17
char や floatが遅いというのはデマ
キャッストに時間がかかるというのはデマ
588デフォルトの名無しさん:2008/02/11(月) 14:22:39
へぇ〜今調べて自己解決しますたと言うところだったんですが
一概に言えないのですか。へぇ〜
589デフォルトの名無しさん:2008/02/11(月) 15:06:51
そりゃそうだろ。メモリ2GB程度のパソコンごときで1G件のデータを扱おうとしたら
charじゃないとswapしまくりで遅くてしゃぁない。
590デフォルトの名無しさん:2008/02/11(月) 15:18:39
将棋では1Gも使わないでしょう。
ところでYSSの人は配列は2のべき乗にすると速くなると言ってますが
みなさんそうしてるのですか?
591デフォルトの名無しさん:2008/02/11(月) 15:22:57
それはデマ スワップが発生しないように最低限の確保が速い
592デフォルトの名無しさん:2008/02/11(月) 16:05:18
へぇ〜デマばっかりなんですね。
今のパソコンと将棋ソフトでスワップはないと思いますが。
でもそう言うには相応の理由があると思いますが、
実際に実験してないけど理論的には速いはず、というところでしょうか。
593デフォルトの名無しさん:2008/02/11(月) 16:07:36
512や1024ならスワップ起こるよ
OS、ほかのプログラムが動いているとハッシュテーブルがメモリ外に出ることがある
するととても弱くなる
たとえばボナンザで実験するとわかる
594デフォルトの名無しさん:2008/02/11(月) 18:13:57
>>580
rootでA,B,Cと候補手があるとして
BやCの評価値の評価値を並列に探索して求める場合はrootでsplit。
Bの評価値が確定してからCを探索する場合はrootではsplitしていない。
595デフォルトの名無しさん:2008/02/11(月) 20:56:25
>592
デマというか、ハードウェアとかコンパイラに依存するので時代によって……
596デフォルトの名無しさん:2008/02/11(月) 22:41:19
>>594
ありがとうございます

>BやCの評価値の評価値を並列に探索して求める場合はrootでsplit。

というのは直観的に理解できそうです
rootでとりあえず指し手を列挙してみて
おらこれとこれとこれがあるから行ってこいやぁ、みたいなw

でも
>Bの評価値が確定してからCを探索する場合はrootではsplitしていない。

というのがよくわかりません
この場合、どこで並列処理(並列化)をしているのでしょうか?
597デフォルトの名無しさん:2008/02/11(月) 23:35:35
Bにも子供たちが…
598デフォルトの名無しさん:2008/02/11(月) 23:46:07
てことは……

深さ0(? 現局面のこと)で指し手を列挙して
おのおのの指し手について並列するのがrootでsplit

深さ0で指し手を列挙したあとその指し手の1つをまず取り出して
そこからの指し手(深さ1以下の指し手)について並列するのがrootでないsplit

ってことですか?

実際の方法論としては
たとえば候補手が50個並んでいて
CPU1が候補手aを、CPU2が候補手bを読んでいって
先に終わったほうが候補手cを読む……という「仕組み」自体はいっしょで
それをrootでやるかそうでないかだけが違う(というかYSS議論では違ってた)
ということでしょうか?
599デフォルトの名無しさん:2008/02/12(火) 02:48:08
>>598
深さ0で指し手がA0、B0、C0と3つあるとすると、今のプログラムは
A0の手を調べるのに全体の50%の時間を使ってしまいます。
そこで、A0の探索が終わった後に、B0、C0の2つの手を並列に探索します。
その方がA0の探索の結果を使えるので効率がいいためです。

A0の手の下にはA01、A02、A03の3つの手があるとすると、
A01の手を調べるのにこれまた50%の時間がかかります。
そこで、A01の探索が終わった後にA02、A03の探索を並列に行います。

こうやって延々続いていきます。
深さ0でも並列に探索するのが「rootでsplit」で
深さ0でのみ並列に探索しないのが「rootでsplitしない」です。
「rootでsplitしない」場合でも深さ1、深さ2、、、、ではsplitします。
600デフォルトの名無しさん:2008/02/12(火) 10:33:34
並列化ド素人の自分だが
Aspiration searchの真ん中の値で二分すれば
単純に二倍速くなりそうという感じは受ける。
ちょっと試せないので分からないけど。

ボナンザも歩の交換値2つぶんでAspiration searchをやってるらしいので。。

やっぱり問題はその次からの一回の探索を分ける方法だねえ。