【オセロ,将棋】ボードゲーム【囲碁,War】 at GAMEDEV
【オセロ,将棋】ボードゲーム【囲碁,War】 - 暇つぶし2ch146:名前は開発中のものです。
04/12/04 16:32:58 ufQlLsO/.net
>>141
アメリカ式だと逆じゃなかったか?
Yahoo USAに行けば分かる

147:名前は開発中のものです。
04/12/05 01:49:20 hcIz+0Iu.net
>>146
各国(アメリカ,オランダ,ドイツ,イタリア,フランス,イギリス)のオセロサイト@日本オセロ連盟
URLリンク(www.othello.gr.jp)
ここからリンクされてる解説では左下が黒

Y!USA以外にも左下が白になってるゲームをいくつか見つけたけど
Y!USAですらロゴは左下が黒
URLリンク(us.i1.yimg.com) 

ロジステロ、WZebraなど有名ソフトは左下が黒
(オプションで逆にできるソフトもあった)

などから考えてY!USAがあまり深く考えて無かっただけだと思った

148:名前は開発中のものです。
04/12/05 11:38:36 dP98iOtv.net
観戦する人が真横から見た状態と考えてみる

149:124
04/12/05 19:25:57 WZALd2Lv.net
これって順位はどうやって決まるの?
エロい人おしえて。

URLリンク(gamdev.org)


150:名前は開発中のものです。
04/12/08 16:54:42 Gi0qtPED.net
>>149
ただの総当りで順位とかは考えてないです。
わかりやすいようにwikiに勝敗数を書き加えておきました。

先手後手を入れ替えて同じ相手と二度戦います。
基本的には一発勝負ですが時間切れなどは再試合となります。

強さの目安とAI作成のやる気に繋がればと思い表を作成しました。
このスレでアップされたAIは全て戦わせていこうと思っています。

>>左下に白or黒?
他のソフトにあわせていただけると対戦させるときに楽ができていいなぁ・・・なんて。

151:名前は開発中のものです。
04/12/09 05:28:48 xa3u+hyT.net
AIリバーシ1.4キタ━━━(゚∀゚)━━━ !!
URLリンク(www.geocities.jp)

152:124
04/12/15 20:48:32 JZjqhTry.net
新しいAI来ないね。

>>150
勝敗数同じ場合は、全対戦で取得した
こまの数の多いほうが勝ちですか?

153:名前は開発中のものです。
04/12/18 21:05:52 NINQi9jk.net
漏れもオセロ作り始めました。まだ思考ルーチン書いてない&Javaだけどよろ。
URLリンク(f57.aaa.livedoor.jp)

154:名前は開発中のものです。
04/12/25 14:40:20 jC/sMZiw.net
もしよかったら皆さんで作りませんか?
【開発】いただきストリート?オンライン【似てる】
スレリンク(netgame板)


155:名前は開発中のものです。
05/02/20 21:45:02 zGNXUfDk.net
簡単な盤面評価のみでCPUの手を決定するリバーシ作ってみました。

URLリンク(www.sm.rim.or.jp)

