1 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:33:11 ] できたらよろこんでやる。 前スレ おまいら最強の将棋プログラムしてみろよ part5 pc11.2ch.net/test/read.cgi/tech/1109307327/
2 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:33:54 ] 過去スレ おまいら最強の将棋プログラムしてみろよ part4 pc5.2ch.net/test/read.cgi/tech/1086678961/ おまいら最強の将棋プログラムしてみろよ part3 pc5.2ch.net/test/read.cgi/tech/1064984089/l50 おまいら最強の将棋プログラムしてみろよ part2 pc2.2ch.net/test/read.cgi/tech/1043246252/ おまえら最強の将棋プログラムしてみろよ!! pc2.2ch.net/tech/kako/1004/10043/1004395614.html
3 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:34:36 ] 関連スレ ▲コンピュータ将棋スレッド35▽ コンピューター将棋番外編5・アルゴリズム game12.2ch.net/test/read.cgi/bgame/1175435755/ ▲コンピュータ将棋スレッド35▽ game12.2ch.net/test/read.cgi/bgame/1170114501/
4 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:35:08 ] TCP/IP通信プロトコル(コンピュータ将棋協会) www.computer-shogi.org/protocol/ アップローダ (Part3 929氏提供) gm.a-ark.net/~shogi/clip/clip.cgi CSAサーバ (Part3 773氏作、Part3 783氏提供) アドレス wdoor.c.u-tokyo.ac.jp 4081 棋譜など wdoor.c.u-tokyo.ac.jp/shogi/LATEST/
5 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:35:39 ] MTD(F) www.cs.vu.nl/~aske/mtdf.html ゲーム木の探索問題 tt.sakura.ne.jp/~suzu/search_problem/index.html 反復深化 tt.sakura.ne.jp/~suzu/search_problem/i_deepening.html 最良優先探索 kyu.pobox.ne.jp/softcomputing/ai/ai3.html 遷移確率、激指 www.logos.t.u-tokyo.ac.jp/~gekisashi/algorithm/abstract.html GNU shogi www.cs.caltech.edu/~mvanier/hacking/gnushogi/gnushogi.html 福将棋 touch-mi.hp.infoseek.co.jp/csa2001/prog.htm
6 名前:お前ら奇書、死んだほうがええ。 mailto:sage [2007/04/06(金) 16:27:37 ] あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あー面倒くさい。あー面倒くさい。 あ
7 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 23:39:31 ] ゴメンネ! オレ必至すぎてゴメンネ! ボナの最適化アルゴリズムが実は「強化学習」なんじゃないかなー? と思い始める前に 森北出版の『強化学習』R. Sutton・A. Barto著 (原著:Reinforcement Learning: An Introduction) をネット書店に注文していて、ちょうど今日届いたもんだから ちょっと舞い上がっちゃっててね。 そうであってくれると嬉しいんだ。 (でも、もしそうなら既に実現されていて、ちょっとくやしいw)
8 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 01:07:23 ] 強化学習って環境との相互作用から学習するというやつで バックギャモンのそれは自分との対戦から学習していくという方式 ボナンザのは探索こそしているけれど、環境との相互作用とはいいにくい だから、強化学習とは違うと思う。 どちらかというと統計的学習じゃないのかな
9 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 02:55:56 ] wikipediaのコンピュータ将棋の項を見ていて、 人工知能という単語が目に入った瞬間コーヒーふいた
10 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 06:14:23 ] なんで?>>9
11 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 12:18:15 ] まあ、昔から人工知能の課題とされて来たものは研究がある程度進展した 段階で必ず、もはや人工知能の課題とはみなされなくなって来た。 音声認識も自動翻訳も人間との(簡単な)会話もチェスも将棋も。 どれもまだ全然完全じゃないんだけどね。 (その昔、チェスを機械に指させる事はリッパな人工知能の課題だった) つまり「人工知能」って言うのは見果てぬ夢に対して付けられる 看板であって具体的な課題、技術、手法の事じゃないんだよ。
12 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 12:31:28 ] なるほど
13 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 12:46:42 ] >>11 の定義って一般的なの? 別にコンピュータチェスとか将棋とかが人工知能でも違和感ないのだけど 人工知能系の学会ではチェスや囲碁は研究されてないのかな
14 名前:デフォルトの名無しさん [2007/04/08(日) 16:09:08 ] >どちらかというと統計的学習じゃないのかな 正解
15 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 09:30:12 ] パターン認識は流石に外れてるかな ゲームはまだ人工知能に含まれてる プランニングは十分人工知能だし(ゲームもプランニングの一種)
16 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 09:47:19 ] プランニングって何? 計画を立てること?
17 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 15:51:02 ] 中学生でも知ってる単語だろうが
18 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:44:14 ] ごめん俺消防だから教えて
19 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 19:23:22 ] 行動計画だったかな。 目標状態を得るための行動の組み合わせと順序を探索他で決定するやつ。
20 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 23:36:07 ] 要するに巡回セールスマン問題とかナップザック問題とか言う奴だろ。 実用的にはLSIの配線とかにも利用されてるようだが。 研究者から見れば十分にAIの研究かも知らんが、素人目には これがAI研究ですって言われてもなあ……ジミだ。
21 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 11:31:14 ] アルゴリズムが発見されると、人工知能の課題でなくなっちゃうんだよな。 機械的に手順を踏めば解決しちゃうから。 >>20 それは線形計画法で実用上解決された。 AIとみる人はいないでしょう。
22 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 14:56:19 ] NPCみたいに人間の代打扱いするのが人工知能 道具扱いすれば人工知能じゃなくなる、と考えちゃ駄目?
23 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 16:24:42 ] 俺は人間も本当の知能ではなくて自動機械だと考える派だから 人工知能という物ができたならそれは人間を超えてないとダメ
24 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 01:30:55 ] >それは線形計画法で実用上解決された。 線形なものしか扱えませんが。 人工知能の定義として 人間の知能を構成するために必用な技術の総体 というのでどうでしょう? 問題が与えられた時に、 「人間はどうやって問題を解いているのだろう?」 と、人間と対比して考えるのが、 人工知能分野の特徴だと思いますが。 >人工知能系の学会ではチェスや囲碁は研究されてないのかな 難しいので直接扱う人はいません。 小手先の改良をしただけでは研究にはなりませんので。
25 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 10:06:30 ] どうでもいいけどお前らほんとに将棋プログラミングしてみてるのか? ゲ作厨が流入しているだけにしか見えんのだが。
26 名前:デフォルトの名無しさん [2007/04/12(木) 21:46:16 ] >>25 漏れはROMに近いが一応作ってるよ 先週のオープン戦には参加してきた
27 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 11:22:24 ] >人間と対比して考えるのが、 >人工知能分野の特徴だと思いますが。 素朴な考えだけど実際は違う 人工知能は「知的」な作業を機械化する技術を開発する分野 やり方が人間と似てる必要も無いし人間と対比させる必要もない ニューロモルフィズムと言うのがあなたの考え方に近いけど少数派 人間がどうやってるかを考えるのは認知科学(とか神経科学)
28 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 11:26:32 ] >要するに巡回セールスマン問題とかナップザック問題とか言う奴だろ。 ぉぃぉぃ もっと複雑なアプリが山ほどある 例えば介護/警備/レスキューロボットの行動計画とか 大規模な組み合わせ最適化問題は今でも十分AIの研究テーマ 連が木スマソ
29 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 12:34:04 ] 3球体問題は解けるの?
30 名前:デフォルトの名無しさん [2007/04/13(金) 15:41:20 ] >人工知能は「知的」な作業を機械化する技術を開発する分野 知的の定義は?
31 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:14:16 ] 知的とは人間に出来てコンピュータには出来ない知的行為のこと。
32 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:30:44 ] それじゃ人工知能の研究の意味ないじゃんw
33 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:22:48 ] 人間の脳も機会と同じく生体分子の形態で思考していると思うよ
34 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 01:10:31 ] >>31 循環論法乙。
35 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 03:20:50 ] >>29 物理の三体問題のこと? 人工知能とは全然違うと思うけど、いまだに、というか永久に厳密解を 得ることは不可能ですよ。
36 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 15:04:09 ] >知的の定義は? お好きなようにどうぞ だから人工知能の定義も人によって異なる
37 名前:デフォルトの名無しさん [2007/04/20(金) 13:54:43 ] >人工知能は「知的」な作業を機械化する技術を開発する分野 じゃあ、これは妄言だね
38 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 06:59:05 ] お前が将棋プログラミングに全く興味がないのはわかったからあと10年ROMっとけ。
39 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 09:37:01 ] 将棋だとアルファベータとモンテカルロってどっちが強いのだろう 今のところアルファベータが主流な感じだが
40 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 09:39:20 ] 大差なし、同じようなもんだ
41 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 09:53:47 ] >>40 モンテカルロ法を用いた将棋24でレーティング2000以上のコンピュータ将棋ソフトを 是非教えていただきたい。
42 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 09:55:07 ] やだ
43 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 08:23:34 ] ボナンザが、裏で「遠隔操作」を行っていたことが判明。 これじゃ、一般人が勝てる訳がない・・・ news22.2ch.net/test/read.cgi/newsplus/1177353357
44 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 08:29:47 ] そりゃボナンザ違いでんがな。
45 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:21:57 ] マサルさんのボナンザを思い出した
46 名前:デフォルトの名無しさん [2007/04/30(月) 15:37:14 ] おまいら、そろそろ最強の将棋プログラムとやらに とっかかってくださいよ。
47 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 15:40:27 ] SK"2
48 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 23:48:00 ] 人が切れ負けになるまで「本当に成らなくてよろしいですか?」ダイアログを出し続ける
49 名前:デフォルトの名無しさん [2007/05/02(水) 19:50:54 ] >>46 とりあえず明日逝って来る
50 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:43:44 ] 第17回世界コンピュータ将棋選手権 ライブ中継 live2.computer-shogi.org/wcsc17/live_s.html
51 名前:デフォルトの名無しさん [2007/05/03(木) 21:17:55 ] >>7 強化学習と機械学習の差を強調して書くなら、こんな感じ。 最適(と思われる)行動が教示されるのが機械学習で、Bonanzaはこれ。 将棋で言うと最善手が教示される(実際にはプロが指した手=最善手と見なしているが)。 過去の(≠直前の)行動に対して報酬が与えられるのが強化学習で、実現したソフトは(選手権参加ソフトが公開している情報を見る限りでは)まだ無い。 将棋で言うと勝ったから100点の報酬をあげる、とかそんな感じ。 まぁ、実際には他にも色々差があるわけですが。詳しい事は7氏の買った本に載ってます。 ちなみに私は構想中。来年の選手権はそれで出ます。
52 名前:デフォルトの名無しさん [2007/05/03(木) 23:45:39 ] VIP擬人化将棋のWikiです。 wiki.livedoor.jp/vipshogi/d/FrontPage?wiki_id=48341 将棋の駒を女の子にして将棋が打てるプログラム、是非試してみてください。 shogi.vip2ch.com/dl.php?f=koma0360.zip
53 名前:デフォルトの名無しさん [2007/05/04(金) 13:57:44 ] プログラム作りたい! 今からとりかかる。 まずは盤だ。 来年は遠いねー。
54 名前:デフォルトの名無しさん [2007/05/04(金) 22:36:48 ] 将棋の局面の良し悪しの判定ってどういうふうにやってるの? コンピュータにまともな判定ができるとは思えないんだけど。
55 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 23:39:50 ] 駒の損得とか駒の位置関係とか玉の堅さとか・・・
56 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 23:45:19 ] 強化学習は機械学習と相反するものじゃないだろう 過去の最善手を参考にしながら局面のよしあしに点数をつけるんじゃないかな。 で、反意語は教師なし学習で、これはグループ化、クラス分けをしていくことによって条件判断していくものだったと思う
57 名前:7 mailto:sage [2007/05/05(土) 00:23:33 ] >51 説明してくれてアンガト。 まだ、あの本読み始めてないけど(英語なんでとっかかるのに気合が要る)w。 でもナーンか、挑戦状を叩きつけられたような気がするのは気のせいでしょうか? 相手は私ではなく多分、他の将棋プログラムを開発している方々なんでしょうが。
58 名前:7 mailto:sage [2007/05/05(土) 00:25:26 ] あ、こっちは英語じゃなかったか。 最近買った別の本と混同しちまったw。
59 名前:デフォルトの名無しさん [2007/05/09(水) 11:19:00 ] 激指チームが悪事の限りを尽くしているスレはこちらです。 game12.2ch.net/test/read.cgi/bgame/1165706999/
60 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 06:36:37 ] 結局は旅人の釣りであったか・・・
61 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 14:21:59 ] コンクリートの上で垂直式ブレンバスター。 さすがのジャイアンも・・・ 旅人恐るべし。。
62 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 11:28:13 ] news : 革新的なAI囲碁プログラム『Crazy Stone』 wiredvision.jp/news/200705/2007051121.html
63 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 23:01:19 ] これは凄いな
64 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 11:31:46 ] なんかえらく古い話だと思ったら,原文は去年の9/16じゃないか 翻訳遅すぎ>Wired CrazyStoneの最新版は19路でもMoGoより強いかなってとこまで来てる 丁度その秘密を書いた論文が公開されたところ 内容は主にパターン等の自動学習 ttp://remi.coulom.free.fr/Amsterdam2007/
65 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:07:13 ] 遅いって言うかWiredは最近までずっと休刊?してたわけだが
66 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:14:03 ] それは旬を外れた記事を載せる理由にはならんだろ
67 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:45:06 ] 大学が休講になっちゃった。 暇だから将棋の続きやるか。
68 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:24:53 ] >67 早稲田ですか?
69 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 09:24:17 ] はしかで休講になったとこはいっぱいある
70 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 17:03:14 ] 昨日の午後、突然休講になった大学はそんなに多く無いと思う。 まあ、どうでも良いけどさ。
71 名前:51 [2007/05/22(火) 20:37:31 ] 激しく今更だけど、>>51 の“機械学習”は“教師あり学習”の間違いでした。 勉強しなおしてきます。
72 名前:リバーシ1 [2007/06/07(木) 18:41:55 ] GHI問題って、手数の少ない局面の得点は足し込まないようにすれば 不詰みを、詰みと間違える事はあっても逆はないはずだよね? 詰みが、判定できたら実際に指し進めて、ループしている部分があったら その先が詰むかどうか調べればいいんじゃないの?
73 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 00:33:24 ] ちょっと作ってみようと思ったんだけど、やっぱりC言語がいいのかなあ。 できればC#で作りたいんだけど実行速度遅いんかなあ。
74 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 00:43:01 ] >>73 元々C#使いだったんだけど速度に不満が出てきてCに移植してみたら3倍違った。 C#は何かあれば例外投げてくれるからバグに気づきやすいんだけどね。特に配列関係とか。 今でも一部のコードではC#でバグが無いように作ってからCに移植ってのは時々やってる。
75 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 07:47:20 ] Cに移植(笑)
76 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:44:21 ] >74 ふーん、そういうやり方でうまく行くんなら俺もまずJavaで書いておいて C++に"移植"すると言うやり方でやってみようかな。 うさぴょんの育ての親さんのJavaで作るコンピュータ将棋の本も出てる 事だし。
77 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:21:50 ] でもJAVAとかC#もJITコンパイラの進歩で思ったほど実行効率落ちないみたいだね。 homepage2.nifty.com/Fujimaki/download/Comparison/ この結果をそのまんま鵜呑みにするのも怖いけど、実際どうなんだろう。 あと、YSSのページにこんなこと書いてた。 >ban[256] その位置にある駒の駒番号 >C言語では、配列の添字に2のべき乗を使うと、内部計算がビットシフトで表現され高速化されるので、配列はすべて2のべき乗にするとよい。 www32.ocn.ne.jp/~yss/book.html こんなテクニックは全然知らんかったわ。まだまだおれの知らない効率化の技もいっぱいあるんだろうな。 こんなふうに最善を尽くすと、やっぱりC言語との差はかなりあるんだろうか。 教えてエロい人
78 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:33:30 ] そういうのはほんとはコンパイラの仕事で、賢いコンパイラは 自分で工夫してくれる(べき)ものなんじゃないかと むしろ、そういう工夫を人がしなきゃいけないというのは Cの大変な点といっていいのでは
79 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:35:18 ] >>C言語では、配列の添字に2のべき乗を使うと、内部計算がビットシフトで表現され高速化されるので、配列はすべて2のべき乗にするとよい。 真っ白な鷽ですが。 x86系CPUのビットシフトが遅いのは有名な話だし、インデックス計算みたいに頻繁に出てくるコードは コンパイラとしては腕の見せ所ですから素人が小手先で弄ったCコードよりもよっぽど効果のあるコードを出します。 まぁ、高速化の基本は実測にあるといっても過言ではありません。
80 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:41:11 ] >>77 実行時最適化ができるVM上での動作の方が速くなることも多いよ。 だからLLVM ttp://llvm.org/ なんかが開発されてる。将棋プログラムのような分岐の多いプログラムなら Cで書くよりも最終的には速くなるかもしれない。 ただJavaやC#で計算が遅くなるのは配列を使うとき。要素へのアクセス全てが 範囲内かどうかチェックするから行列計算とかが入ると絶対的に遅くなる。 >C言語では、配列の添字に2のべき乗を使うと、内部計算がビットシフトで表現され高速化される これは多次元配列だけだな。でも本当に効率化をしたいなら行単位でポインタを 指定するからあんまり意味のないテクニックだと思う。
81 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:43:02 ] その理屈だと別に2のべき乗にしてもあまり害はないよね?誤差程度のメモリを食うだけで。 デフォルトの名無しさんのいうこととYSSの作者の言うことがちがった場合、普通はYSS作者を信じるだろうから2のべき乗で行くのが懸命だね。 もしそんなことはないっていうのなら嘘ってソースを見せて欲しい。 あと、実測は高速化の手段じゃなくて確認じゃない?
82 名前:81 mailto:sage [2007/06/09(土) 01:44:47 ] >>81 は>>79 へのレスね。
83 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:00:11 ] >>80 ってことはJAVAやC#で書いて、Cで作ったDLLを呼び出すのでFA?
84 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:10:19 ] >>82 >>79 は明らかに嘘か無知が入ってるな。 286の時代ならともかく、今手に入るx86 CPUのビットシフトは基本的に1クロックのはず。 例えばAthlonのデータシート ttp://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf とかね。 でも配列のサイズを2のべき乗にする意味はあんまりないよ。 キャッシュのヒット率を上げる方が小手先のテクニックより重要だから、うまく プリフェッチを入れてくれる賢いコンパイラの方が効率の良いコードを履いてくれる。
85 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:12:36 ] 前C#で配列の添え字チェックが入らないようにMarshalクラスを使って領域確保してから 配列のように使う改造をしたことはあるけどCには及ばなかった。 >>83 自分はそうしてる。 GUIはC#で評価関数のDLLはCで作ってる。
86 名前:80=84 mailto:sage [2007/06/09(土) 02:15:29 ] >>81 >>79 じゃないけど、簡単に分かるよ #include <stdio.h> #define N 63 int main( int argc, char** argv ) { int A[N][N][64]; int B[N][N][64]; int i, j, k; int loop; for ( loop = 0; loop < 1000; loop ++ ) { for ( i = 0; i < N; i++ ) { for ( j = 0; j < N; j++ ) { for ( k = 0; k < 64; k++ ) A[ i ][ j ][ k ] = 1;B[ i ][ j ][ k ] = 2; } } for ( i = 0; i < N; i++ ) { for ( j = 0; j < N; j++ ) { for ( k = 0; k < 64; k++ ) B[ i ][ j ][ k ] += A[ j ][ i ][ k ]; } } for ( i = 0; i < N; i++ ) { for ( j = 0; j < N; j++ ) { for ( k = 0; k < 64; k++ ) B[ j ][ i ][ k ] -= A[ i ][ j ][ k ]; } } } return 0; }
87 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:17:00 ] >>81 YSSの作者が書いた時点と今では事情も違うだろうからねぇ。 >79を信用できないなら自分で実測してみるといいよ。 コンパイルオプションはgccならgcc -O3 -funroll-loops -msse、iccならicc -fastで。 >79は自分自身も「白い嘘」である「ビットシフトが遅い」を引き合いに出しているけれど。 で、「実測は高速化の手段」とは書いていないね。「高速化の基本は実測にある」と書いているけど。 私もそれには賛成。 今までの経験で高速化されるだろうと思ったコードが実際にはそうでなかったなんてことはざら。 「○○は高速化される」なんて書いてあってもそれを鵜呑みにしちゃダメ。
88 名前:80=84=86 mailto:sage [2007/06/09(土) 02:17:28 ] これGCCでコンパイルして実行するとNが64と63では計算回数分だけ63の方が速い。 昔気質の人の高速化手法は最近はコンパイラやCPUがやってくれちゃうからコードに書く 意味はあまりないよ。
89 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:23:50 ] >>85 >GUIはC#で評価関数のDLLはCで作ってる。 それ超危険。 マネージドコードとアンマネージドコードの切り替えはすごいオーバーヘッドがある。
90 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:40:20 ] >>89 じゃあ切り替え回数をなるべく少なくするように設計するべきか? こりゃ設計するだけで一苦労だな。 やはり生産性は落ちるが何も考えずVCあたりで作るのが無難ってことか
91 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:31:21 ] >>89 そりゃ探索はC#、葉の評価はCみたいにアホな設計の場合でそ。
92 名前:デフォルトの名無しさん [2007/06/10(日) 11:54:54 ] >>77 山下さんの勘違いがあって、全て2のべき乗にする意味はないでしょう。 1次元配列A[x]は*(A+x)で掛け算は出てきませんし。 2次元配列でも一番左側の添字は2のべき乗にする必要はありません。
93 名前:デフォルトの名無しさん [2007/06/10(日) 12:05:05 ] >>88 これは失礼ながら全く見当違い。 2のべき乗にするかどうかという議論はあえて余分な領域を取るかどうかという話で、 計算回数が増えるわけではありません。
94 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 14:33:56 ] >>93 分かってますよ。 1.配列の先頭のアドレスが2^nになるとアドレスの計算が速くなるか 2.ポインタのアドレスがラインにヒットさせることを常に心がけるべきか ってことが問題で、もう少し複雑にNを64にしても走査する範囲を63にすればいいだけです。 だから「計算回数分だけ」Nが63の方が速いと言っているので、見当違いはそちらでしょう。
95 名前:94 mailto:sage [2007/06/10(日) 14:42:37 ] と、分かりにくいかもしれないので追記。 もし配列の要素数を2^nにするのがよいのだとしたらNが64の方が計算回数が多くても それを覆すほどの利点があって速くなるはず、あるいは一つの計算あたりのマシンタイムは 確実に速くなるはず、という前提で言っているので、計算回数あたりの時間が同じであった という実験の結果から、配列の要素数をどうするかは目に見える違いにはならないという 結論を導いたので、私の意図を>>93 には理解してもらえてないのだろうな、ということです。
96 名前:92,93 [2007/06/10(日) 15:42:44 ] >>95 「計算回数あたりの時間が同じであった」というのは元々は書いてありませんでしたが。 あと現在のまともなコンパイラーなら最適化によりあなたのプログラムでは配列へのアクセスに掛け算は発生しないと思います。 つまりA[i][j][k]へのアドレスの計算をいちいち A+i*N*N+j*64+k などとしなくてもfor (k=..)のループなら直前のアドレスをインクリメントするだけ、 for (j=..)でも64を足すだけでいいので。 将棋ではもっとランダムなアクセスになるのでこの実験では結局何も分かりません。
97 名前:92,93 [2007/06/10(日) 15:49:06 ] どうでもいいことですが >>A+i*N*N+j*64+k はA+i*N*64+j*64+kですね。 86の例では。
98 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 20:53:45 ] >>93 じゃあたとえばA[i][j][k]みたいな多次元配列なら、j,kは2のべき乗のほうがはやかったりするのですか?
99 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 21:05:28 ] >>98 >87
100 名前:92,93 [2007/06/10(日) 23:42:53 ] >>98 速いかどうかは環境によりますから実験してみるしかないでしょう。 私が書いたのはA[i][j][k]の場合ならiを2のべき乗にしてもシフトやかけ算と関係ない、というだけです。 まあiについてはわざわざ2のべき乗にしてもサイズが大きくなるだけ損だとは思います。