さすがに「先」のこと何も考えないプログラムだとCPUに負ける方が難しい(^^;。
CPU同士の対戦は爆笑物w


156:名前は開発中のものです。
05/02/28 20:23:06 IrM267L5.net
nage

157:名前は開発中のものです。
05/02/28 20:37:12 Q8GR8m6a.net
角周りは取らないぐらいしとけよ・・・


158:名前は開発中のものです。
05/03/13 20:07:31 7O+hOcCJ.net
とりあえずRPGツクール製オセロに負けるな
URLリンク(suppy1632.hp.infoseek.co.jp)

159:名前は開発中のものです。
05/03/13 20:45:59 CKuTZdWW.net
AIはLispが開発効率が良いと聞いた

160:名前は開発中のものです。
05/03/13 20:51:47 DBlp8sdp.net
>>159
迷信
同じ関数型言語ならライブラリの量が決め手。

161:名前は開発中のものです。
05/03/13 20:53:17 DBlp8sdp.net
あと、リストを効率良く扱える言語。

162:名前は開発中のものです。
05/03/26 16:30:53 6d63TAHh.net
最近の型推論のある関数型言語に触っちゃうとLispは不便に感じる

163:名前は開発中のものです。
05/03/27 18:24:39 e0q37bi0.net
将棋,チェスでの詰みの判定ってどうやるんだ?
俺にはまったくわからん(;´Д`)

164:名前は開発中のものです。
05/03/27 21:48:57 4lT2WEWr.net
王を取る手の評価を評価できる値の最大値として
王を取られる手の評価を最小値とする。

指すことができる手がどれも最小値なら詰み。

165:名前は開発中のものです。
05/03/29 12:08:43 iomZmKZn.net
手番側に御飯がなかったら詰み

166:名前は開発中のものです。
05/03/29 12:09:56 iomZmKZn.net
間違えた、
手番側に合法手がなかったら詰み

167:名無し名人
05/04/03 02:08:06 NgV9szJO.net
ゲ製技板のみなさん、こんばんわ
現在囲碁将棋板では百人組み手なるイベントを開催してます
開発したアルゴリズムを人間相手に試してみませんか?
興味あるかたは是非遊びにきてください

  ∧_∧ パチ!
  ( ´∀`) < 王手!  2次でもやります
  (_⊃__)__  ∧_∧
  (_|\キキキ(∀`; )   【 百 人 組 み 手 】
   “ヾ | ̄ ̄゛と  __)
     “ ̄ ̄ (__)_)   目指せ全板交流!
プレ開催 2日(土) 3日(日)
本開催  8日(金) 9日(土)


4/2(土)から Yahoo!GAMESにて開催!
囲碁・将棋・チェス・オセロに腕の覚えのある奴、ない奴、
今すぐ URLリンク(igoshogi2.hp.infoseek.co.jp) に来たれ!!!

詳しい時間、受け手の有無などは当日下記のスレをご覧ください。
第2回2ch人気トーナメント特別対局【百人組み手】
スレリンク(bgame板)

168:名前は開発中のものです。
05/06/09 22:13:50 ZSMa8wY6.net
Bonanza?

169:名前は開発中のものです。
05/06/10 18:51:50 Qn2POV14.net
URLリンク(www2.odn.ne.jp)
そこに打つのでおじゃる。

170:名前は開発中のものです。
05/10/12 15:15:38 WI1zqV2M.net
四通八達図式を自動的に導き出すプログラムをC言語を使って作りたいんです
が、参考になるサイト、または本があったら教えてください。

171:名前は開発中のものです。
05/10/15 22:23:30 1G3vaMgQ.net
ここの「囲碁プログラムの作り方[基本編]~[上級編]」は参考になるよ
URLリンク(homepage1.nifty.com)

172:名前は開発中のものです。
05/10/16 10:19:01 4Acp8/ip.net
【人間】対局禁止令【ソフト】
スレリンク(bgame板)l50

173:名前は開発中のものです。
05/11/16 09:57:51 f06QVQmN.net
489 :デフォルトの名無しさん [age] :2005/11/16(水) 09:16:51
「コンピュータ囲碁の入門」出た
URLリンク(www.kyoritsu-pub.co.jp)

174:名前は開発中のものです。
06/03/16 00:41:18 yzRgxseK.net


175:名前は開発中のものです。
06/03/22 23:42:04 vkTXhv7l.net
六角形オセロ
URLリンク(www.forest.impress.co.jp)

つまらん。('A`)
というか、普通のオセロの方が奥深い気がする…

176:名前は開発中のものです。
06/04/19 23:08:29 DffBqyLp.net
円形オセロ

177:名前は開発中のものです。
06/05/17 16:17:21 zNRWs9Vk.net
誰か囲連星の強いプログラムを作ってくれ。
URLリンク(irensei.com)

178:名前は開発中のものです。
06/05/24 02:42:18 uUkE2Sm7.net
>>177
たしかに弱い

179:名前は開発中のものです。
06/08/24 00:30:07 KoWjUKap.net
保守

180:名前は開発中のものです。
06/09/11 07:47:50 53++tl6w.net
オセロの簡単な裏返し判定の仕方がわからん!
思いつくのはめんどくさいものばかり・・・。
5行ぐらいで書けんものかね

181:名前は開発中のものです。
06/09/11 08:28:06 Z0AEurxf.net
普通に書いても5行くらいじゃないかね。
}だけの行とかを省けば。

182:名前は開発中のものです。
06/09/11 17:01:08 53++tl6w.net
それをぜひ教えてもらいたい

183:王
06/10/03 19:48:14 ssSQFQDH.net
皆さん:
私はc言語を勉強し始めたばかりなので、何方が教えて欲しいんですが、”typedef”って何ですか。分かっている方に説明して頂く、もしくは適当なホームページを教えてください。
メールアドレス:ou-gain@hotmail.co.jp

184:名前は開発中のものです。
06/10/06 08:32:50 H6NBItu/.net
型名の定義

185:名前は開発中のものです。
06/10/06 15:20:30 BZAZHA4r.net
構造体をつくるのに typedef struct 型名{~} って書く以外に使った事がないな。
他に使い方あるの?

186:名前は開発中のものです。
06/10/09 15:22:36 t31lpLSa.net
関数ポインタ

187:名前は開発中のものです。
06/10/19 22:25:50 JdYr9qe3.net
ボイーンた

188:名前は開発中のものです。
06/12/23 12:04:02 Hiyjpqfb.net
関連スレ
スレリンク(tech板)

189:名前は開発中のものです。
06/12/23 15:06:44 uBKqEo7O.net
>>188
昨日からいろんなスレageてる阿呆か
いい加減にしろ

190:名前は開発中のものです。
07/08/15 14:23:59 eTu4t7jm.net
最近囲碁にハマってるからなんか作ってよ

191:名前は開発中のものです。
07/10/11 18:25:21 WcPq61Rp.net
盲人がキーボードだけで出来る将棋ソフトなんてないでしょうか
URLリンク(siva.cc.hirosaki-u.ac.jp)
今これを使ってみているんだけど、不具合が多くてなかなか進まない

192:名前は開発中のものです。
07/10/12 13:14:09 PIfwULpF.net
>>191
ここは、作る人の板なので、板違いですよ

193:名前は開発中のものです。
07/11/12 15:20:03 FN67Ysmj.net
URLリンク(e.x0.com)

194:名前は開発中のものです。
08/02/16 09:58:58 KtZWjP5k.net
CUDAなどを使ってGPUで計算させると面白そうだ。

195:名前は開発中のものです。
08/04/30 15:20:28 4Fbo/hMM.net
コンピューターの読みを出力させるにはどうすればいいの?

196:名前は開発中のものです。
08/05/10 23:17:40 UE0xWEqz.net
実際の音声で単語を録音して、組み合わせるしかない

197:名前は開発中のものです。
08/05/12 14:49:54 mBwB2m7O.net
やはり女性の声がいいですよね、探してみます

198:名前は開発中のものです。
08/05/25 12:52:24 v7y4T+jh.net
>>180

オープンソースでいくらでもあるからわからないってことはないだろ

おれが難しく感じるのは評価関数のほう、膨大な棋譜から学習しないと
パターンの重み付けができない・・・

199:名前は開発中のものです。
08/06/03 17:09:36 bT9imSji.net
オセロはとりあえず、全検索で獲得枚数で重み付け出来れば形にはなる。
環境によって5~6手読めればそこそこ強いんじゃないか?オレはその時点で勝てない。
定跡は難しいね。そもそも定跡あるかも知らん

200:名前は開発中のものです。
08/06/04 14:37:57 FeKBeHI/.net
200

201:名前は開発中のものです。
08/06/04 14:45:10 FeKBeHI/.net
201

202:名前は開発中のものです。
08/06/08 10:45:03 37N7/8Py.net
URLリンク(www.meby.net)
URLリンク(www.meby.net)

203:名前は開発中のものです。
08/06/11 11:49:01 vU6TibJg.net
関連スレ
スレリンク(tech板)
スレリンク(tech板)


204:名前は開発中のものです。
08/08/11 16:47:59 LInsAIev.net
室内ゲームのオリンピックとかあったら面白そうだよね(´・ω・`)下は主な種目
バックギャモン等の勝敗が運という不確定要素で変わるものは除外

囲碁
将棋
麻雀
チェス
チェッカー
ダイヤモンドゲーム
オセロ

205:名前は開発中のものです。
08/08/11 18:44:31 ke9AzWI1.net
>>204
Mind Sports Olympiadってのがあるよ
URLリンク(www.msoworld.com)

206:名前は開発中のものです。
08/08/12 00:01:54 SwJzMxYu.net
>>204
バックギャモンより麻雀のほうが運の要素が高い気がする

207:名前は開発中のものです。
08/08/13 23:24:32 K0IzuDEe.net
麻雀は非公開の不確定でしかも通常4人だろ

208:206
08/08/14 04:14:09 pnoBoDTH.net
確かに不確定要素除外なら
二人零和有限確定完全情報ゲーム限定になってしまうね。

バックギャモンは上手い人には勝てないし
覚えたての人には絶対負けなさそうだけど

麻雀は半荘だとルールを知っただけのその日に
トップを取れることもあるから

麻雀のほうが運の要素が高いと考えてるんだけど。

確かに麻雀は研究が進んでないから
勝負になるのかもしれないけどね。

209:名前は開発中のものです。
08/08/14 04:30:00 oqQ4XHlW.net
伏せてある要素を知らない限り運だろ

210:名前は開発中のものです。
08/08/14 09:45:11 3T//7uKC.net
配牌要素のある麻雀がありなら、UNOもありになるな。
不確定要素もありにして、数回勝負にするほうがよくね?

あと、個人的にはジェンガなんかの手先系も欲しい。

211:名前は開発中のものです。
08/08/14 22:31:56 G3UBgpZ/.net
>208
207だが、だから運の要素が強いんだよな?

212:名前は開発中のものです。
08/08/14 22:57:48 B7Wd7jtf.net
うん
伏せられてる要素を知っちゃったらプレイしてるとは言えないから

213:名前は開発中のものです。
08/08/22 11:28:16 xIm9fthD.net
麻雀って研究進んでない?
最善手の検索自体は頭打ちのようなキガスルが。

214:名前は開発中のものです。
08/09/18 02:41:51 WM6ksVHC.net
今将棋ソフトをC#で作ってます

ベースの将棋プログラムがあって
AI部分はそれぞれのプログラマがdllで書いて、みんなでdllファイルをうpし合って対戦
みたいなのがあればなと思っています

.

215:名前は開発中のものです。
08/09/18 23:14:01 FjpYuFhq.net
つ 将棋所

216:名前は開発中のものです。
08/09/19 00:06:28 vSliV0Hi.net
>>215
わかってねーな
他にソフトが有ろうと無かろうと関係ねーんだよ

217:名前は開発中のものです。
08/09/19 01:57:06 oNQY3VeL.net
これから何かを学ぼうとする人間の態度じゃないな、この雑魚

218:名前は開発中のものです。
08/09/19 03:02:49 jhprjtul.net
>>215
ほーこういうのが既にあるんですね
ちょっと作ってみるかな

219:名前は開発中のものです。
08/10/02 14:32:26 BqcJEAH9.net
思考エンジンを>>218がうpしてくれるのwktkしてまってる

220:名前は開発中のものです。
08/10/03 00:40:55 1JgFthiv.net
まず将棋の駒なんだがダサい。
もっとチェスみたいにセンス良いのに変えて。

それと動かし方も特殊なの作って。


221:名前は開発中のものです。
08/10/03 11:29:32 w2DAyZcd.net
そう思うなら自分が作れば良いのに

222:名前は開発中のものです。
08/10/04 04:35:51 TRmXkKzz.net
チェスの駒なんて幼稚でダサイ

223:名前は開発中のものです。
08/10/04 13:01:40 VpyxnnCf.net
古いチェスソフトだがBattleChess
コマが甲冑着た兵士で、動かすとそのマスまで歩いていって敵のコマを斬りつけて倒すのが衝撃的だった

224:218
08/10/06 03:50:43 1QX8X5Nt.net
>>219
ありがとう
ようやく合法手が打てるようになって、
駒はまだランダムに動いているだけ
完成まで何年かかるのかしらw

225:名前は開発中のものです。
08/10/06 16:53:13 swcT6QuF.net
>>223

衝撃的でもなんでもない。
元が兵士だの王様だのの戦いだろが。
そういうのをゲームにしたのがチェスだろ。

226:名前は開発中のものです。
08/10/06 19:18:36 BsYoDmVL.net
>>225
ビジュアル的に衝撃的という意味だ、馬鹿がw

227:名前は開発中のものです。
08/10/07 22:15:10 myhHSj3x.net
衝撃的でもなんでもない。
元が兵士だの王様だのの戦いだろが。
そういうのをゲームにしたのがチェスだろ。

228:名前は開発中のものです。
08/10/14 11:55:17 8vvv4eB8.net
ビジュアル的とか一切言ってない>>223が悪い

229:名前は開発中のものです。
08/10/14 15:31:10 Av4ni/WQ.net
将棋もチェスも元が兵士だの王様だのの戦いなのは今さら口に出して言うことが恥ずかしいほどの常識
明言してないからと言ってそれを汲み取れない>>223が馬鹿

230:名前は開発中のものです。
08/10/14 20:15:57 OYNkgCVY.net
これだからチェス厨は┐(´~`;)┌

231:名前は開発中のものです。
08/10/15 22:56:17 GHJkid7K.net
ん、斬新な解釈じゃなくて、アニメーション効果に衝撃を受けたんじゃないのかと思ったんだが、
なんで古代の戦争を模したという常識を知らないという前提で叩いてるの?

232:名前は開発中のものです。
09/02/11 10:31:05 s/ghzSCn.net
どぞ。

デジタルゲームの最先端に立つ人々が集合した,「第4回ボードゲーム交流会」レポート
URLリンク(www.4gamer.net)


233:名前は開発中のものです。
09/03/13 03:22:31 B9n5WX1A.net
ハゲタカのえじきとかなら、さっくりさくさく作れないかなあ

234:名前は開発中のものです。
09/06/13 07:41:09 2+1LYKG9.net
あげ

235:名前は開発中のものです。
09/06/16 02:11:21 1CAlzcIC.net
習作のため、一番簡単なゲームってなんだろ?

236:名前は開発中のものです。
09/06/16 10:40:56 f0RK5lBp.net
┌─┬─┬─┐
│  │  │  │
├─┼─┼─┤
│  │○│  │
├─┼─┼─┤
│  │  │×│
└─┴─┴─┘

237:名前は開発中のものです。
09/06/16 10:46:24 1CAlzcIC.net
言われてみれば確かにッ!

238:名前は開発中のものです。
09/06/25 22:18:37 5GUe6Bd4.net
オセロ完全解析してゲ製作板大勝利しようぜ

239:名前は開発中のものです。
09/06/25 22:47:31 DQSdZSpu.net
うむ

240:名前は開発中のものです。
09/08/03 22:14:14 f4vLj/hM.net
例えばポーカーなんかで、
1枚ドローするところを、内部的に2枚引いておいて強い方を採用する…
っていうのは、プレイヤーにバレちゃうものだろうか。

241:名前は開発中のものです。
09/08/03 23:35:10 2X7HBGWU.net
採用しなかったほうを引く山に戻すならばれにくい。
捨て札にしたら、最後に山の数が合わなくなってばれる。

242:名前は開発中のものです。
09/08/07 18:27:28 R45zmvwz.net
山札に戻すのは、当然として。
戻すときに一番上/下に戻すのと、ランダムな位置に戻すのとでは、また変わってきそうね。

対戦相手となるキャラ(コンピュータ)ごとに特殊能力が設定してあって、
ドロー運がとんでもなく高いキャラとかなら、十分に使える方法かなとは思ってるけれど。


243:242
09/08/07 18:30:04 R45zmvwz.net
失礼。
>242の1段落目は>241へのレス、2段落目は2枚ドローの話題全体へのレス。


んー、確率計算をちゃんとするプレイヤーには評判悪そうだなあ。

244:名前は開発中のものです。
09/10/17 17:43:31 71MZbNWZ.net
別所でコピペされてたヤツだけど、面白そうではあるな。
URLリンク(uecda.nishino-lab.jp)


245:名前は開発中のものです。
11/10/31 17:57:13.54 pGv+tMRb.net

URLリンク(jbbs.livedoor.jp)

246:名前は開発中のものです。
11/11/01 08:52:13.81 GguZlPOT.net
将棋モドキなら昔から誰もがいくつも考えて出してる。
そのどれもが将棋を超えられなかった。
なぜなら新しくルールを覚えるのが面倒だから。

なので将棋型対戦ゲームは、面白くてプレイ人口が多いものに収束していってしまう。
新作側がそれを乗り越えるには、作り手がよほど苦労して広めるしかない。

ドラクエは実は構想時にはすでにドラクエ3の要素まで考えられていた。
ただ、いきなり3を出してしまうとプレイヤーがルールについていけない。
なので、ポートピア殺人事件というコマンド選択型ゲームをまず出し
次にドラクエ1でRPGの基本的要素を広め
続いて2で仲間を一人づつ増やしてパーティープレイ型を定着させ
それが出来てからやっとドラクエ3を出した。

どんなに面白いものでも、段階的に簡単なものから広めないとうまくいかない。
斬新ルールだが基本的な要素のみに特化した簡易バージョンが必要だ。

247:名前は開発中のものです。
11/11/02 12:02:01.50 w8/vJaN3.net
>>246
駒二種類減らした4面体(占領、武士、巫女、怨霊)ではどうです?
実際に作ったら、とても手が出せない見積もりを頂きましたので、
没にして6面体に戻しましたけど。
パソコン上で動かすだけなら、負担は減るはずです。

あと駒数を減らすのはOKです。
2個づつから試して慣れるごとに駒数を増やしていってください。
盤面を「5×5」にして試してもいいと思います。

あと「段階的に簡単なもの」があれば、お願いします。
ただ、以上のことを段階的に教えるのはともかく、
各段階のをつくれとかいわれるのは無意味だし経費的にも無理ですね。

248:名前は開発中のものです。
11/11/04 11:16:01.70 2Ept5nIz.net
そういう問題じゃねぇって。遊ぶ側に苦労を押しつけんなって言ってんの。

テキストでルールとだいたいの遊び方が説明してあるだけの
面白さがわからないゲームで、しかも二人必要だから相手にもルールを覚えさせて
なおかつコマやらボードやらも用意しないといけない、なんて今じゃ誰も手を出さない。

面白さの中心部のみを抽出してすぐに覚えられるゲームにして
フラッシュですぐに遊べるようにして、しかもそこそこ強いCPUが相手してくれる
ぐらいじゃないと、今は客が寄り付かないの。

本気で遊んで欲しいなら、あちこちコピペ貼り付ける苦労をするんじゃなくて
プログラム覚えて自分で完成させるぐらいの苦労をしろ。
俺は自分が遊びたいゲームを作るためにプログラムを覚えた。

249:名前は開発中のものです。
11/11/05 10:41:52.88 cjBsr1SG.net
>>248
そうですね。
例えは悪いけど勇者の手を引いて代わりにモンスター倒して
魔王のところにつれてってて言うくらいの親切さがないと
ダメかもしれませんね。
でもそれで面白いのって感じはしますが。

250:名前は開発中のものです。
11/11/07 19:51:57.88 zjfEWUd+.net
だからそういう問題じゃねぇって。

>面白さの中心部のみを抽出してすぐに覚えられるゲームにして
>フラッシュですぐに遊べるようにして、しかもそこそこ強いCPUが相手してくれる

のは、やってるゲームはあるけど

>例えは悪いけど勇者の手を引いて代わりにモンスター倒して
>魔王のところにつれてってて言うくらいの親切さがないと

なんてゲームはないだろうが。例えが悪すぎる。

251:名前は開発中のものです。
11/11/07 19:59:20.54 zjfEWUd+.net
ゲーム中の楽しい苦労と、ゲーム始めるまでの煩わしい準備の苦労を
同一視するから変な例えになるんだよ。

例えるならハイキングのちょっとした山登りだ。
山のふもとに行くまでに普通の市街地や住宅地を何十キロも歩くのは苦痛。
だから山のふもとまで行くバスが必要だ。ってのが俺の言いたいこと。

お前はそれを「だったら頂上までバスで行けないとダメかもしれませんね」
って言うから話がおかしくなる。
山登りの途中は景色楽しみながらの苦労だからいいんだよ。

252:名前は開発中のものです。
11/11/09 18:31:40.10 Gt0xi7Pn.net
コネクト6(六目並べ)
URLリンク(www.connect6.org)

253:名前は開発中のものです。
11/11/10 22:08:34.35 lXNjDaXU.net
>>248
ご指摘ありがとう。

俺はおもちゃ屋で将棋やオセロの隣に並べるのが目標だったから、
プログラム組むとかそういうのは考えてなかった。
ていうか、そんな技術持ってないし。
でも、おっしゃることはごもっともです。
どこかプログラムを替わりにつくってくれるところを検索して探してみます。


254:名前は開発中のものです。
11/11/14 19:50:52.02 SMI23/ZQ.net
ああ、そっちの方で目指してるのか。なるほど。
でも、それもかなりの茨の道だぞ。

おもちゃ屋で定番になって対戦思考ボードゲームなんて
ホントその将棋やオセロか囲碁ぐらいしかないし。
その他のゲームは出ては消えていくだけの存在だ。

目指すとしたら、ドイツボードゲームの系統かな。
基本的にはサイコロやシャッフルカードを使うものだけど
まれに運要素無しのガチ思考ゲーもあったりするし。
でもその場合、最初に覚える要素が凄く単純なものしか残れないし、ウケない。

255:名前は開発中のものです。
11/11/14 20:00:08.65 SMI23/ZQ.net
あと、プログラムを替わりにってのは、金出さないとまず無理だと思う。
ゲームを本気で広めたいなら、プログラムしてでも自分で作るべき。
それが出来ないなら、その程度の本気度でその程度のゲームだったって事だ。

256:名前は開発中のものです。
12/07/10 15:38:41.19 tT32jGKh.net
将棋プログラムできるサイトない?

257:名前は開発中のものです。
12/07/10 15:40:08.27 tT32jGKh.net
過疎ってるし質問とりやめます

258:通りすがりの妖術僧
12/07/27 16:18:03.62 GFEdOn68.net

以下のような本もあるしサイトも結構ありますね。

アマゾンで取扱い
「コンピュータ将棋のアルゴリズム―最強アルゴリズムの探求とプログラミング-I・O-BOOKS-池-泰弘」


259:名前は開発中のものです。
12/10/17 06:16:37.40 uzozAJ35.net
将棋

260:名前は開発中のものです。
12/10/17 07:42:20.83 9gtPUv5X.net
>>258
かなり古いが森田和郎が書いたコンピュータ将棋の本もあるな
「もしかしたら世界初のコンピュータ将棋の本」らしいから、今からしたらかなり初歩的なことしか書かれてないが

261:難しいね
13/01/24 19:30:18.98 Kycj3XA0.net
最近覚えたけど、ぜんぜん勝てない

262:名前は開発中のものです。
13/02/06 18:16:09.27 wjeuu1Tw.net
将棋は頭が良くないと強くなれないのか
URLリンク(gogono.net)

263:名前は開発中のものです。
13/03/06 12:40:47.06 W+jOiTz2.net
URLリンク(www.geocities.jp)
スルー・ジ・エイジ
剣と魔法の国

264:名前は開発中のものです。
13/04/23 07:05:31.51 6N0ZI5Zs.net
>>255
>あと、プログラムを替わりにってのは、金出さないとまず無理だと思う。

金を出さないなら、企画ごとプログラム担当に乗っ取られても文句言えないよな

265: ◆taka1B7CEQ
13/04/26 18:31:25.31 CXgUOPi8.net
▽持ち駒:
┌─┐
│▽王│一 最終手
├─┤   には
│▽歩│二 ★☆を
├─┤   付けて
│▲歩│三 下さい
├─┤
│▲王│四
└─┘
▲持ち駒:

266:名前は開発中のものです。
13/05/11 22:28:05.03 5yfnRn37.net
友達と将棋盤に、自分は将棋、相手はチェスを並べて戦っている
(チェスは1列足りないので、キングを中央にくるように、端列は開ける)

取った駒は再利用不可で、昇格は昇格する駒に応じて、チェスは相手の最前線、将棋は相手の3段目で昇格

チェス側が強くて勝てないよ・・・

267:名前は開発中のものです。
13/05/12 13:24:34.46 9mOVMO8z.net
将棋側は、あまり動かずに、金・銀を密に連携させて防御陣形をとるべし

チェス側は、ポーン以外はすべて大駒だから、機動力が大きいが、多方向に利くのはクイーンとキングのみだから、そこを狙うべし
クイーンもキングも取られるわけにはいかないから、玉と金2枚で支援して銀2枚を捨てられる将棋側は有利

チェス側はポーンで斜めスクラムを組んで防御前線を張れるが、正面の駒を取れないのが痛い

268:名前は開発中のものです。
13/05/13 17:58:19.66 be264q5E.net
Zillions of Gamesをインストールすれば、自作ゲームがすぐに作れるよ
URLリンク(www.zillions-of-games.com)

Zillions Rules File (ZRF)というルールファイルを、テキストエディタで構文に従って書き換えるだけ
URLリンク(www.nakajim.net)

もとのゲームファイルの修正で済むようなもの(駒数変更,駒の移動範囲の変更,盤の升目数の変更など)はとても簡単
他の人がアレンジしたボードゲームのZRFも、ダウンロードして参照すると使用可能
URLリンク(www.zillions-of-games.com)

269:名前は開発中のものです。
13/05/18 09:32:23.57 CiGW0TGT.net
将棋対チェスのゲームって売ってるのかな?

270:名前は開発中のものです。
13/05/18 23:16:41.04 3YHAJpG/.net
わざわざそれだけのために買うやつなんていないだろ

271:名前は開発中のものです。
13/05/20 20:20:47.74 Jmw0rbja.net
ZoGの中将棋AIは最強らしいから、やってみたいな
有料だから残念か

将棋対チェスは、ggると調整されたルールが出てくる

272:名前は開発中のものです。
13/05/24 18:09:30.06 35JPsAxI.net
>>271
調整ルールの詳細希望!

273: ◆SHOGI//OTA
13/05/24 18:48:56.85 o/L4nan1.net
チェス側も6枚以上になると駒打てるってルールだったかな
将棋が日本、チェスがアメリカか

274:名前は開発中のものです。
13/05/24 22:15:10.72 kIYPN4Ka.net
>>265
▲ニ歩
△同玉
▲三歩打
△一玉
▲ニ歩
△同玉
▲三王
まで

275:名前は開発中のものです。
13/05/24 23:20:25.94 o/L4nan1.net
6手にて変化の余地なくスティールメイト負け。

276:名前は開発中のものです。
13/05/26 02:43:56.90 Px4RuB9Z.net
>>273
サンクスです

確かに大駒中心のチェス側は、高い機動力を生かして序盤は優勢だけど、
終盤は取り合いになると、守備範囲が狭いチェス側は守りきれなくて死ぬ

ある程度、駒をとってから打てるようになるわけね・・・
将棋側はチェス駒を打つわけだけど、チェス駒はナイト以外は向きが分かりにくいから、相手に使用されると嫌だな

277: ◆SHOGI//OTA
13/05/26 07:32:03.70 eRYu9esk.net
リアでやる時は色反転させるからおk
これでもチェス側が勝つとなれば、一気に決める必要があったりして。(w
将棋が金銀で固めてしまうと手がでないヨ。。。

将棋対シャンチーもあるかな

278:名前は開発中のものです。
13/05/26 12:06:35.03 KdBMZZS6.net
米韓戦:チャンギ(韓国将棋) VS チェスなら、あるよ
URLリンク(www.zillions-of-games.com)

日中戦:シャンチー VS 将棋とか、誰か作ってくれないかな・・・

4人プレイで、チェス VS 将棋 VS シャンチー VS チャンギのバトルロワイヤルとか面白そう

279:名前は開発中のものです。
13/05/26 12:11:22.32 KdBMZZS6.net
日米戦:チェス VS 将棋は、すでにHSPで専用ソフトが存在していてビックリ!
URLリンク(hsp.tv)

ルールをもっと可変式にして欲しいな・・・
昇格線の位置、駒の再利用の有無、チェス側が空ける列の変更とか・・・

280:名前は開発中のものです。
13/05/26 20:14:44.85 eRYu9esk.net
>>278は、ソフト購入しないと無理?

シャンチーとかはちょい特殊なので、
同じ盤でやるのはムズイか

281:名前は開発中のものです。
13/05/27 19:39:26.72 9pbfjPhK.net
まずはHPでソフト(体験版:無料)をダウンロード
これで、デフォルトの48種類のゲームが可能(将棋,チェス,チャンギ,シャンチー,マックルックなど)
使用期限はないけど、機能制限(自作ルールが使用不能)あり

次に、Help>Unlock Full Versionを開いて、NameとCodeに数字を入力すると、機能制限が解除されるよ
これで、OpenRuleGamesから参照することで、ダウンロードサイトの亜種ゲームや変則ゲームも使用可能になる

間違っても、「Zillions of Games」,「keycode」,「serial number」,「passward」などでググってはいかん!
(倫理的にね・・・)

282:名前は開発中のものです。
13/05/27 19:44:10.89 9pbfjPhK.net
>277
そうか、将棋側は、使っていない相手(チェス側と逆の色)のチェス駒を使えば良いのか・・・

チェスの駒は、打ち詰めたり、合い駒を打ったりするのに向いていない・・・
でも、チェス側が手に入れるのは将棋側の駒だから良いのか

相手に取られたチェス駒を、さらに取り返して打てるとなると、チェス側はチェス駒を打てるわけで、新感覚だな

283:名前は開発中のものです。
13/05/28 18:33:34.08 E62L+nG5.net
>>278
チェス側はナイトが1個足りなくないかい?
ナイトとルークの位置が逆なのも意味があるのかな

チャンギとシャンチーは似てるから、シャンチー VS チェスなら、すぐにできそう

284:名前は開発中のものです。
13/05/31 23:01:31.34 /iCd6FrU.net
3Dチェスのソフトを作るスレに乗っ取り!

285:名前は開発中のものです。
13/06/07 06:49:37.26 22I90z1d.net
>>281
ありが糖

中将棋やってみるよ^^
調べてみると、摩訶大将棋まであるな

286:名前は開発中のものです。
13/06/08 19:23:27.40 NBTDQ+RS.net
立体チェスとか、円形チェスとか、六角形チェスとか、チェス系はバリエーションがスゴイ!

287: ◆ZSCoFl63NY
13/06/09 17:15:43.33 R+TCfNWQ.net
他スレでなかなかレスがつかずにこちらにカキコしました。

ループオセロを作りました。exeファイルなどはトラブル防止のため、あえて添付していません。
動作環境はWindowsです。Cコンパイラがない方は、同梱のreadme.txtを参照してください。
コンパイル方法はreadme.txtに全て記述してあります。
↓にうpしてあります。
URLリンク(soft186.e-whs.jp)

少々強引なコーディングですが、何とか形になりました。
率直な感想を聞きたいので、どうかダウンロード&コンパイル&プレイしてやって下さい。

私のスペックですが、C/C++がそこそこ使えて、フリーソフトを公開した実績がありますが
プログラマとしての実務経験はほぼゼロです。

288:名前は開発中のものです。
13/06/13 18:55:25.55 8V7u006/.net
なんかドラクエの世界地図みたいですね
東西ループ+南北ループ
もはや角や端は意味を持たない
最後までどんでん返しがあり得るが、盤のマスは有限と
なかなか面白いのでは?
メール希望者には、exeで送っても良いのでは?

できれば、その技術で、「チェスVS将棋」のインターフェイスを作って欲しい
AIなしの対人対戦専用ソフトで

289:名前は開発中のものです。
13/06/13 19:04:52.78 3uTeAlkg.net
ドーナツオセロか

290:名前は開発中のものです。
13/06/14 17:56:33.48 4WX+Y1yW.net
正確には、平坦トーラス(曲率0の円環円筒)です

291:名前は開発中のものです。
13/06/15 21:26:29.87 Yvu65IEz.net
>>287
がんばれ!!

292:名前は開発中のものです。
13/06/16 12:19:37.51 THgmSpSn.net
縦列が一周ごとに下にずれたり
横列が一周ごとに右にずれたりすると
更にややこしくなる。

ていうか残り1枚から大逆転が可能になる

293:名前は開発中のものです。
13/06/16 12:26:37.95 HJz6eymc.net
赤・白・黒の3色オセロは既出?

294:名前は開発中のものです。
13/06/19 00:32:19.46 KWgkgQFb.net
4色でやってるTV番組があるぜ

295:名前は開発中のものです。
13/06/20 19:25:37.41 utbSzndH.net
>>294
何色?
赤・青・白・黒??

296:名前は開発中のものです。
13/06/25 20:10:45.63 8VH9PpPP.net


297:名前は開発中のものです。
13/06/30 12:35:57.68 epiVBrxw.net
リアルタイムストラテジー型のチェスとか、HP制の将棋とか、おもしろいかも?

298:名前は開発中のものです。
13/06/30 20:09:35.38 CusNUCHO.net
その昔、バトルチェスってのがあってな・・・

299:名前は開発中のものです。
13/07/01 NY:AN:NY.AN lOCkd1Ri.net
Battle chessでggると、駒を1手で1回ずつ全部動かせるらしい

300:名前は開発中のものです。
13/07/02 NY:AN:NY.AN bfbryvu1.net
FFみたいなアクティブタイムバトル(ATB)制とか、
タクティクス・オウガみたいなウエイトターン(WT)制は?

301:名前は開発中のものです。
13/07/03 NY:AN:NY.AN wkoZZDOw.net
ハンターハンターの軍棋をゲーム化するとかね。
つうか軍棋って同じ名前で実在するんだな。日本にも軍人将棋ってのがあるが。
ここで色々案も挙がってるが、すでにPCもない時代からこういう考えはあったわけだ。

302:名前は開発中のものです。
13/07/07 NY:AN:NY.AN 1jzG+TM2.net
軍蟻は良いかも!
著作権が難しいが・・・

軍人将棋はバリエーションとローカルルールがありすぎて対応が大変
ZoGにも欲しいな
西洋軍人将棋(ストラテゴ)は、PCでも割と見かけるが

303:名前は開発中のものです。
13/07/07 NY:AN:NY.AN 0lzHS3C/.net
ハンターのあれってちゃっとルール公開されてたの?
コマが3つまで重ねられるって事しか解んないわw

304:名前は開発中のものです。
13/07/07 NY:AN:NY.AN lXyODQZR.net
ルールなんて自分でこさえちゃえばいいよ。
コマを重ねるってのは、要するに馬にのせたり方天画戟といった装備だったり
名声や決意・覚悟といった精神的なものの加点要素なんじゃないのか?
あるいは倒れた仲間を回収して回復ポイントまで運べるとか。逆に補給物資を運んでいるか。

将棋やチェスなら、味方のコマと重なると2倍の能力になり、一回とられても相打ちで敵も倒せて、自分はそこに残れる、的なシステム。

305:名前は開発中のものです。
13/07/07 NY:AN:NY.AN tapz/Poj.net
作りたい奴はすでに作り始めてたりする

ハンターハンターに出てきた架空のゲーム「軍儀」
スレリンク(cgame板)l50

306:名前は開発中のものです。
13/07/08 NY:AN:NY.AN VxgBNd3t.net
なるほど、高さ=三次元的なゲームだったのか。
二段や三段のコマは一段のコマには抜けれず壁の役割になれる。
壁構築で地形みたいな要素にもなる感じかな?

307:名前は開発中のものです。
13/07/09 NY:AN:NY.AN PWW1vFJn.net
高さを考慮したSLGといえば、タクティクスオウガ系のゲーム画面(盤面)になりそう・・・

308:名前は開発中のものです。
13/08/03 NY:AN:NY.AN gVJOFEFN.net
age

309:名前は開発中のものです。
14/09/08 16:59:53.68 67y2qr+m.net
教京サーバアビエ無戸籍交際薬剤消毒介護職利権ローション羽田帝国上層部24時間パトロール義務上野飲み会マックさむらいニューヨーク森林火災チェック問題ヤーフォー確定申告不足ラーメンスーパーポイントdビデオデッキ破壊タイピングGTX860MIGOZ

教京サーバアビエ無戸籍交際薬剤消毒介護職利権ローション羽田帝国上層部24時間パトロール義務上野飲み会マックさむらいニューヨーク森林火災グリーにんにく牡丹黒家宝ラーメン

教京サーバアビエ無戸籍交際薬剤消毒介護職利権ローション羽田帝国上昇部24時間パトロール義務セコム強盗マックさむらいニューヨーク森林火災グリーにんにく牡丹黒家宝ラーメン
築地TPP偏食中国人勧誘マナー憤怒北京オリンピックパブ立橋フロアWHO経済制裁代協議会飲み食い代官僚日テレ漏洩ボーリングITC問題調査福岡駐車近代道廃人画税幕張銀行ググール無断決裁広告料寒孫ゼリー失調栄養士指的フィルム不毛ハンバーグースラーメン

糞箱弐個弐個沖縄ランド近年ペット原発難民船頭100万円コミックコラムシフト廃品鉄工業プラチナ小スモ再販問題WHO光金アナ雪エネルギーソーシャル決裁ニッカン奮闘鬼記者サービスカ米ラマン露店捜査キセルストアアイダホ会長農家不動産工場感激息子

310:名前は開発中のものです。
15/08/18 16:59:55.72 QcCJSSMl.net
どなたか教えていただけますか?
最近、オセロAIのプログラミングをCで行っています。
今は、探索ロジックの勉強のため、終盤の完全読みを作っています。
置換表付negaMax、置換表付PVSは通常の探索ではきちんと動作しています。
現在MTD(f)にとりかかりました。MTD(f)では、ドライバは擬似コードそのまま。
テスト関数は置換表付negaMaxを流用していますが、そのままだとFail-LowとminMax値
の区別がつかずに、Fail-Lowの指し手を返してしまうので、初段のみαを-1する事で、
内部的に区別できるようにしています。
動作確認にいくつかテストケースでテストしましたが、FFO#40の時におかしな事がおきます。
(FFO:URLリンク(www.radagast.se)
問題)本来の評価値は+38(A2B1C1…)なのに、+30が返る。
以下、判明している状況です。
1)置換表を使用せずにMTD(f)を動作させる。 ->正解
2)単体でNull Window Searchを行う。      ->正解
3)置換表を使用してMTD(f)を動作させる。   ->少なくともFFO#40では誤答する
4)FFO#40で失敗する条件は、fにminMAX値より幾分小さい値(黒+30未満)を設定したとき。
5)negaMax初段でαを-1するロジックを入れなくても、同じ事になります。
デバッグで確認したところ、Fail-Highになるべき条件(黒+30や黒+36の時)で、下限値を
返しています。同一条件で、下限をさらに-1してテストしたところ、α<g<βである事が確認
できましたので、minMax値として間違った値が返っていることになります。
どうも原因は置換表にあり、Null Window Searchの中で、何回も再利用していることに
あるように思います。とはいえ、MTD(f)といえば置換法を再利用する事が前提です。
どこかに誤りがあるのではないかと思います。
同じような問題に遭遇した人はいますか?

311:310
15/08/18 17:06:51.32 QcCJSSMl.net
ちなみに、置換表のキーは、盤面と手番です。
ハッシュ値を使用し、衝突した場合は、チェーンで下につなげています。
今のところ、メモリーの上限等は設定しておらず、領域も足りています。

312:名前は開発中のものです。
15/08/18 21:27:38.25 ZHAQ4NnD.net
正気か?

313:310
15/08/18 23:21:46.36 5wjtKO2B.net
何がですか?

314:名前は開発中のものです。
15/08/18 23:27:30.51 ZHAQ4NnD.net
その質問に答えられる人間が2chにいると?

315:310
15/08/19 09:33:45.34 DdofkXsp.net
いなければ仕方ないですね。
テスト関数を置換表付negascoutにしたら、ちゃんと答えが返ってくるようになりました。
けど、なんか気持ち悪い。置換表の扱い方は一緒なので、たまたま上手く行ってるだけ
ではないかと思います。むむむ。
MTD(f)にこだわり続けてもあんまり意味が無いので、評価関数づくりに入ります。
3層パーセプトロン型にするか、普通の線形回帰にするか。
パーセプトロンタイプは、パターン学習のタイプを作ってみましたが、学習データ340万
棋譜に対して、1回回すのに3日がかりという状態で、検証サイクルが回しづらい状況な
ので、簡略化をするか、線形回帰を試すか思案中です。最終的には、両方作って対戦
させてみるかと思っています。いつになる事やら。

316:310
15/08/24 09:51:00.08 Y8Lk5h3w.net
BITBOARDで確定石をそこそこ正確に求める方法を考えました。
思いっきり脱線中w
ただ、斜め方向に「列すべてに石が置かれている」状態を検出する方法と、
その時に、斜め方向の列すべてに確定ビット(仮)を建てる良い方法が見つ
からずに、斜め方向のAND用の定数配列を用意してループを15回回してる。
縦横は、分割統治でそこそこなロジックになったんだけど。
45度回転を使っても、そんなに高速化できそうにないなぁ。
もちろん、完璧な確定石ではありません。
拾った石は確実に確定石ですが、確定石なのに拾えない石が若干あります。

317:310
15/09/02 11:43:34.50 s0BtWfox.net
ぬぬぬ。パターンによる線形回帰の石差予想。
最急降下法は収束してるんだけど平均2乗誤差が480とかになる。
1σでいうと1局面あたり22石(黒石の数では11石)もの誤差。
これでは使い物にならない。
ステージ分割しているんだけど、ステージが進んでも誤差はほぼ一緒。
ウェイトがオールゼロでも似たような数字になるレベル。
テストデータで局面評価させると、それなりに石差は計算しているっぽいが、
最善手で終局まで打ったデータ入れるとステージによって評価値が全く違う。
初期値をゼロからスタートすると、この辺なんだけど、1とかからスタートすると
もっと誤差が大きいところで収束してしまう。初期値を乱数にしたら、更に大きな
誤差で収束してしまう。
ローカルミニマムに捕まってるのかなぁ。
いくつかミスは見つけたけど、本質的な場所じゃないので、結果も変わらず。
むむむむ。

318:名前は開発中のものです。
15/09/02 16:33:21.80 6FNrQBf/.net
正規化をミスってる

319:310
15/09/02 21:57:59.44 5gNGVEfH.net
正規化というと、thellさんのlearning.pdfで言うところの、αの設定ですか?
当初はmin(β/100,β/Nj)の正規化型で作ってましたが、上手くいかないので
収束を早めるのは後回にして、今は単純にステージ毎の局面データ件数α=β/Nの
形にしてます。
が、発散を避けようとすると、βをあまりに小さくしなければならないのが、なんか変な
気がしています。今は10の-7~-8乗くらいの値です。やっぱり変ですよね。
最急降下法のコードどこか間違えてるんだろうなぁ。

320:名前は開発中のものです。
15/09/03 04:25:48.28 CNXgxM7O.net
でもオセロだったら最終数手で11石くらいひっくり返ってぶれるのは普通じゃない?

321:名前は開発中のものです。
15/09/03 04:36:35.33 CNXgxM7O.net
あ、オセロのAIにはぜんぜん詳しくないんだけど
対局を見てたらクルクル石差が入れ替わるので
読み切らずに局面から石差を判断すると
どうなるんかなと思って

322:310
15/09/03 10:19:29.05 Fd8XT4rV.net
色々と失礼しました。
もう一度、よーく上記pdfを読み返していたところ、原因らしきものが見つかりました。
記載にあいまいというか、ちょっとおかしいところがあって、式の変形をしっかり追って
確認すれば良かったのですが、思い込みで解釈をして変な計算をしていました。
そこをとりあえずざっと修正したところ、遅々としつつも収束に向かっている模様ですが、
まだまだ完全ではないようです。ある程度二乗誤差が減ったところで、また増え始めたり
しています。正規化も試したけど、やはり同じ。
もう少し、検討してみます。

323:310
15/09/03 10:38:17.33 Fd8XT4rV.net
>>320
もともとひっくり返しあった後の終局を予測するのが目的なので、教師データは最終局面
の石差です。盤面の特徴(パターン)から、最終石差を予想するための重回帰計算なので、
その時点の石数は、説明変数に入れてません。なので、パターンの選択が適切なら、
最善手の応酬において1手毎にどれだけ石数が入れ替わろうと、影響を受けずに、
二乗誤差が終局に近づくほど減っていくと予想されます。
というか、そうなるように説明変数であるところのパターンを模索していくと理解しています。
手元にあるwzebraなんかは、評価値と称して最終石差予想が表示されているのですが、
やはり、ある程度の誤差を含みつつも、大きくぶれているようには見えません。

評価関数の使い道を考えると、実は絶対値はそれほど重要ではありません。
中盤探索のn手読みの時の盤面評価と、ムーブオーダリングに使うので、ある局面から
派生したn手先の局面における相対的な関係が保たれていればOKです。
また、MTD(f)法などを使う時の、fの初期値設定にも使います。この時は絶対値で正確な
方が良いはずですが、外れはすぐにカットされて次に行くので、トータルの時間に対する
影響は小さいように感じます。
とはいえ、相対的な関係が保たれているのかをチェックするのは難しいですから、
結局のところ出来上がった評価関数の評価は、教師データとの二乗誤差の小ささに
するしかないかなと。

324:310
15/09/07 01:11:39.28 OHPpdG+6.net
収束しかかった二乗誤差がまた増え始める原因はまだわかりません。
増え始めるまでは収束方向には向かっているのは確かなのでβの初期設定を
いって誤魔化す方向で。最急降下法ってこんなものなのかなぁ。
一通り納得したので、パターンをLogistelloと同一のものにまで拡充してスムージングも
入れてみましたが、新たなバグを仕込んでしまった模様で、一部計算がぐちゃぐちゃorz
バグ探しの旅に出ます。
裏で、Solverの速度アップを検討。
CountBitとPOPCountを組み込み関数にしてみました。FFO#40で30%ほど改善。
続いてFlip関数を64個のポインタ関数にしてみましたが、時間はほぼ変わらず。
ポインタ関数内の処理が非効率なのか。
Flipのデバッグ中に確定石計算でバグっぽいものを見つけましたが、回帰が落ち着く
まで見なかった事にします。

325:名前は開発中のものです。
15/09/10 17:45:51.81 R9JX9LJx.net
将棋の全駒にユニークなIDを振り、局面を将棋盤に見立てたkoma[9,9]にIDを入れることで表現しようと思っています
その場合、駒のIDから座標を取得するいい方法ってないんでしょうか?
IF文、Case文のオンパレードになってしまうのは仕方ないのでしょうか・・・・
言語C#

326:名前は開発中のものです。
15/09/13 16:22:10.24 5eWB08IT.net
駒側にも座標を持っちゃえば?

327:310
15/09/14 09:33:29.38 Rx5y2/Cc.net
線形回帰で相変わらず時間食ってます。
一応、バグらしきものはそれなりに解消されましたが、やはりいかんせん収束が遅い。
一晩かけて50~100試行して、途中で止めてやり直しなんてのやってる間に1週間は
あっという間に経ってしまうものです。まだ誤差が大きい。1000回程度回して、どこまで
収束するか見てみようかなと。またぞろ3層パーセプトロンが気になる今日この頃。
確定石計算もバグ取りはできたと思いますが、その分計算が1.5倍ほどに膨れてしまい
ました。しばらく思考実験していたら、確定石なのに確定していると評価できない確実な
パターンも思いついてしまって、どうせその程度のものなら重い確定石計算しないで普通
に準確定石程度にしとくのが良いかと悩み中。
Solverの速度アップですが、前からやろうと思っていた事を少しづつやっていますが、
統計とってきちんとやっていないので10%くらいの差だと良くわからない状況です。
コードのメンテナンス性が下がるのがネック。negaMAXが思いの他高速化してしまい
ましたが、MTD(f)が低速化しているかも(謎)。
それなりに評価関数が動きだしたので、置換表2枚にして反復深化も試してますが、
信じられないくらい劇遅状態です。これ本当にコストに見合うのかなぁ。評価関数の
計算が、というか、その中の確定石計算が重いんだと思うけど・・・。

328:310
15/09/14 17:35:45.53 Rx5y2/Cc.net
反復深化が劇遅なのは、使い方を誤っていました。
リーフのところまで使うとコストアップなのは考えれば当然でした。
まあ、おバカなバグもありましたが。
negaMaxに対して反復深化を試すと、1割程度の高速化となりましたが、
negaScoutに対してやると多少低速化して、negaMaxの反復深化と変わらない速度に。
scout missが3倍近く増えているので、評価関数の精度があまり良くないためかなと。
move orderには、通常はmobilityとコーナー着手を使用しているのですが、これ、
何故か(少なくともFFO#40に対しては)scout missが恐ろしく少ないのです・・・。
MTD(f)が遅いのも、最初に設定するfを評価関数の値にして、それが結構外れで、
探索範囲が広がったのが原因です。scout missと同様に、結局のところ、途中で評価関数
を求めるタイプの高速化は、評価関数の精度次第という当たり前の結果に。
評価関数入れるとノード探索時間が1/10になるので、やはり評価関数用の確定石計算は
準確定石にレベルダウンしようかと思います。中盤AIでの話ですが。
今FFO#40が9秒台なので、あと3~5倍高速化したい。

329:名前は開発中のものです。
15/09/14 21:42:06.86 1S1dymvg.net
その情熱がうらやましい

330:310
15/09/15 20:18:36.71 egtjjW0V.net
準確定石の計算って実は思ったよりコストフルかもと気づいてしまい、
急きょコーディングして比較してみる事にしました。
releaseモードだと、自分の計算方法では跡形も残らないため、時間計測不可能。
debugモードでも、数十倍速いと言う結果になりましたので、今の確定石計算ロジック
は、悪いモノではないと自分に言い聞かせる事にしました。
それより、回帰の学習で、少しずつ少しずつ250回くらいまで学習進めていたのですが、
バグを見つけてしまい、またやり直しです。むむむ。しかも、なおした事で計算時間が
2~3倍になってしまうという。

331:名前は開発中のものです。
15/09/19 00:46:12.58 OgvQcqwn.net
回帰がやっとまともっぽいところまで収束するようになりました。
今、250回学習で、最終ステージが1σ=7.5程度です。
このペースだと、もっと学習させても、たいして変わらない気もしますが、
もう少し学習を進めてみようかと思います。
この評価関数を元に、反復深化+MTDF+negaScoutなsolverを動かして
FFO#40で8秒程度になります。インライン関数化とか、最終2手展開とか
やるべき事はある程度やっちゃったので、自分の力だとこの辺が限度かも。

332:310
15/09/22 22:15:30.40 70n8Fwqa.net
回帰は地道に学習中。もう少しやってみるって感じだけど、収束状態の誤差が大きいのは
ステージ分割でオリジナルな変な事をしているからじゃないかと気になりだした。
あと数百回学習を回したら、通常のステージ分割版も作ってみるかなと。
色々いじってるうちに、FFO#40が6.2秒まで来た。何が良かったのか良くわからない。
反復深化をターゲットに改良しているんだけど、negaScoutも同じ時間。
FFO#41を試したら、反復深化で45秒弱、negaScoutで30秒弱という結果に。
探索ノード数がすごい事になってるので、反復深化のmoveorderのどこかがおかしい
気がしている。

333:310
15/09/25 16:54:56.15 9OkLc3+M.net
回帰のステージ分割というかスムージングを、ネット上でノウハウ公開されてるみなさん
と同じようにしたら、1σで6を切ってきた。やっぱ、スムージングやり過ぎて、精度が
落ちていたのね。同一ステージ内でも値がばらついているので本当に必要なのか、
気になるので、落ち着いたら両方試そうかと。先に方向性見ちゃったから本来とは
逆順になっちゃうけど。
色々頑張ったら、FFO#40が5.1秒、#41が20秒、#42が18秒となりました。
ソースとにらめっこしてれば、ネタはそれなりに出てくるものだなぁと。
しかし、10年前のCPU使ってるThellにようやく勝てた程度。
Zebraの速さは何なんだと。こちらはcore i7だというのに。
目下の悩みは、_mm_popcnt_u64とBitScanFoward64が使えずに、それぞれ32ビット版を
使っている事。外部依存のところで関数の存在は確認しているんだけど、「そんな名前ない」
と出てくる。Cは趣味のAVRで小さいプログラムしか作った事がなかったけど、VC++くらい
巨大になると、どーもよーわからん。

334:310
15/10/04 01:12:59.97 +bDErzEp.net
色々やって、FFO#40でnegaScoutで3.4秒まで来ました。
反復深化は異なる方法で2種類作ってみたけど、FFO#40程度の深さだとnegaScoutとの
差が出てこない。22手とか24手とかまで行くと、差が出てくるように感じるけど、後回し。
どうしても気になって、Zebraのソース解説(日本語)を見つけて、そこに出てるソースを
見ました。自分なりにロジック面で工夫した事はほぼ同じ事をやっている。流石。
あとマクロを多用してる。僕はインライン指定でコンパイラ任せ。
マクロにするとデバッグが極端に大変になるので、マクロ化するのは最後。
そしてaspiration windowと称しているWindowの取り方が独特で、ここに高速化の
秘密があるとみた。早速真似してみると、また>>310のような問題が・・・
今回は前より理解が進んでいたため、2点修正して解消。
副次的に>>310の問題も、直ったと思う。
が、もう一つ答えを間違うケースを見つけてしまった。
今まではルートノードに問題があったけど、こちらはもっと下位ノードで戻り値がコンタミ
してる感じ。デバッグが難しく、重症っぽい。むむむ。

335:310
15/10/07 17:10:37.74 i7/9rua6.net
デバッグで試しに変えた箇所を戻し忘れたりして、二次災害三次災害を出して、
相当混乱したけど、やっぱり境界問題だった。これmoveorderの順によって出ない
可能性もあるので厄介。自分は開き直って、探索の幅に-1つけてるけど、皆さんは
どう回避しているのかなぁ。
zebraのwindowの取り方は、基本的にMTD(f)みたいに置換表利用を前提とした、
固定分割サーチだけど、negaScout(MTD(f)やzebra方式の中で使用している)と
速度的には同等な感じ。最初の探索で勝敗がわかるという点がメリットなのか。
MTD(f)は評価関数が正しくないと、検索時間が伸びる可能性があって、以前から
negaScout単体でも十分な気がしてる。
FFO#40は後述の静的評価関数を判明しているパラメータで最適化すると、
negaMaxで5秒台。negaScoutで3.4秒前後。MTD(f)で2.6秒前後。
ThellさんのHP記載よりは高速化したけど、zebraにはまだ勝てないというか、テストした
FFO#41~#43ではzebraの高速度合(ノード数の少なさ)が突出している。
ノード削減はmvorder用の静的評価関数に掛かっている。静的評価関数のパラメーター
をいじってるけど、FFO#40最速のパラメータとFFO#43最速のパラメータが違い、#43用は
#43ではノード数を半減できるのに、#40では増えて遅くなってしまう。negaMaxで初段の
評価順見てると、まだまだなので、何か別の発想で並び替えが必要な感じ。
評価関数は1000回くらい回してようやく良い感じになってきたけど、まだ収束しては
いない感じ。学習係数はもっと大胆に大きくしても良かったかな。ここまでやると、
スムージング無しを試すのが億劫になってくる。
反復深化は、ソースのメンテが追い付いていないので、一回破棄。

336:310
15/10/12 23:43:49.17 ZTwsIi7y.net
色々やってるけど、FFO#40では速度向上はほとんどなし。
置換表のサイズが見えて来たので、1件ごとにmallocしていたのを、配列にして一括で
領域確保するように変更(当初の形)したら、速度のバラツキがだいぶ減ったように思う。
NPSが変動すると、何か悪いことしかたと悩んでしまい、修正して二次災害を起こすので
地味に大事かな。
FFO#43は多少高速化してて、パラメータ最適化するとMTD(f)で12秒台くらい。置換表
適用範囲の指定を下(葉)からしていたのを、上(ルート)からに変えた。あと、MTD(f)
などでは何回も置換表を読むので、2回目からはmoveorderに置換表の評価を使うよう
にした。
BITBOARDだと開放度の計算が簡単だという事に気づいて、静的評価関数に使ってみた
けど、現在使用中の次手mobility+αの順序より劣る感じ。+αが角とか×とかなので、
序盤から中盤用なのかなぁ。
negaScoutに加えた修正をnegaMaxに適用していたら、negaMaxがおかしくなった。
直して計測したらFFO#40が40秒程度に。冷静に考えると、これが常識的な速度だと思う。
前回の5秒台がどこから出て来たのか、今となってはわからない。前段の+α箇所も
結構変えていて、negaMaxはmoveorderで露骨にノードが増減するので、奇跡的な順序
が実現できていたのか。それともバグやオペミス勘違いかも。
そろそろ本格的にネタ切れ。この辺が限界かなぁ。
後回しにしていた修正箇所を直して綺麗になったら、中盤に行くかな。

337:310
15/10/14 23:51:46.51 V3YF/mde.net
negaMaxはmoveorderの修正漏れでバグってて、直したらやはりFFO#40で5.4秒でした。
MTD(f)は2.4秒でzebra並になったけど、#41以後は3~4倍時間がかかる。
その差は探索ノード数に比例してる。前向き枝刈使うわけにはいかないし、#41以降の
差を詰めるにはmoveorderしかないと思う。
とはいえ主だった事は一通り試してしまった。むむむ。
偶数理論で思いついた方法が純粋に面白そうなので組んでみる。
想定では、速度が結構遅くなるはずなんだけど、まあ面白そうという事で。

338:310
15/10/16 10:24:07.38 Q2afyb0d.net
偶数理論の関数は思いのほか軽くできて、オーバーヘッドの心配が少ないです。
BITBOARDの空マスを、囲まれて独立している塊ごとに分離してBITBOARD配列にして
返す関数を作りました。これをPOPCountで数えて着手した場所が偶数空エリアなのか
奇数空エリアなのかを判定します。
最初にテストしたFFO#43のMTD(f)でいきなり30%近く高速化して「やった!」と思った
のもつかの間。実はミスで判定を逆にしてまして、偶数マスに打って奇数を相手に渡すと
加点になってました。で、いろいろテストした結果、最初にやったケースではたまたま
良かっただけみたい。例えばnegaScoutやnegaMaxでテストすると、係数変えたり判定
方法に工夫を加えたりいろいろしてみても、何をやっても探索ノードが増えてしまう。
自分はオセロ弱いので、必勝法みたいに言われているものが、アバウト的に最善手に
近い手を選んでくれるんなら、並び順の優先順位計算に、あるウェイトで入れてみようか
的に考えるだけでした。意味とか深く考えるよりやってみるという感じでした。が、最後に
残った2つの空所が偶数と奇数とかの例ならわかりやすいけど、空所が4~5か所ある
ような状況で偶数理論を当てはめようというのが間違いなのかなぁと。
あと、薄々思っているんだけど、テストケースとしてFFOは良くないんじゃないかと(汗
FFOに最適化してると、もっと出現頻度が高い例題でより高速化できる可能性を放棄
しちゃっている事にならないかと。

339:310
15/10/17 09:29:41.90 uZH1KzRS.net
最終2手高速化したあたりから、ノード数が過小になっていたので、それを直しました。
自分のと比較すればよいかと思って放置していましたが、そろそろちゃんと比較しようかなと。
結果、探索ノードが思っていた以上に多かった事、そしてNPSは9~11K出てるので、
NPSを落としてノード削減する余地があるという結果に。
あまりテストしていなかったFFO#41と42ではzebra方式と呼んでいた(後述)方法が、自分の
中では最速で、MTD(f)の結果があまり思わしくない事も。MTD(f)の#40は初期条件が良か
ったからの模様。
ここらへんでもう一度、zebraサイトのFFOテストページにあるcomplete logなるものを見て
みると、全然違う。バージョン違いなのか、やってる事が全く違う。
浅い探索をしてfを決めてNull window search(正確には幅3なので正解が判別できる)
を繰り返しているように見える。けど、ログ上に%が出てきて、98%、99%、%無しみたい
になっているので、何らかの方法で前向き枝刈しながら、評価値を求めていき、最後まで
幅3の探索しかしていないのかな。こういうのをPVSって言うのかな。
浅い読みとか、前向き枝刈とか絡んでくるんなら、中盤探索をやってから戻ってきた方が
よいのかな。。

340:名前は開発中のものです。
15/10/19 09:50:52.09 BMJ9Bhec.net
とりあえず、ざっくり中盤探索のnegaScoutを組んでみた。
素の状態で10手読みくらいなら1手10秒以内に終わりそうな感じ。
だけど、いろいろと気になる点が。
とり同一局面から着手可能な手の評価値の順番は、あまりくるっては
いないように見える。ただ、評価値事態は結構ずれている。
そして、黒番白番で精度が全く違うように見える。
言われてみれば、同一局面でも手番が逆転すると評価は全く変わるからなぁ。
今は、手番も一つのパラメータにしちゃってるから、その差異は埋められない。
パラメーターとか評価関数の区分とか再考の余地があるんじゃないかと。
前向き枝刈するにしても、評価関数がフィックスしないとダメじゃないかと。
というわけで、しばらく評価関数方面で時間つぶしかなぁ。

341:名前は開発中のものです。
15/10/26 09:44:35.41 uWG/Yjb0.net
中盤探索に入るにあたって、評価関数の計算の試作をいろいろしているんだけど、
いまいちぱっとしない。100回学習で1晩かかるし、300回試行くらいしないと傾向が
見えてこないので、時間がかかる。
で、仕方ないので、裏で序盤定石を作り始めてしまった。
こちらも棋譜ベースで作ろうと考えている。
そこまで来た時に、データベースのどういうデータが使いたいのかが、逆にはっきりして
来て、今使ってる360万件棋譜の中のデータを選別しようかという方向に傾きつつあります。
が、やっつけで作って中身が思い出せないフォーマット変換のプログラムから直さなきゃならん。
開き直って、もう1度、データ変換から作り直そうかなと・・・

342:310
15/10/30 17:31:41.23 uxyAnbEX.net
棋譜ベースで序盤20手の定石DB作った。
定石DBは置換表をベースに作ったので、検索は速いけど、容量が大きい・・・。
簡単にαβで20手探索してみた。
ネットで調べた定石集に載っていない手筋が出てきてしまった。むむむ。
5手目までエビ系で、しかも石差+2で黒勝ち。棋譜が偏っているのかな。
棋譜は例の50万棋譜計画の奴で10手目、20手目以降を訂正したというデータ。
明らかに壊れたデータが入っていたりと、何かと使いにくい箇所があるデータだけど、
定石DB作るにはこの量でも足りないのかも。
定石探索用の簡易版minMaxを作りながらつらつら考えていたら、終盤探索の
moveorderをもっと良くする方法を思いついた。評価関数の精度次第だけど。
新評価関数は、途中でうっかり仕込んだバグで遅延。ようやく原因が見つかって、300回
試行まで来た。もうちょい収束させたいけど、テストに使える程度にはなってると思う。

343:310
15/11/08 00:32:40.41 LMw8+3qF.net
moveorderを早くする方法というのは、事前に軽く探索した手順を保存し、その手順から
優先して探索するというもの。理論的にはscout missがゼロになる。
探索した手順を取り出す仕組みが必要になるので、その辺を改造しようと思ったところで、
悪い癖が出てしまいました。Cベースのソースを一旦棚上げして、C++ベースのクラスを
利用した形で一から作り直してしまいました。
moveorderの配列をvectorに変えたり、unordered_mapを見つけたので置換表に使って
みたり。置換表は、システム任せにして動的にメモリ確保に行かすと、探索ノードの減少
以上に速度低下して使えない。最初からある程度メモリ確保させようとしているんだけど、
いまいち設定がわからない。動的にメモリ確保するので、速度のバラツキも大きい。
そもそもC++は初めてなので、目的がオセロからC++というかunordered_mapの習得に
なりかかっていたので、一旦棚上げして、配列ベースの自作ハッシュの置換表に戻る
方向にしました。
とはいえ置換表を外してもnode/secが5kくらいしか出ていないので、実装が悪いところもありそう。
というわけで完全に寄り道しちゃってます。

344:310
15/11/12 16:56:19.10 4hPfHY6k.net
ようやく、C++ベースの終盤探索(negaScout)が、Cベースより若干速くなりました。
・unordered_mapの速度のバラツキはデバッガー上限定。
実行ファイルでも多少ばらつくけど、メモリ効率&メンテナンス性からunordered_mapを採用。
・探索した確定手順を返す方法の検討で苦戦。
negaScout+置換表では原理的に無理と認識するのに時間を要しただけでしたorz
置換表無しnegaScoutかnegaMax+置換表では、後者の方が高速。
・確定手順を元にmoveorderする改造の効果は限定的。
moveorderで先頭にする処理が重い模様。適用範囲を狭めて行くと1~3手で同等の速度。
・ハッシュキー生成簡素化で若干速度アップ。
・その他、細かいスピードアップ。
確定手順の導入で50%以上速度アップを目論んでいたのですが、無駄な努力でありました。
一応、与える確定手順の数はマクロ定義で可変できるようにしてあります。
評価関数も修正を加えたいので、データ変換部からまた作り直しです。
目標も無しに同じ事2回やるのは面倒だなぁ。

345:310
15/11/19 14:23:44.03 W/V+CKXD.net
定石部分もクラス化が終わりました。クラスなんての扱うの初めてなので、もうちょっと
綺麗にできたかなと思う面もありますが、C++習得が目的ではないので。
終盤確定読みは0.05秒刻みで速度アップ。FFO#40で2.3秒になりました。
今まで、速いプログラムでは30手目くらいから勝敗判定を始めると言う記述を読んで、
なんて速いんだと思いつつ、何に使うんだろうと思っていましたが、ようやく腑に落ちました。
オセロというゲームは勝敗だけが問題で、勝つんなら2石差で十分。「少なくとも負けない
手」というなら、(-1,0)のNull windowで探索してβカットされた手を選べば良い。評価値は
不定(これより良いという値)でも負けない手であるという点では「確定」手順です。moveorder
が正確なら、極端に石差を減らす手も選ばない。これなら現状でも25手ちょいくらいは行けそう。
ただ、これは勝勢の時の話で、敗勢の時の評価値は「これより悪い」という数字だし、
逆転は相手のミスに期待するしかなく、相手も同等のロジックのAI相手だと必敗となる。
結局定石段階で勝負がつく事になります。
今、定石DBは30手を前提に組んでいますが、31手目から勝敗判定ができるんなら、定石
を外れない限り中盤探索が不要になり、定石から外れた時にのみ中盤探索が必要になる。
つまり中盤探索は対PC戦では重要度が低く、定石が切れたら、即、終盤探索が始まる。
そもそも評価関数が良ければ、中盤もあまり深く探索する必要がないわけで。
深く読む意味って、なるべく評価が正確なステージを使いたいからなんだなぁと。
というわけで、次はそろそろ中盤探索です。Multi Prob Cutの英語論文を読まねばならぬ・・・。

346:310
15/11/21 00:05:47.02 WWzrsUCT.net
定石DBを使って30手目まで着手した盤面の予想石差が2で勝ち判定だったので、
試しに31手目から勝敗判定をしてみました。
(-1,0)のNull windowで7分30秒ほどで解けました。
(参考)勝ちと引き分けを区別するために(-1,1)で計算すると9分30秒ほど。
探索ノード数がintではオーバーフローしてしまった・・・。
これから、33~4手目(残り26~7手)くらいで、10秒程度で解けると予想されます。
勝勢ならこれで良いのですが、敗勢の時は、初段がβカットされないので10倍程度
時間がかかる。そうすると、残り25~6手目くらいが勝敗読みの限度かなと。
もっと高速化が必要なのか。それとも、何か発想の転換ができるのか。

347:310
15/11/23 21:01:42.47 24rahmZ0.net
ProbCutとMultiProbCutのBUROさんの論文あらかた読み終えました。
最初、MPCの方から読んでちんぷんかんぷんだったので、ProbCutを読んで、
戻って来て、ようやく実装のイメージが湧くところまで来ました。
というか、この発想に至る道具立てや考え方は、既に揃ってた感じ。例えば>>323とか。
これ>>345-346の勝敗判定の高速化に使える気がする。相手側の手番では
前向きカットしないようにすれば、相手の反駁手を見逃さないからいけるんかなと。
あまり深い読みで使用するとパラメータ作りでしばらくPCを占有しそうだけど。
カットペアは結構アドホックに決めているのかな。各組合せを総当たりで調べても、
σにそんな差があるとは思えないし、特異的に良い組み合わせがあるとも思えないし、
むしろ読む深さの差が増えるにつれてダラダラとσが大きくなって行くだけじゃないか
と思う。毎深さごとにMPCしてもオーバーヘッド負けになるだろうし、再帰的に使う事を
考えたら、2^n+αで4,8,12,16,20,24ってな感じで良いのかな。

348:310
15/11/25 22:32:57.73 APRE5Y1F.net
条件を決めて簡単にMPCパラメータの計算プログラムを作って検証してみました。
30手目の時点(深さ30)の時の浅い探索0~10手でMPCパラメータを計算してみました。
例の300万件棋譜の30手目以後完全読み(らしい)190万件ほどのデータからランダム
に200件ほど抽出して使用。
結論)δが10石、R-2が0.7未満という状態で、とても使えたものではないという事に。
ただ、35、40、45手目時点からのカットを試す価値はあるかも知れない。
一方、30手目の時点で、深さ10の探索に対して、浅い探索6までで計算すると、
浅い探索4手でδが2石、R-2が0.931、浅い探索6手でσが1.5石、R-2が0.962
程度と、まずまずの結果に。これが、論文通りの使い方。
当たり前だけど、こちらは十分使えそう。ただ、結局深い探索に対して浅い探索の深さを
決めるのに、全パターン試すしか無いという。まあ、BUROさんのマネしちゃえば良いけど。
あと、中盤読みのプログラム、やっつけで、終盤探索の手順作成用の浅い読みプログラム
転用したんだけど、これnegaMaxなのよね。negaScout+MTD(f)にするなり、もう少し、
素の高速化をしないとパラメータ計算が大変。

349:名前は開発中のものです。
15/11/29 22:05:16.61 gx8DmdDE.net
googleとかfbが囲碁のAI作ってるが、どんなもんなの

350:310
15/12/02 23:21:25.70 Xp/MZwxE.net
とりあえずMPCの仕組と終盤探索用のパラメータだけ作り、終盤探索と勝敗判定に
適用してみました。
勝敗判定は31手目から。浅い探索は残り手数の1/3。T=1.5で時間短縮が微妙な感じ。
終盤探索はFFO#40でテストしたところ、T=1.5だと途中で正解着手がカットされている
模様で、T=2.0で正解。T=2.0だと時間変わらずみたいな微妙な結果に。
もう一度、MPCの論文を良く読んでみましたが、どちらかというと評価関数の精度の差
の方が大きい様子で、もともと標準偏差が倍近いので、そこを何とかしなきゃならんと。
論文を良く読むと・・・評価関数に確定石はおろか、mobilityも使っていない。使っている
のは、パリティー(手番)だけで、ここは自分の方が精度が良い方法のはず。という事で、
急きょ評価関数の説明変数をパターンだけにして再計算に着手しました。
とはいえ、書いてある学習係数があまりに違いすぎるので、自分がバグってる可能性も。
また、ネットでBUROさんのパワポ資料(2002年)みたいなのを見つけて読んでみると、
「selective endgame search」と称して、MPCの終盤探索への応用がサラっと書かれて
いて、「いまどきの強いオセロプログラムはみんなやってる」との事。iterative deepingを
前提にしているのでmoveorder作成で使ってるのかなぁ。正解着手だけ与えても速度アップ
は限界があり、正解以外着手のnull window searchの時間がバカにならないので。
あと、中盤探索は(17,5)というカットペアの記載あり。zebraのFFOのログでは中盤探索が
2.5kNPSなのに対して、僕のは250MPSと、速度が1/10なので・・・深さ17はしんどいかなと。
ちょっと期待しているのは、前述のとおり確定石計算を評価関数で使用しなくなったので
その分は速度アップしていないかなぁと。
評価関数の再計算を始めてしまったので、しばらくは中盤探索が動かせません。
というか、本当にLRの計算があっているのか、バグは無いのか、不安になる…

351:名前は開発中のものです。
15/12/02 23:37:59.26 Xp/MZwxE.net
>>349
囲碁オセロ板の該当スレで聞いた方が良いかなと。
コンピューター囲碁ソフトについて語るスレ30 [転載禁止]&#169;2ch.net
スレリンク(gamestones板)

352:310
15/12/04 23:35:12.62 DNSRUk3b.net
結局、確定石が評価関数の誤差の大きさと、収束性の悪さの原因だったみたいです。
前半から中盤はmobilityのウェイトが大きそうなので、とりあえず復活させてみました。
あと、スムージングは、あるステージで出現しなかったパターンが隣接ステージにある
可能性も考慮し、ウェイトがゼロのパターンを減らす目的もあるようです。
実際、200試行ちょっとでかなり誤差が減ったのですが、FFO#40で試すと途中の評価値
のバラツキというか、極端に0に近い局面が現れて、2σ以上の差異が簡単に出てしまい
ます。そこで、ちょっとだけスムージングを入れて、かつデバッグ段階ではウェイトゼロの
出現をアラームできるように改造しようかと思っています。
評価関数の重要性を痛感しています。しばらくは、ここで悩む事になるのかなぁ。
最低でも300試行するとなると3日かかる。

353:310
15/12/05 23:27:03.86 VLRyPTJJ.net
モビリティーも収束悪化の原因でした。
確定石の数にしても、モビリティにしても、ある程度大きな数字が出るものがダメっぽいです。
評価パターンとウェイトを確認できるようにして、FFO#40~41の完全読みに登場する盤面を
チェックしましたが、ウェイトゼロのパターンは出現していないようです。
評価値が大きくぶれるところがありますので、スムージングを入れてみて計算開始です。

354:310
15/12/07 10:00:41.29 JSVZKjkd.net
スムージングも外してみたら、Buroさんの論文なみ(か、それ以下)のσが出そうな
感じになってきました。収束が良いのでβも大きくできたし、その後の計算でも工夫を
入れたので、Buroさん論文みたいに300回試行で十分なレベルになりそうです。
ウェイトゼロのパターンはありました。FFO#40の50手目のCORN2x5に1つ現れます。
現在selective endgame searchがどんなものなのか、想像を膨らませています。
iterative widening endcutのイメージがなんとなくつかめてきました。
ソースを探して見ちゃえば早いんだろうけど、面倒だし、想像だけで頑張る。
MPCが動いたら、solver改造して、本当に速くなるのか確認する。

355:310
15/12/10 23:16:49.62 lQAJMVKx.net
結局、評価関数は1000回試行までやってます。
β・1/Nでやってるけど、それだと収束が遅いので、100回試行ごとにβを倍々に。
1000試行目で発散するステージが出たので、βを下げて最後の100試行を実行中。
その間、反復深化などで使えるように、置換表を改造。前回評価範囲をmoveorderで
再利用します。いちいち消しているとメモリ解放で時間がかかるし、全データを入れたまま
用途をキーで区別すると、使用時に選択する事になりオーバーヘッドが気になるので、
一番新しい評価値をひたすら上書きし、置換表として使用する時のみ、今回探索か
区別するようにしました。moveorderで若干割り切った作りです。
同時に中盤探索(MPCなし、反復深化)をちゃんと作ってみました。MPC計算で、結構深い
深さまで探索する予定なので、反復深化が上手く機能するようなMPC計算ロジックを考え
ようと思っています。
それができたらiterative wideningのテストをしてみようと思います。

356:310
15/12/11 22:32:36.55 c1YdnEjo.net
あちゃ。ウィンドウ幅1でiterative wideningやると、正解着手もβカットされた手も
置換表の値が全部同じになって、次の探索でmoveorderが意味なしになって、
速度が大幅低下する事が発覚。
仕組み考えないと・・・。

357:310
15/12/13 23:14:55.34 RUGsIY6w.net
一応回避したけど、MPCの速度向上は限定的。
中盤探索というか評価関数が驚くほど遅いのだろうという結論に。
放置していた中盤探索の素の高速化に入ります。
1か所ネタはあるんだけど。

358:名前は開発中のものです。
15/12/18 00:28:56.19 ht2BaviT.net
中盤探索で2か所改良して、速度は2倍にアップ。まだzebraの6掛け程度の速度です。
終盤探索のiterative wideningを想像しながらテストするも、いまいち速度向上が望めない。
MPCのカット基準を緩めながら(widening)、置換表にmoveorderを貯めていく事でβカット
をどんどん起こさせて、最後の完全読み時点ではほぼ完ぺきな順序に並び変える事で
高速化を実現する方法だと想像しているんだけど、違うのかなぁ。
そんなこんなでやけくそ気味に、浅い探索(11手読み)+negaScout(-∞,+∞)を試したら
FFO#40で1.93秒という最速タイムが出てしまった。MPCもMTD(f)も意味なしorz
#41,#42もこの方法でかなり高速化したけど、それでもまだzebraの方が速い。

359:310
15/12/20 17:21:06.88 UpZkem/K.net
中盤探索で改良をしたらかえって遅くなるを繰り返してます。
で、やけくそ気味にmoveorderの「置換表がない時」の計算値を、簡素化してみたら
中盤探索の速度そのままに、終盤探索部分の探索ノードが減少して高速化。
終盤探索部分も同様に簡素化したら、FFO#40で1.75秒以下になりました。
それでも相変わらず#41/42はzebraがずーっと早い。
で、MPC使うと遅くなる理由を考えていたら、いま使っているMPCのセットは終盤探索用に、
残り手数と浅い読みのセットを独自パターンにして計算した奴だと言う事を思い出した。
深い探索のスコア=終局のスコアとなり、深い探索が不要になるので。
中盤の高速化するネタももう出てきそうにないし、先に進むか・・・

360:名前は開発中のものです。
15/12/23 11:41:36.91 Acs4Om0o.net
iterative wideningって詰め碁用のアルゴリズムっぽいけど違うの?
310の言ってるのってただのAspiration Searchか何かに見えるけど
てか置換表にmoveorderを溜めるとはどういう意味だ

361:310
15/12/23 16:26:13.00 MLtsaD3t.net
どもです。
Buroさんのパワポっぽい資料に名前しか書いてないので中身がわかりません。
わかっているのはMPCと併用するらしいことくらいです。
iterative wideningで検索すると確かに碁の関連の英語論文がヒットしますね。
関係なさそうだと思って放置していましたが、ちょっと見てみようかなぁ。
置換表云々は、僕の想像です。
αβを前提にしたアルゴリズムで高速化するネタの一つに、moveorderを工夫して
βカットが起きやすくするってのがあると思います。
反復試行する際、置換表には前回の評価の範囲が入っています。
それを今回探索のmoveorderの並べ替えに利用しようというものです。
反復深化なんかと同じ考え方です。
逆に言うと、反復を前提としたアルゴリズムで高速化するネタが、それくらいしか
思い浮かばないのです。

362:名前は開発中のものです。
15/12/23 20:37:25.92 Acs4Om0o.net
ああ、オーダリングに以前の探索の結果を置換表から引いて使うってことか
置換表に順列か何かを放り込んでいくのかな?とか思ってしまった
bitboard + NegaScout + 置換表 + MPC + 評価関数とマージンの学習
をやってるっぽいのはわかったけど、とりあえず定番どころは全部入れてるのかな
NegaScoutで最初のノードを探索するときに、
探索窓を(-inf, inf)で探索せずに、前回の評価値eを使って
(e - d, e + d)で探索して、失敗したときに限り窓を広げて再探索するのがAspiration Searchだけど
もうやってるかな
あとCPUのSIMD命令使ったり、並列化したりとかはめちゃ効果でかいよ

363:310
15/12/23 22:38:37.71 MLtsaD3t.net
>>362
ご助言ありがとうございます。
MPCはまだ途中ですが、そんな感じです。
終盤n手高速化の類もしています。中盤探索だと葉に近いところで置換表外すと、
著しく速度が低下するので、最後まで置換表を使っています。
で、中盤の速度がいまいちで12手読みくらいが実用範囲って感じです。
MPCでd計算に100棋譜くらい試して一晩で計算できる範囲は13~14手くらいが
限界な感じです。そろそろMPC計算しちゃおうかと思いつつ、まだ悶々と中盤探索で
どこか高速化できないかトライ中です。
SIMD命令はコンパイルオプションでそれらしい場所があったので、設定してみましたが、
速度変わらずで放置しています。どうやって使うものなのでしょうか?
そもそも、組込関数のpopcountとかbitscanで64ビット版が使えずに放置してる状況です。
並列化はMPCが終わって、一通りオセロの形にしてから、次ステップで勉強しようかと
思っています。
アスピレーションサーチは、1σは±7~8手なので試しに±8の幅にしてテストしてみた
ところ、確かに若干高速化できている様子です。mtd(f)は下から寄っていく時はβカットが
効くのですが上から寄っていく時は遅いので、一発目で探索できる確率を上げつつ、
ある程度幅を絞るには、このくらいがちょうど良い感じですね。

364:310
15/12/24 20:33:24.09 zDiJT168.net
ちと調べてみました。SIMD命令はx64でコンパイルしている時は、設定しなくても自動的に
使うようになっているみたいな説明を見つけました。
並列化とかベクター化とかもコンパイラが自動でやってくれるみたいですが、レポート出し
たら確かに一つも対象になっていませんでした。評価値算出とmobilityの2関数は、なんか
効きそうな気がしますので、少し悶々とトライしてみます。
また、_mm_popcnt_u64と_BitscanFoward64は、今やってみたら、何故か使えました。
色々とコンパイラのオプションをいじったのが原因かなぁ。謎。
多少速度アップした模様です。
アスピレーションウィンドウはdの計算しなきゃと思っていましたが、よくよく考えたら、
評価関数の計算時の誤差ログが残っていますので、そいつでパラメータ作成してみます。
と、久々にFFO#43まで時間計測したところ、#43で答えが違ってる。
数か月前に最終2手高速化をいじった時にバグを仕込んだ模様です。
調べようとdebugモードにしたら64ビット組込関数が使えない。
やっぱりコンパイルオプションのどこかみたいですが、わからない。
だんだん問題が発散してきて、頭の切り替えが追い付かなくなってますorz

365:名前は開発中のものです。
15/12/24 20:53:24.01 DG4HDn4P.net
pop_cntはめちゃめちゃ速度上がった経験あるが(三割アップ)
オセロだとそうでもないのかな。

366:310
15/12/24 22:56:29.36 zDiJT168.net
_mm_popcnt_u32()はすでに使っていました。u64が使えなかっただけです。
u32→u64で3~5%くらいの高速化になっています。
困った事に、debugビルドの側では、まだ64bit版が使えていません。
debugを使いたい時は32bitに直さないといけない。
コンパイルオプションをいろいろ見比べていますが、どこなのかいまだにわかりません。
#43は最終2手なのか1手なのか、どちらにバグがあるのか切り分けようとして
ソースいじっているうちに直ってしまいました(汗)。

367:名前は開発中のものです。
15/12/25 15:25:23.28 skIhqDAd.net
>>364
コンパイラの自動ループ展開(あんま賢くない)に限らず、
手動でAVXだのSSE命令だの使えるところは使ったらという話
あとMPCは本質的に前向き枝刈りなので、過激に刈りすぎると答えがずれる可能性はあると思うけど
(バグの原因は当たりがついているようなので関係ない気がするが

368:310
15/12/26 11:23:54.66 2a5cp76f.net
どもです。バグったところはMPC使って無い箇所でした。
コンパイラの自動ループ展開は上記2か所で試してますが、なかなかうまく行きません。
なんとか依存関係を解消してループ展開強制すると劇的に速度低下する状態です。
その代り、いろいろググっていたら、BMI命令を見つけて、BLSIとPEXTを使ってみました。
速度バランスが変わったのでパラメータで置換表適用範囲を狭めるなどもしましたが、
FFO#40で1.55秒前後まで高速化できました。中盤探索も高速化はしているはずですが、
数%程度の改善というところでしょうか。まだ50%は高速化したい状態です。
色々アドバイスいただいたお蔭で、ようやくSIMDまわりの使い方がわかってきました。
ここまで来ると、BITBOARD操作の関数の見直しをしたくなりますね。
中盤探索の一番重い部分なので。

369:310
15/12/28 10:45:49.88 i0yT273K.net
デバッグモードでu64系の関数が使えない件、解消しました。
MTD(f)に代えてアスピレーションウィンドウを採用しました。
中盤探索は、隣の評価値をたどっていくと、かえって遅くなるのでnegaScoutだけで
探索していましたが、これでMPC計算が多少高速化できそうです。
MPC計算はまだしていません。反復深化でどのくらいの深さの探索で、どのくらいの
件数なら実用的に計算できるか試行しています。14手読みまでは行けそうですが、
15手だと厳しいかなぁという状態。20手付近では盤面によっては、探索ノードが爆発的
に増えて、時間のバラツキも大きいです。
また、FFO#40-44の完全読みを計測しました。zebra比で#40は圧勝、#41-42は引き分け
ですが、#43-44は完敗。理由は#43-44は正解となる初手が2つあるためで、#43は10秒
以上かかってます。むむむ。

370:名前は開発中のものです。
15/12/28 21:28:38.25 kMgyHY3u.net
オセロ完全解析は何年後くらいになりそうですか?

371:310
15/12/29 02:31:09.04 F/Ba7yoX.net
ちょっと一括変換操作を誤って大変な事になっていました。一通り直していたところ、
FFO#40で1.45秒程度が出るようになってしまいました。多分、修復がてら置換表登録・
検索関数の変数の並びを、整列したのが効いたのだと思っていますが、びっくりポンです。
前回課題の正解着手が複数あるケースですが、MTD(f)のような評価値決め打ち系の
探索では、ぴったりの答えが見つかった時点で、ほかの手を探索する必要が無い事に
気づき、直してみたところ、FFO#44は速度アップしました。が、#43はまだ駄目です。
とはいえ、#43は浅い探索の評価値が外れすぎて時間がかかっているような感じなので、
浅い探索の深さを残り手数で調整すると直りそうな気がしています。
あと、FFOテストの全データをテストできるように登録しましたが、#59を見て、はたと、
途中全滅時のスコア計算が違う事に気づきました。自分のは一番単純なアメリカルール
です。ここを直すと、確実に時間が遅くなるような気がしますが、明日直してみます。
てな事をやって、一晩に0.1秒(比率にして7%前後)も短縮していると、まだなんか
やる事があるんじゃないかと・・・。

372:名前は開発中のものです。
15/12/29 03:05:56.17 rs+91GZQ.net
結局MTD(f)をやってるのかやってないのか意味わからんな

373:310
15/12/29 10:25:40.74 F/Ba7yoX.net
って、βカットしない事を確認しなきゃきゃいけないから、ぴったりの答えがあっても
全手を探索しないとダメじゃん。すんません。

374:310
15/12/29 10:52:28.77 F/Ba7yoX.net
>>372
やったりやらなかったりで、いろいろ比較して試してます。
MTD(f)では、ワーストケースではウィンドウ中心が評価値の最少単位で動く関係で、
1石以下の少数計算をする中盤探索では、よけいに時間がかかる事が多いです。
そのため、アスピレーションウィンドウ導入前はただのnegaScoutにしてました。
終盤探索は、最少単位が1石になりますので、許容範囲です。
MTD(f)もアスピレーションウィンドウも、所詮本チャンのnegaScoutを呼び出すための
ドライバーにすぎないので、どちらも用意して、何かの折に速度比較しています。
今回は、ボツりましたが、ぴったりの値が見つかったら後の探索を省略する際には、
MTD(f)の方がマッチングが良かったので、そうしました。
ボツになりましたので、またアスピレーションウィンドウに戻りましたが。
#40ではzebraよりはるかに高速化できましたが、#43など遅いケースでは、数倍の時間が
かかります。こういうタイプの時間差は、単純な高速化じゃなくて、何らかのアルゴリズム
の違いがあるのかなと想像しています。

375:310
15/12/30 00:01:33.75 lfikhn/D.net
結局、本日は探索速度アップばかりやってました。
中盤探索というか評価関数の計算でBMI2命令を徹底的に使ってみました。
また、ボードの回転操作系も見直しました。
10%程度は高速化できたと思います。でも、期待したほどではなかった。
あと、速度アップするなら、ボードの対角線転置かなぁ。あと効果は微妙だけど、180度
回転がビットオーダーの逆転なので、これも何か組み込み関数があったらうれしいなと。
終盤探索では、FFO#59問題に対処。
スコア計算の修正と、全滅など64石の差がついた時に、βカットと同様に後続の探索を
パスして時短。minMaxで言うところのα値の更新があり得なくなるからです。
浅い探索が11手だと3秒程度で解けるのに、15手だと60秒かかったりと、いまいち動き
に納得がいかないので、まだ何か問題があるかも知れません。
中盤探索をあと50%は高速化したいなぁ。というか、zebra見てるとできるはず。

376:310
15/12/31 21:04:10.05 i5TR43+g.net
2015年の年の瀬は、MPC計算のメモリーリークの原因探しで更けていく・・・
置換表クラスあたりっぽいんだけど、デバッグの仕方が良くわからないという・・・

377:310
15/12/31 23:46:42.84 i5TR43+g.net
ギリギリ12時前に直った。
メモリリークではなく、不正なアクセスでした。
多分直ったと思う・・・
来年の抱負は、MPCの計算をする事と、GUIを作る事です。
元々VBのGUIからDLLで呼び出すつもりでしたが、なんとなくC++でやってみようか
という気になってきています。

378:310
16/01/03 11:08:48.54 3YPfF+nL.net
バグは解消してました。なんとも不可思議な事になっていました。
スタック領域を破壊していて、破壊された箇所がたまたまdepth(残り探索深さ)だったため、
探索深さがマチマチになってました。計算時間やメモリ使用量が異常になる以外は、そこそこ
それっぽい探索結果が出ていたため、メモリリークだと思ってしまったという。
中盤探索の置換表適用範囲も、ちゃんと効くようになって深さ11~12まで置換表を使用
するのが効果的と出て、探索値のバラツキもそこそこ揃って、探索時間も予想できる範囲に。
メモリ使用量も安定しました。
ある棋譜に対し、20手目から終局まで順に、深さ1~17の探索を、反復深化を活用しながら
探索値を求めるプログラムを用意して、14棋譜を対象に実行したところ凡そ7時間で完了。
速度的にはこんなものかなぁという感じ。もっとも、深さ17だと結構、探索時間・ノード数の
バラツキが大きいので、10件前後だと終了時刻もバラツクはず。
とりあえず、棋譜からランダムに10件程度を抽出し、この探索結果を貯めていくところまで
作りました。トータル100件程度集めれば、MPCパラメータ計算には十分だと思う。
探索結果を貯めてあるので、毎晩10件くらいづつ追加し、直説法で都度パラメータ再計算
して精度を上げていく事ができる。

379:310
16/01/04 22:22:10.63 1p46+Vgy.net
MPCのための探索データ蓄積の間に、並列処理について調べてみました。
VC++だとopenMPとPPLってのが使えるみたいです。
?concurrent_unordered_mapが便利そうなので、PPLにしよううかなと。

で、脳内コーディングであれこれ考えていたら、AIの中でBoardクラスを参照渡しして、
差分型で盤面を進めたり戻したりしているのが、とても並列処理と相性が悪い事に
思い至りまして・・・。コピー型に戻して、何をクラス化するのかとか見直してみようかと
言う事に。
多分数日がかりになるかなと。

380:名前は開発中のものです。
16/01/04 22:36:46.74 iMclxIQO.net
Boardはスレッドごとに持てばいいんでない
スレッドを生成するときだけコピーすれば

381:名前は開発中のものです。
16/01/05 01:07:47.45 UyX0E5Wd.net
自分の場合は将棋作ってて、並列にしたけどstockfishのソースとか参考になるよ
スレッド待機させてノードの終わりの方で判定して、OKなら分割させて
そこで上でも言われてるけど、盤の情報をコピーして走らせるの
自分は盤面作成とか更新巻き戻しなどを最初スレッドとか考えてなく直にアクセスしてて
全てポイントにからに変更するのが、かなりだるかった

382:名前は開発中のものです。
16/01/05 20:35:26.92 zrGyzNpa.net
へーこのスレって意外と人いるんだなぁ
将棋作ってる人がいるとは驚き

383:310
16/01/09 02:12:28.10 GhyCVx1P.net
どもです。
とりあえず、コピー方式に変えてましたが、変にバグを仕込んだりして、時間がかかって
ました。ようやくデバッグもあらかた終わったのですが、まだ原因不明・解釈不能な速度
差があって、終盤探索のみ速度が10%以上低下した状態です。
というか、コピー版を書きながら気づいた箇所を、ボードクラス版にも反映すると、ボード
クラス版が高速化して、差が広がるという。
で、クラス版がFFO#40で1.40~1.42秒になりました。
>>380さん
おっしゃる通りですorz
プログラム直しながら、ネットでVC++の解説をつまみ読みしながらのコーディングに
限界を感じたので、オライリーさんの出番という事で、アマゾンに本を数冊注文しました。
到着待ちの間にやるなら、適当に作っていったクラスの整理統合かなぁ。
あと、openMPのお勉強。

384:名前は開発中のものです。
16/01/09 02:32:30.66 Uphigh+6.net
最近のvc++使ってるのなら普通にstd::threadでやるのもいいかも

385:310
16/01/10 01:14:26.88 F6Uvkb4b.net
うわ。色々やり方あるのね。
VC++だとPPL、openMP、std::threadか。
PPLについては、逐次処理のまま置換表で使っているunordered_mapをconcurrent版に
変えてみたところ、置換表付探索の速度がおおよそ半分になってしまったので、結構
微妙な印象を持っています。
とりあえずopenMPでどこまでできるか試してみて、気に入らなかったらstd::threadで
細かく制御できないか考えてみます。
先ほど、コピー版で置換表登録に影響するバグ発見。直したところ、FFO#40が1.26秒
とかになってしまいました(汗)。不可思議な速度差の原因はこれで間違いないと思います。
edaxまであと10倍の速度アップかぁ。並列化で3倍くらいまで詰められないかと期待。
一応、Boardクラスのポインタ渡し版(差分方式)も試してみましたが、今のところ、若干
速度低下しています。もともとの差分方式は、Boardクラスを継承したAIクラスのメンバ
関数として実装してます。
これらの一見無駄な作業も、バグ探し&逐次探索の速度アップに有効だったという事でorz

386:310
16/01/11 20:31:40.39 IrhGHm3u.net
とりあえずopenMPで並列化トライしてみましたが、コンパイル中に内部エラーになる。
ネットで見ると最適化オプションがらみらしいけど、なんかよくわからなかったのでパス。
PPLを使って、とりあえず並列化のテスト。オセロでは標準的と思われるn段YWBCに
してみました。forループみたいな特定の形ではPPLは結構簡単という印象。
バグは一通りとれた状態だと思いますが、FFO#40で1.25秒が0.85秒程度になり
30%強の高速化。あと少しだけソース修正するつもり。
使ってるパソコンは2コアでした。昨夜まで4コアのつもりでいましたが(汗)、2コアなら
こんなものなのかな。

387:名前は開発中のものです。
16/01/11 21:53:26.50 oLh2eOse.net
2コアYBWCにしてはまあまあ並列化されてるような感じ
もちろんもっと効率化はできるけど

388:310
16/01/13 13:02:44.01 Yd1pcfW8.net
どもです。
コア数2だと、理屈の上では2倍近くまでは速度アップできるのかなぁと思います。
一般的にはどのくらいの倍率をターゲットにしているのでしょうか。
YBWCの適用のパターンをいくつか試しましたが、タスクマネージャーで見たCPU使用率
は、ほぼ100%になってるので、単純にはスピードアップは難しい感じがしてます。
PPL自身のオーバーヘッドなのか。
PPLは楽ちんだけど、チューニング箇所がなさすぎな感じ。
あと、YBWCやってる以上、YBの着手をmove orderingする意味が無い感じなので、
sortが一つ省けるかなぁというところ。ルートに近いので、あまり効果は無いと思うけど。

ここまで来ると、8コアのパソコン持ってきたら・・・
SIMD拡張命令だBMI命令だを使っておきながら、コア数2で頑張るのもどうかみたいな。

389:310
16/01/16 09:10:45.76 mjTPCiWE.net
PPLはMicrosoftのDeveloper Networkくらいしか情報が無いので、ひたすらリンクを
たどって情報収集してますが、ほとんど機械翻訳で、結局カーソルあてて英文読ま
ないと意味が分からないという・・・
で、排他制御とかいい加減にしていたノード数カウントなどをきちんとして、ソースの見易さ
と効率を上げようと色々と細かく修正。combinableとかcritical_sectionとかInterlockedとか。
と・・・思ったら・・・中盤探索で確率10%程度で違う答えが返ってくる・・・
並列探査のバグはわかりにくくて時間を食ったのですが、どうもcombinableの動作が変。
期待した動作をしていない。でも、情報が無さすぎで、どこを直せば良いのかわからず、
結局同等の機能を動的配列にしてしまった。

390:310
16/01/16 11:37:48.70 mjTPCiWE.net
中盤探索を1万回程度回して、違った答えが返ってこない事を確認できました。
ノード数カウントはInterlockedIncrementを使っているんだけど、やはり排他待ちロスが
大きいようで、ノードカウントありだと0.8秒前後、無しだと0.7秒前後になる。
使えなかったcombinableみたいな形にして、一つの再帰関数内はローカル変数で加算
して、最後にまとめて1か所で排他加算するようにしてみようかな。
並列タスクの起動順で、探索ノード数が違ってくる関係で、実行時間のバラつきが±0.5
秒くらいになっている。

391:310
16/01/18 09:54:27.64 ED4vwFCp.net
結局、ノード数・リーフ数カウントは、戻り値を構造体にして返す方向にて検討。
普段の探索には不要だけど、solverだと表示したいので。
これで完全にローカル変数になり、排他ロスを気にする必要がなくなる。
デバッグ用の置換表回りの統計は、所詮デバッグ用なので、一旦全削除。
必要になったら、こちらは#ifdefで囲って、排他加算する。
で、構造体の形であれこれ悩んでいたら、戻り値をクラスにできる事に気が付いて・・・
あらためてC++すげーと感心中。
けど、かなり全面的な修正になるので、時間食ってます。
まずは中盤探索を修正して、ノード数がおかしくない事を確認。
終盤探索の修正はこれから。探索を使う系の統計処理も変更しなきゃならないけど、
MPC以外は、次いつ使うかわからないw

392:310
16/01/19 00:13:53.27 Dh1WPUXC.net
終盤探索の修正完了。
0.8秒±0.05秒と、結局、Interlockedでグローバル変数のノード数を加算するのと、
大して時間が変わらないか、もしかしたら微妙に遅くなったかも。元に戻すのが面倒
なので、他で改良点を探すしかないかなと。

393:310
16/01/21 10:04:20.88 c00KCFqr.net
YBWCでは、最適着手手順(PV)のラインで置換表でmoveorderする意味が無いという事
を突き詰めていくと、いちいち前回探索の置換表を引くループを回して、都度最善の着手
を求めるのではなく、前回探索で得たPVを渡せば、時間が短縮できそうな気がしてきま
した。ツリーの浅い部分なので、全体にどれくらい効くのかはわかりませんが。
また、浅い探索などで最適着手手順を取得する時、negaScout+置換表だと正しいscoutmiss
が発生した時に、nullサーチ時の置換表が適用されて、それ以後のPVが得られないという
事で、悩むところではあります。
まずは戻り値の構造体でPVを返すように改造して、効果を見たうえで、YBWCを適用する
深さでnegaScoutをやめてnegaMaxにするか、それともnullサーチは置換表適用外とするか
どれが良いか試してみようかなと思っています。
できるだけ高い位置で並列化した方が良いという指摘と、置換表もなるべく高い位置で
効かせた方が良いという指摘の、どちらを優先するのかですね。置換表はばっさり探索
をカットできるけど、並列化はカットせずに時短するので、置換表優先かなという気もして
いますが、高い位置でどれくらい置換表が効いているのかもわからないですし・・・。

394:310
16/01/23 01:31:00.95 0OQfWIYl.net
パソコン再起動すると、何かのタスクがCPUを30%くらい占有してしまいます。
昨日まで快調に動いていたのが突然遅くなって、悩んでいましたが、これが原因のようです。
というわけで、本日は色々改変したソースの速度が計測できずに悶々としてました。
色々すったもんだ挙句、PVラインを渡す形にしましたが、効果があったかどうかは微妙。
色々付け足した事で生じた速度低下はペイしたかなぁという感じで、#40で0.78秒前後。
本格的にネタが尽きて来たので、ここから先は、MPCをきちんと実装してiterative widening
にかけるしかないかなぁという感じです。あと、定数で渡している置換表適用高さなどの
パラメータを、空マスや使用条件で作ると、実用的になるかな。

395:310
16/01/27 01:18:29.98 IVwAw5rN.net
オライリーの並列化本が来たので拾い読みしながら並列プログラミングの勉強。
PPLの各アルゴリズムが何を目的とするものなのかが、少しずつ分かってきました。
抽象化度が高いので、最初のとっかかりとしては良いかも。何故かcombinableが
上手く動かないとか、parallel_reduceの中身がよく分からないとかありますが。
で、並列化できるところを探して速度が上がるか試したり、同じ処理をより綺麗に書き
換えしたりして、微妙に速度アップし、0.70~0.75秒くらい、ノード数が15M、NPSが21M
nps程度になりました。たまに0.68秒台が出ます。
Edax4.3のFFOベンチの結果を確認したところ、ノード数で1.5倍、NPSで4倍、計6倍の
差があります。NPSをコア・クロック換算しても1.5~2倍の差があり、ノード数は別として、
まだ速度アップの余地があるのではないかという事で、単品速度アップに走ってます。
ノード数はMPC導入後のiterative wideningである程度追い付けるかなと淡い期待。
いくつか速度アップネタがありますが、サッカー日本代表見ながらでははかどらず。
続きは明日。

396:310
16/01/29 11:31:08.14 trvaxUQ+.net
先日の速度アップネタはすべて不発でしたが、その際にノード数のカウント漏れを見つけ
て、修正したところ、ノード数は17~8Mという感じでした。その際に、最終2手高速化の
箇所でもカウント漏れがあり、まずは正確なノード数を簡便に把握しようと外してみたところ、
意に反して速度低下しないところか、どうも微妙に高速化したように見えまして(汗。
最終3手高速化を試してみたり、最終1手高速化も外してみたり、moveorder適用とか、
そもそもmobilityを求めずに空マスを順に着手してみるとか、その辺の適用深さを変えて
みたりいろいろとやって現時点の最適パラメータにしてみたところ、0.63~0.68秒、最速で
0.60秒が出るようになりました。
αβカットの効きが悪くなっているため、ノード数は24~25Mとなりました。
その分NPSは37~38Mと速くなっていますが、こんな方向で高速化してて良いのか?
というわけで、ノード数が違う段階でNPSを比較しても意味が無いという事に気が付きました。

397:310
16/01/30 20:51:37.62 yCKBToEa.net
囲碁がすごい事になってますね。オセロで一通り勉強したら小さい盤の囲碁をやって
みようと思っていたので、モチベーション低下中。とはいえ、ああいうのをオセロに応用
しようとしたら、あそこまでマシンパワーいらないんじゃないかとか・・・。
ここのところ、もっぱらSTLやPPLの機能を綺麗に使う方向での改良ばかりしてました。
pararell_reduceの使い方もわかりました。negaScoutの繰り返しループが綺麗に並列化
できたんじゃないかと。ただ、MAPする件数がしれているので、parallel_reduceではなく
逐次版のaccumlateの方が速いという結果に。あと、時間計測が結構飛び飛びの値に
なるので時間計測関数を精度1msのものに変更。
色々やった結果、若干高速化したうえで、時間のバラつきが消えてくれました。
100回試行で計測すると610ms±15ms(1σ)となり、逐次処理のほぼ2倍の速度に。
ノード数は同程度で、NPSは40M超えて来ました。このNPSのままノードを半減できれば
良いのに。

398:310
16/02/07 21:48:19.14 xNqeS9Ve.net
ここら辺で、EDAXとかとの速度差の原因を考えたところ、次の2点が考えられました。
1.評価関数の精度が悪い可能性
2.個々の関数で速度アップの余地がある可能性
という事で、1は熟考が必要なので後回しで、速度アップの対象として、flipとmobilityの
高速化を検討。とはいえ、良い知恵があるわけでもないので、ネット徘徊。
現在、ポインタ関数で分岐して処理しているflip関数を1発で処理するopenCLのソースを
発見。Master Othelloの作者のものでEDAX4.3のflip関数を参考にしているらしい。
中身を解読するとベクターを使っている。とりあえず処理を真似て逐次処理で組んでみたら
結構速度アップしました。
解読の過程で、ようやくベクタ化の意味がわかったので、mm256系の命令を使って、
ベクタ化してみましたが、若干速度低下。原因は恐らくlzcntで一回ベクタを抜けてしまう
所だと思うので、ハッカーのたしなみを読んでベクタ演算で組み直してみる予定。
合わせてmobility関数もベクタ化。若干速度アップしたかなという程度。
組み込み関数は使い方が面倒臭いので、演算子のオーバーロードしまくってみました。
flip関数は非ベクタの分岐無しバージョン、mobilityはベクタという状態で、500msを切る
数字が出るところまで来ました。flipのベクタ化ができて、パラメータ調整するともうちょい
良い数字が出るかなと期待。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch