ボナ4のソースを読んで書き込むスレ

このエントリーをはてなブックマークに追加
1名無し名人
とりあえず作った。
ソースを読んでわかったこと、疑問に思ったことをチラシの裏のように書いてくれ
2名無し名人:2009/01/29(木) 20:53:25 ID:IXlCUAkz
ソースのダウンロードはこちらから

http://www.geocities.jp/bonanza_shogi/

ただし、かなりの忍耐が必要
3名無し名人:2009/01/29(木) 20:56:56 ID:IXlCUAkz
思考ルーチンのソースは src 以下にある
ヘッダファイルは以下の3つだけ

bitop.h ビットマップ演算マクロを定義
param.h 各駒の点数を定義
shogi.h 思考ルーチンの各種関数、タイプ宣言
4名無し名人:2009/01/29(木) 21:04:42 ID:IXlCUAkz
盤面は駒ごとのビットボードなどで構成されている
ビットボードは以下の様に宣言されている
typedef struct { unsigned int p[3]; } bitboard_t;

bona 1.x では3段ごとにひとつの uint で表現されていた。
4.x でも同様?
5名無し名人:2009/01/29(木) 21:07:02 ID:IXlCUAkz
ひとつの局面をあらわす構造体は posi_t
多くのビットボードなどから構成される

typedef struct {
uint64_t hash_key;
bitboard_t b_occupied, w_occupied;
bitboard_t occupied_rl90, occupied_rl45, occupied_rr45;
bitboard_t b_hdk, w_hdk;
bitboard_t b_tgold, w_tgold;
bitboard_t b_bh, w_bh;
bitboard_t b_rd, w_rd;
bitboard_t b_pawn_attacks, w_pawn_attacks;
bitboard_t b_lance, w_lance;
bitboard_t b_knight, w_knight;
bitboard_t b_silver, w_silver;
bitboard_t b_bishop, w_bishop;
bitboard_t b_rook, w_rook;
bitboard_t b_horse, w_horse;
bitboard_t b_dragon, w_dragon;
bitboard_t b_pawn, w_pawn;
bitboard_t b_gold, w_gold;
bitboard_t b_pro_pawn, w_pro_pawn;
bitboard_t b_pro_lance, w_pro_lance;
bitboard_t b_pro_knight, w_pro_knight;
bitboard_t b_pro_silver, w_pro_silver;
unsigned int hand_black, hand_white;
int material;
signed char asquare[nsquare];
unsigned char isquare_b_king, isquare_w_king;
} posi_t;

6名無し名人:2009/01/29(木) 21:10:26 ID:IXlCUAkz
b_occupied, w_occupied は先手、後手の駒の有無
occupied_rl90, occupied_rl45, occupied_rr45 は90度、45度回転したもの
飛車角香車による利きを計算するときに用いる

以下は意味不明
bitboard_t b_hdk, w_hdk;
bitboard_t b_tgold, w_tgold;
bitboard_t b_bh, w_bh;
bitboard_t b_rd, w_rd;

b_pawn_attacks, w_pawn_attacks; は歩が利いている箇所
7名無し名人:2009/01/29(木) 21:14:37 ID:IXlCUAkz
持ち駒は先後それぞれ uint にパックされている
変換関数は以下のように定義されている

#define I2HandPawn(hand) (((hand) >> 0) & 0x1f)
#define I2HandLance(hand) (((hand) >> 5) & 0x07)
#define I2HandKnight(hand) (((hand) >> 8) & 0x07)
#define I2HandSilver(hand) (((hand) >> 11) & 0x07)
#define I2HandGold(hand) (((hand) >> 14) & 0x07)
#define I2HandBishop(hand) (((hand) >> 17) & 0x03)
#define I2HandRook(hand) ((hand) >> 19)
#define IsHandPawn(hand) ((hand) & 0x000001f)
#define IsHandLance(hand) ((hand) & 0x00000e0)
#define IsHandKnight(hand) ((hand) & 0x0000700)
#define IsHandSilver(hand) ((hand) & 0x0003800)
#define IsHandGold(hand) ((hand) & 0x001c000)
#define IsHandBishop(hand) ((hand) & 0x0060000)
#define IsHandRook(hand) ((hand) & 0x0180000)
8名無し名人:2009/01/29(木) 21:21:24 ID:IXlCUAkz
signed char asquare[nsquare];
は各升目の状態のようだ

enum { nhand = 7, nfile = 9, nrank = 9, nsquare = 81 };


nhand は持ち駒種類数
file は筋で rank は段(もしかしたら逆かも)
9名無し名人:2009/01/29(木) 21:30:30 ID:IXlCUAkz
bitboard_t b_hdk, w_hdk; は玉の利きに関する何かだが、まだ意味がわからない
玉が移動可能な場所(相手の利きが無い)かも
10名無し名人:2009/01/29(木) 21:37:59 ID:IXlCUAkz
bitboard_t b_tgold, w_tgold; は先手後手の金の利きの箇所みたいだ

11名無し名人:2009/01/29(木) 21:42:47 ID:IXlCUAkz
ひとつの着手は uint であらわされる
各ビットの意味は下記参照

#define To2Move(to) ((unsigned int)(to) << 0)
#define From2Move(from) ((unsigned int)(from) << 7)
#define Drop2Move(piece) ((nsquare-1+(piece)) << 7)
#define Drop2From(piece) (nsquare-1+(piece))
#define FLAG_PROMO (1U << 14)
#define Piece2Move(piece) ((piece) << 15)
#define Cap2Move(piece) ((piece) << 19)
#define I2To(move) (((move) >> 0) & 0x007fU)
#define I2From(move) (((move) >> 7) & 0x007fU)
#define I2FromTo(move) (((move) >> 0) & 0x3fffU)
#define I2IsPromote(move) ((move) & FLAG_PROMO)
#define I2PieceMove(move) (((move) >> 15) & 0x000fU)
#define UToFromToPromo(u) ( (u) & 0x7ffffU )
#define UToCap(u) (((u) >> 19) & 0x000fU)
#define From2Drop(from) ((from)-nsquare+1)
12名無し名人:2009/01/29(木) 22:25:26 ID:IXlCUAkz
>>7
/*
xxxxxxxx xxxxxxxx xxx11111 pawn
xxxxxxxx xxxxxxxx 111xxxxx lance
xxxxxxxx xxxxx111 xxxxxxxx knight
xxxxxxxx xx111xxx xxxxxxxx silver
xxxxxxx1 11xxxxxx xxxxxxxx gold
xxxxx11x xxxxxxxx xxxxxxxx bishop
xxx11xxx xxxxxxxx xxxxxxxx rook
*/
13名無し名人:2009/01/29(木) 22:26:40 ID:IXlCUAkz
>>11
/*
xxxxxxxx xxxxxxxx x1111111 destination
xxxxxxxx xx111111 1xxxxxxx starting square or drop piece+nsquare-1
xxxxxxxx x1xxxxxx xxxxxxxx flag for promotion
xxxxx111 1xxxxxxx xxxxxxxx piece to move
x1111xxx xxxxxxxx xxxxxxxx captured piece
*/
14名無し名人:2009/01/29(木) 23:05:50 ID:4geoxIQK
>>1
自分のウェブページに書き込んでム版にURL張ればいいんじゃないのかな
ここ将棋板なんでそこんとこよろしく
15名無し名人:2009/01/29(木) 23:18:49 ID:2uS+9vOf
問題ない続けろ
というかここまで面白く読んだ俺のためだけに続けてくれ
16名無し名人:2009/01/30(金) 03:41:10 ID:CLZ3xtaC
>>1

これはYSSの駒の価値だけどBonanzaではどうなってますか?

3.2 駒の価値
駒の価値は表3の通りである。
4、5段目の値は、駒交換を計算する場合に用いる数値で、駒の価値の2倍、
成駒の場合は駒の価値の2倍+成った価値、となっている。
持ち駒については付加点を付けている。表は1枚目の付加点で、
枚数によっても点数を変えている。例えば金の場合は
1枚目+90、2枚目+40、3枚目+10、4枚目+0、と多く持つほど付加点を少なくしている。

表3 駒の価値
歩 香 桂 銀 金 角 飛
基本価値 100 430 450 640 690 890 1040
駒が成る価値 320 200 190 30 0 260 260
持駒の付加価値 15 50 60 80 90 220 230

駒交換用(基本) 200 860 900 1280 1380 1780 2080
(成駒) 520 1060 1090 1310 0 2040 2340

http://www32.ocn.ne.jp/~yss/book.html

17名無し名人:2009/01/30(金) 06:55:17 ID:qCKCzvnn
>>16
駒の価値は src\bonanza\param.h で定義されている

#define DPawn 101 /* 202 */
#define DLance 254 /* 508 */
#define DKnight 267 /* 534 */
#define DProPawn 503 /* 604 */
#define DProLance 424 /* 678 */
#define DProKnight 462 /* 729 */
#define DSilver 385 /* 770 */
#define DProSilver 477 /* 862 */
#define DGold 466 /* 932 */
#define DBishop 567 /* 1134 */
#define DRook 661 /* 1322 */
#define DHorse 831 /* 1398 */
#define DDragon 1002 /* 1663 */
#define DKing 15000

YSS (6?) に比べると 歩以外の駒の価値が低い
持ち駒についてはまだ分からない
18名無し名人:2009/01/30(金) 07:09:44 ID:qCKCzvnn
多くの人は分かっていると思うが、念のために単語の意味を書いておく

pawn 歩、lance 香車、knight 桂馬、silver 銀、gold 金、bishop 角、rook 飛車
Horse 馬、dragon 龍、king 王、
promotion- 成りを意味する、pro- と略されていることもある
file 筋、rank 段, piece 駒、isquqre 升目(0..80)、hand 持ち駒
diag 対角線(各の利き方向)
occupied 升目に駒がある、atack 利き、chack 王手、mate 詰み
drop 駒を打つこと、capture 駒を取ること、pin 動くと王手になって動けないこと
genMove 合法着手生成、makeMove 着手実行
prunning 枝刈、ply 読みの深さ、turn 手番
book 定跡, double_pawn 二歩、is_mate_w_pawn_drop 打ち歩詰めチェック
trans_table トランスポジションテーブル(ハッシュテーブル)

以下はまだわからない。誰か教えて

hdk, bh, rd, tgold, material
box, evasion
19名無し名人:2009/01/30(金) 07:11:38 ID:qCKCzvnn
evasion は王手回避かな?
20名無し名人:2009/01/30(金) 07:21:22 ID:qCKCzvnn
ちなみに、激指し の駒の価値は以下に好評されている
http://personalpages.manchester.ac.uk/staff/Yoshimasa.Tsuruoka/ipsj2005shogi.pdf

歩 100
香車 400
桂馬 400
銀 550
金 600
角 800
飛車 950
と 600
成香 600
成桂 600
成銀 600
馬 1150
龍 1300
21名無し名人:2009/01/30(金) 09:28:35 ID:qCKCzvnn
material は駒の損得をあらわす数値みたいだ

int eval_material( const tree_t * restrict ptree ) でその計算が行われている

以下は歩に関する部分
PopuCount() はビットボードの1の個数を数える
持ち駒の数も単純に足されている
p_value[15+pawn] には歩1枚の価値(101点)が入っている

itemp = PopuCount( BB_BPAWN ) + (int)I2HandPawn( HAND_B );
itemp -= PopuCount( BB_WPAWN ) + (int)I2HandPawn( HAND_W );
material = itemp * p_value[15+pawn];

22名無し名人:2009/01/30(金) 09:37:25 ID:qCKCzvnn
評価関数は int evaluate( tree_t * restrict ptree, int turn ) で計算される
最大52種類の何かの項目について make_list() で評価し、
玉との相対位置を考慮して線形和を計算している
sum = 0;
for ( i = 0; i < nlist; i++ )
....
sum += PcPcOnSq( sq_bk, k0, l0 );
sum -= PcPcOnSq( sq_wk, k1, l1 );
}
score += sum;
score /= FV_SCALE;
score += MATERIAL;
23名無し名人:2009/01/30(金) 09:51:32 ID:qCKCzvnn
static int
make_list( const tree_t * restrict ptree, int * restrict pscore,
int list0[52], int list1[52] )
は先の evaluate() から呼ばれる関数
各持ち駒、盤上の駒のなんらかの情報を list0[], list1[] に格納するとともに、
盤上の各駒と双方の玉との相対位置から short kkp[nsquare][nsquare][kkp_end];

テーブルを引いて、評価値を積算している

score += kkp[sq_bk0][sq_wk0][ kkp_pawn + sq ];
24名無し名人:2009/01/30(金) 09:55:53 ID:qCKCzvnn
short kkp[nsquare][nsquare][kkp_end]; には双方の玉の位置と、
盤上の各駒、持ち駒の各駒の評価値が入っている

enum { f_hand_pawn = 0,
....
kkp_hand_pawn = 0,
kkp_hand_lance = 19,
kkp_hand_knight = 24,
kkp_hand_silver = 29,
kkp_hand_gold = 34,
kkp_hand_bishop = 39,
kkp_hand_rook = 42,
kkp_hand_end = 45,
kkp_pawn = 36,
kkp_lance = 108,
kkp_knight = 171,
kkp_silver = 252,
kkp_gold = 333,
kkp_bishop = 414,
kkp_horse = 495,
kkp_rook = 576,
kkp_dragon = 657,
kkp_end = 738 };

25名無し名人:2009/01/30(金) 10:34:34 ID:6Exo/c0n
>>18
ケアレスミスである指摘しておく
square 升目 (頭にiが付くとループカウンタ)
check 王手
26sage:2009/01/30(金) 11:22:44 ID:H9alR1Qw
間違えてボナスレに投稿してしまいました><

hdk 馬竜王の利きビットマップの論理和
bh 角馬の利きビットマップの論理和
rd 飛竜の利きビットマップの論理和
tgold 金と,同様の利きをもつ成駒の位置を示すビットマップ
material 駒割り
27名無し名人:2009/01/30(金) 11:32:38 ID:qCKCzvnn
ありがと >>25, >>26

なるほど、hdk は Horse, Dragon, King のこと、
bh は Bishop, Horse のこと、
rd は Rook, Deagon のことか

tgold の t は何だろう?
28名無し名人:2009/01/30(金) 11:39:42 ID:qCKCzvnn
>>24 のコーディングはあまりよろしくないな。
以下の様に書いた方が分かりやすい

enum { f_hand_pawn = 0,
....
kkp_hand_pawn = 0,
kkp_hand_lance = kkp_hand_pawn + 18 + 1,
kkp_hand_knight = kkp_hand_lance + 4 + 1,
kkp_hand_silver = kkp_hand_knight + 4 + 1,
kkp_hand_gold = kkp_hand_silver + 4 + 1,
kkp_hand_bishop = kkp_hand_gold + 4 + 1,
kkp_hand_rook = kkp_hand_bishop + 2 + 1,
kkp_hand_end = kkp_hand_rook + 2 + 1,

kkp_pawn = kkp_hand_end + 11,
kkp_lance = kkp_pawn + 8*9,
kkp_knight = kkp_lance + 7*9,
kkp_silver = kkp_knight + 7*9,
kkp_gold = kkp_silver + 9*9,
kkp_bishop = kkp_gold + 9*9,
kkp_horse = kkp_bishop + 9*9,
kkp_rook = kkp_horse + 9*9,
kkp_dragon = kkp_rook + 9*9,
kkp_end = kkp_dragon + 9*9 };
29名無し名人:2009/01/30(金) 11:41:55 ID:qCKCzvnn
>>28
持ち駒の部分は、最大持ち駒数+1( for 持ち駒無し)

盤上の駒の部分は、先手の歩は1段目には存在し得ない、
先手の桂香は1段目、2段目には存在しない
(香車は2段目に行ったら必ず成ることにしているため)
ので、歩、香、桂馬の部分は + 9*9 とはなっていない
30名無し名人:2009/01/30(金) 11:42:56 ID:qCKCzvnn
>>28
kkp_hand_end と kkp_pawn の間は何なのだろう?
31名無し名人:2009/01/30(金) 12:03:39 ID:ALTUYftq
>>27
と金のt
32名無し名人:2009/01/30(金) 12:14:19 ID:y+J8gdS4
ソースの簡単な英単語やローマ字になっている日本語は
まとめてスクリプトで日本語に変換したファイルを作ったら
擬似コードみたいな感じになって概略を理解するのに便利な気がする。
33名無し名人:2009/01/30(金) 12:25:26 ID:qCKCzvnn
>>32
いいだしっぺの法則
「便利な気がする」とか言う間に自分でやれば
34名無し名人:2009/01/30(金) 12:33:06 ID:45xv6OrJ
ふむ
35名無し名人:2009/01/30(金) 18:51:50 ID:qrE3ghZ9
時間がたって見れなくならない、ちゃんとしたサイトにぜひ残してほしい、
有用な情報だね。
36名無し名人:2009/01/30(金) 20:29:16 ID:J3l8jNr6
ソース公開か。ワンダフル
37名無し名人:2009/01/31(土) 04:09:01 ID:ebxdGqBv
適当にソースを読んでみた。

"search.c" の、
if ( beta <= value )
という部分がベータカットかな?
38名無し名人:2009/01/31(土) 08:45:30 ID:Iyb8LR64
>>37
正解!

そして if ( alpha < value というあたりがアルファカットだ。
39名無し名人:2009/01/31(土) 17:32:49 ID:ebxdGqBv
解りやすいw 数式そのまんまですね。
40名無し名人:2009/01/31(土) 20:39:39 ID:mANLTbkA
>>32
>>33
日本語変換したやつです。おそらく誤変換、省略したものなどあります。
http://uproda.2ch-library.com/src/lib098377.zip
41名無し名人:2009/01/31(土) 22:10:49 ID:KlGqsb4y
今から読むぞ。

randはMT乱数なんだな。
42名無し名人:2009/02/02(月) 07:40:08 ID:SYUWIaS3
fv.binの仕様が全く分からない。
43名無し名人:2009/02/02(月) 10:08:29 ID:HGsikQMt
fv.bin は kkp が大部分じゃないかな?

enum { nhand = 7, nfile = 9, nrank = 9, nsquare = 81 };

enum { f_hand_pawn = 0,
... kkp_end = 738 };
short kkp[nsquare][nsquare][kkp_end];


なので、サイズは 2*81*81*738 = 9,684,036

ちがったか orz
44名無し名人:2009/02/02(月) 10:45:54 ID:QWHJFrzt
>>43
よくわからないが、fv.binのサイズは↓ということらしい。

http://d.hatena.ne.jp/ak11/20090129#p1
45名無し名人:2009/02/04(水) 04:05:02 ID:zrlfOS6f
指し手を決定する部分はどこなのかなーとか思って調べてみたら、どうやら、"root.c"の、

if ( value > value_best )
{
value_best = value;
move_best = move;
}

という部分だということが分かったので、ここをいじることを試して、うまくいったりいかなかったりしていますw
とりあえず、詰みがある局面ではうまくいかないようですね。探索自体、詰みを見つけた時点で打ち切られているようですし。

改造してみたいとは思うんですが、なにぶんプログラムの全体的な流れが分からないんで、誰かが解析してくれるのを待ってみます。。。
46名無し名人:2009/02/04(水) 08:52:59 ID:G5yG0i6Q
全体的な流れって、
静的評価関数使って、アルファベータ+前向き枝刈+ハッシュカット でゲーム木を評価して
反復深化してる
ってことじゃないの?
47名無し名人:2009/02/04(水) 09:45:57 ID:xqes5wF5
あほか。そんなことは誰でもわかってる。
具体的にってことだろ。
48名無し名人:2009/02/04(水) 09:49:32 ID:G5yG0i6Q
通常「全体的な流れ」ってのは概略のこと
全ての関数、クラスメソッド、構造体の名前を挙げて、細かく記述すると
量が膨大になり、全体像が分からなくなる
49名無し名人:2009/02/04(水) 10:02:21 ID:xqes5wF5
0か100かしかないような思考だ。
50名無し名人:2009/02/04(水) 13:23:27 ID:SICA6pYr
素人の俺にはちんぷんかんぷんだ
51名無し名人:2009/02/04(水) 14:06:32 ID:t8UTQFsQ
ソース、ビットボードのBBだらけでわろた
52名無し名人:2009/02/04(水) 14:18:58 ID:zdcvFd83
これってC、C++、C#あたりだと思うがどれだかわからん
教えてエロいひと
53名無し名人:2009/02/04(水) 14:37:35 ID:xqes5wF5
Cです。
54名無し名人:2009/02/04(水) 15:35:14 ID:zdcvFd83
d
55名無し名人:2009/02/05(木) 10:46:12 ID:k1gXzWUo
思考部分だけでもLinuxのgccとかでコンパイルできないかなぁ。
56名無し名人:2009/02/05(木) 11:42:49 ID:Ckq5gfmL
>>55
できる

bonanza_v4.0.3/src/bonanza.txt の 4 .にコンパイルの方法も書いてある
57名無し名人:2009/02/05(木) 12:22:00 ID:k1gXzWUo
サンクス!コンパイルできました。

ソース見て思ったんだが
ボナの肝は自動調整したと言われる評価関数の結果なので
その評価関数を自動調整するプログラムがなければボナ4以上のモノを作るのは
難しいのではないか。
ソースから学ぶことも十分多いんだけどね。
58名無し名人:2009/02/05(木) 16:56:50 ID:JBnBBqwG
だれか、windowsmobileで動くようにしてよ。ボナ1でいいから。
59名無し名人:2009/02/05(木) 19:07:58 ID:5s2M/sEk
>58
メモリー使用量の少ないボナ1が望ましいと言う事だろうが、
ボナ4以外はソース公開されていないから、それができるのは
やはり保木さんだけなんだな。

著作権の観点からも他人が勝手に移植するわけに行かないし。
(ボナ4のソースもGNUのような意味でのオープンソースじゃないと思うし)
60名無し名人:2009/02/05(木) 19:51:48 ID:PfuJnjux
GNUライセンスはウィルスのように感染性があって危険なので止めてほしい
61名無し名人:2009/02/05(木) 20:56:25 ID:b9LTl09X
> GNUライセンスはウィルスのように感染性があって危険なので止めてほしい

知らん顔して自分のソフツに組み込んだ後で、
解析されて実は GPL 部分が含まれてることを暴露されたりするからだろ?
要はパクリたいわけですね。
62名無し名人:2009/02/05(木) 22:03:28 ID:grkfcN8h
知ってる顔して組み込んでもGPLにしなくちゃいけないという意味では
感染性があるね
63名無し名人:2009/02/05(木) 22:14:15 ID:PfuJnjux
パクるも何も、他人にソースを再利用してほしいから公開するわけだろ
なのに商用ソフトに自由に使えないというのは変だよ>GPL

GPLなソースを使ったプロジェクトには公開を強要するくせに、
他のライセンスのソースを使っても何ら悪びれることがない
なんと立ちのわるいことか
64名無し名人:2009/02/05(木) 22:34:42 ID:QRLPj9yX
もうなんというか・・・
アホだろ
65名無し名人:2009/02/05(木) 23:07:24 ID:0Ac4hyxp
GPLって商用ソフトに自由に使えないの?

リーナスとか黒魔道士に変装してた人の本よんだけど、あの人の考えてることはおろか、
オープンソースに関しても難しくてあんま理解できんわ。
66名無し名人:2009/02/05(木) 23:44:50 ID:cSpYS7hJ
GNUとかGPLとか知らないんで教えてください。
何の略かとかその意味を。
どなたか、お願いします。ググレとかいわないで・・・
67名無し名人:2009/02/05(木) 23:49:19 ID:0Ac4hyxp
>>66
お手元のパソコンをwindowsからlinuxに換えてみたら?
そしたらちょっとだけ分かった。ここで説明するには膨大すぎて(俺には)無理っぽい

GNU・・・Gnu is Not Unix の略。これホント。

ぐにゅう。
68名無し名人:2009/02/05(木) 23:50:21 ID:yklywiii
うにゅー。
69名無し名人:2009/02/06(金) 00:37:40 ID:GXFum4Nq
念のため、保木さんの文章を貼っておく。

2. Legal Notices
-----------------
This program is protected by copyright. Without a specific
permission, any means of commercial applications are prohibited.
Furthermore, this program is distributed without a warrantee.
Within these limits, you can use, redistribute, and/or modify it.
70名無し名人:2009/02/06(金) 01:00:55 ID:TPDc1FS4
>65
使える。
ただし一部でも組み込んでしまうと商用ソフトの他の部分もGPLになる。その部分を持って感染するって言われる。
GPLはソースを公開しないといけないというライセンスだから商用ソフトで
ソースを公開したくない場合や他のライブラリのライセンスと矛盾する場合には避けないといけない。
71名無し名人:2009/02/06(金) 01:07:56 ID:GHgmoLKt
金さえ取らなければどんどん勝手に移植してくれって書いてあるじゃん
72名無し名人:2009/02/06(金) 01:30:44 ID:YV5J6iMH
>>70
全部にGPL適用することになるのか!
なるほど。「感染」って言葉使う訳が分かったわ。すっきりしました。


ボナンザに関してはコマーシャルなアプライがプロヒビットwされてるくらいなのか。
73名無し名人:2009/02/06(金) 01:40:02 ID:5dk5Qa9c
ところでボナンザを改造した輩はまだ登場してないのか?
74名無し名人:2009/02/06(金) 01:40:59 ID:B/yT9Uww
>>69
このプログラムは著作権によって保護されています。
特別な許可なしに、商用アプリケーションのどんな手段も禁止されています。
さらに、このプログラムは保証なしに配布されます。
これらの制限の中で、変更(して/せずに)、使用、再配布できます。

翻訳するとこんな感じか?
なんとなくany means of 〜ingじゃないと英語的に妙な気もするけど
75名無し名人:2009/02/06(金) 02:09:11 ID:BGyL0/oA
勝手に商売しなければご自由にってことよね
76自称英語厨:2009/02/06(金) 03:10:30 ID:YV5J6iMH
>>74
commercial applycation = (ボナンザの) 商業的な応用

駄文失礼。
77名無し名人:2009/02/06(金) 03:12:48 ID:EKXmbFoT
>>76
前後の文章は知らんがどう見ても「商用アプリ」のことだと思うんだが…。
78名無し名人:2009/02/06(金) 03:34:20 ID:X4tId7BR
どうでもいいが英語としては76が正しい

翻訳すれば「いかなる商業的利用も禁ずる」
79名無し名人:2009/02/06(金) 06:15:31 ID:9CXY9bpG
許可なしだとね
80名無し名人:2009/02/06(金) 11:14:16 ID:Z0vuvIWO
誰かドキュメント翻訳してない?
マヂ期待してます(他力本願)
81名無し名人:2009/02/07(土) 00:40:37 ID:mu0tlGyI
ttp://d.hatena.ne.jp/internalservererror/

このスレの中の人?
82名無し名人:2009/02/07(土) 03:34:48 ID:axwGmGP4
とりあえず、"param.h" の数値(駒価値)を変えてみて挙動を確かめるのは基本ですよね。
これならプログラムの知識がなくても誰でもできるし。
飛車と竜の駒価値を1にした変態ボナを作ったりw
それは極端としても、王様以外の駒価値を歩に近づけていくと、だんだん無理攻めの棋風になるのかな?(終盤は駒得はあまり関係ないと言うし)
他にも何か面白い改造ネタがあったら教えて下さい。

>>81
情報GJ
プログラムの知識のある人は、正直、一からソフトを作るよりボナのソースの解説をしてくれた方が、よほど将棋プログラムの発展に貢献できると思う。
83名無し名人:2009/02/07(土) 08:05:08 ID:ASegr+IZ
attack 利き判定
bitop ビット処理
book 定跡
csa CSA形式ファイル読み書き
data グローバルデータ
debug ? デバッグ用
dek ? 木偶の坊用
evaldiff ? 差分評価
evaluate ? 評価関数
gencap 駒を取る手の生成
genchk 王手生成
gendrop 駒打ち生成
genevasn 王手回避生成
gennoncap 駒を取らない手の生成
hash ハッシュテーブル関連
ini データなどの初期化
io ? 入出力関連
iterate 反復深化
learn1 ?学習
learn2 ?学習
main
84名無し名人:2009/02/07(土) 08:06:44 ID:ASegr+IZ
makemove 局面を1手進める
mate1ply ? 1手詰め
mate3 ? 3手詰め
movgenex ? 指し手生成
next 指し手生成順序決定
ponder 相手番での思考
problem ? 詰将棋
proce コマンド通信(sikou.dllとのやりとり?)
quiesrch 静止探索
rand 乱数
root ルートでの指し手生成順序決定
sckt 通信対局用
search 探索
searchr ルート探索
swap 駒の取り合い評価(SSE?)
thread ? 並列処理用
time ? 時間管理
unmake 局面を1手戻す
utility いろいろ
valid 合法手確認 盤面も?

解りきったことを書くなと言われそう...
85名無し名人:2009/02/07(土) 08:19:40 ID:ASegr+IZ
>>45
探索のおおまかな流れは
iterate.c 反復深化
  book.c 定跡参照
searchr.c ルート探索
  root.c ルート局面での指し手生成順序決定
  gen???.c 目的別に指し手生成
search.c 節探索
  next.c 探索局面での指し手生成順序決定
  gen???.c 目的別に指し手生成
quiesrch.c 静止探索

evaluate.c(evaldiff.c) 局面評価
make.c unmake.c 局面操作

大体これでソースを追えるはず。間違ってたらごめん。
86名無し名人:2009/02/07(土) 09:42:54 ID:Y6zGRe69
>>84
>解りきったことを書くなと言われそう...
いやいや、そんなことは無い。どんどん書いてくれい

> evaldiff ? 差分評価
少しはしょって高速な評価関数みたい

> evaluate ? 評価関数
> mate1ply ? 1手詰め
> mate3 ? 3手詰め
> movgenex ? 指し手生成
全部正解
87名無し名人:2009/02/07(土) 10:12:11 ID:vmRUmb9F
problem.c 次の一手を連続で解く
proce.c コマンドライン、sikou.dll、将棋サーバからの入力を処理
88名無し名人:2009/02/09(月) 03:07:48 ID:O1ids/do
>>85

どうもです。
"root.c" で、ルート局面の差し手が決定できるというのはわかっていたのですが、
"next.c" で、ノードの差し手を決定するというのは、今はじめて知りました。
「next」という名前からは想像しにくいですねw
やっぱり、一度ソース全体を読んでみる必要がありそうですね。

gen???.c 目的別に指し手生成
というのも、参考になります。ありがとうございます。
89名無し名人:2009/02/09(月) 03:19:32 ID:O1ids/do
連投すいません。

人間側が絶対に勝つように改造したいと思っていて、+∞ の評価値の手をボナに指させないようにしたいと思っているのですが、手こずっています。

指し手の生成部分や、ソースの "check(王手)" "check mate(王手詰み)" といった文字列を検索して、その部分をコメントアウトしたりしているのですが、それでもボナに詰まされてしまいます。
どの部分をいじればいいのでしょうか。
同じような改造をしている方はおられますか?

どなたかが解析してくれるのを気長に待ってみます……
90名無し名人:2009/02/09(月) 18:44:47 ID:F6Gym+cD
お前では無理だと思うが
コンピューター関係にまず強くないと無理
91名無し名人:2009/02/09(月) 21:28:10 ID:exnmpj5p
>>89


とりあえず駒の評価>>17 >>24をかえるのが一番楽じゃない?
kingやrook,dragonの価値をpawn以下にするとか



92名無し名人:2009/02/09(月) 22:01:01 ID:Q74ncY5O
コンピュータ関係に強いって何だそれ。意味不明。
93名無し名人:2009/02/09(月) 23:27:47 ID:P+dfl+cc
>89
と言うか何をやりたいのか(ボナに何をやらせたいのか)
いまいち良く分からない。

ボナンザを単に弱くしたい(無茶苦茶な手を指させたい)のか、
強い手を指すんだけども対局相手に絶対止めを刺さない、玉を詰めない
(したがっていつまで経っても反撃の機会は残る)ようにしたいのか?
94名無し名人:2009/02/09(月) 23:32:23 ID:uyPSBHAJ
俺の上達スピードよりコンピューターの方が強くなりすぎて困る。
95名無し名人:2009/02/09(月) 23:40:41 ID:Q74ncY5O
>>93
後者だろう。詰みだけ回避。
96名無し名人:2009/02/10(火) 00:08:54 ID:qmdUmMQa
>>89
一般的に評価値が+∞の手には絶対に飛びつこうとする。
逆に−∞の手は絶対に避けようとする。
だからコメントアウトするんじゃなくて、
詰みで+∞を返しているところを−∞を返すように書き換えれば、
詰みの手は絶対に避けようとする。
97名無し名人:2009/02/10(火) 03:04:57 ID:MJLhU+LP
つまり王以外の駒全部取られて投了を迫られる訳ですね。わかります。
98名無し名人:2009/02/10(火) 03:18:56 ID:jlxB4nKd
ってか、何故人間が必ず勝つようにしたいのかに興味がある。
99名無し名人:2009/02/10(火) 08:57:20 ID:z5LdqXq/
>>89
sikou_dll.txt の move restraint コマンドを使う。
もしくは、iterate.c と root.c の restraint 回りのコードを読み
変更する。
100名無し名人:2009/02/10(火) 09:00:51 ID:ntOEPkjJ
>>89
evaluate() の戻り値が 30000 以上 または 30000 以下なら 0 に改ざんするとか。
ダサすぎますかw
101名無し名人:2009/02/10(火) 09:16:07 ID:z5LdqXq/
evaluate() の戻り値はすでに -30000 以上 30000 以下。
詰は 1, 3 手詰み関数と search() で合法手がないことにより発見。
102名無し名人:2009/02/10(火) 09:18:11 ID:YkIFUkSJ
仮に詰みだけを禁手にしても勝つの大変だろうなあ
103名無し名人:2009/02/10(火) 09:19:28 ID:ntOEPkjJ
>>101
ほーなるほど。
104名無し名人:2009/02/10(火) 09:21:55 ID:d08BjUxV
真綿で首を絞められるようになるかもと思ったけど、
こっちに駒をどんどん捨てる長手数の詰みがある場合、
最後の王手をしないのだがら、駒が転がり込んできて
楽に勝てそうな気がしてきた。

と思ったけど、ボナには詰めルーチンが無いから、そうはならないか・・・
105名無し名人:2009/02/10(火) 11:57:35 ID:krMa2uzs
投了値0にすりゃすぐ勝てるじゃん。
106名無し名人:2009/02/10(火) 12:03:31 ID:8n/w3o/7
駒数は圧倒的にボナが上なのに投了指せる手は打ってこない
これはきついぞ
それにそういう状態で意味のない王手で勝てて嬉しいか?

一番いいのは着手可能な手をすべてあげた上で
対戦相手の力量に合わせて指せばいいんだが
プログラムの改変が大変そう
107名無し名人:2009/02/10(火) 12:06:30 ID:fiI2Dtj1
二歩okとか桂馬以外1段目に行かなきゃ成れないとか変則将棋に改変しても面白そう
108名無し名人:2009/02/10(火) 12:09:46 ID:6P89Jq8B
つまんねえよ
109名無し名人:2009/02/10(火) 12:26:35 ID:ntOEPkjJ
>>105
それじゃ意味がないんだろ。
最後の詰みだけ緩めてくれるボナンザと対局すれば勉強になるってことだろう。
110名無し名人:2009/02/10(火) 13:01:00 ID:8n/w3o/7
最後の詰みだけ緩めて勉強になるとは思わんが?
111名無し名人:2009/02/10(火) 13:06:34 ID:ntOEPkjJ
勝負が長引くだろ。もう詰みかよ!?ってことがなくなる。
112名無し名人:2009/02/10(火) 13:22:19 ID:8n/w3o/7
それが勉強になると思うならどうぞ
個人的にはあまりにも癖がありすぎるソフトになると思う
113名無し名人:2009/02/10(火) 13:36:25 ID:8szeOrFv
なんかいじくったら
弱くなったwww
114名無し名人:2009/02/10(火) 21:34:19 ID:lKvZBd6d
【ゆとり?】ボナ4のソースを読んで改悪するスレ【厨房!】
115名無し名人:2009/02/10(火) 21:40:13 ID:V+wuq8/m
強さに関係する所のソースいじったら99.9%の確率で弱くなるよ
116名無し名人:2009/02/10(火) 21:41:31 ID:d08BjUxV
独創的かつ有意なことは その0.1% から生まれる
117名無し名人:2009/02/10(火) 21:47:00 ID:3I1XMJ0x
逆にいじくって強くできたら、それ引っ提げて
大威張りでコンピュータ将棋選手権に出場できるなw。

残念ながら今年の参加はもう締め切られたけど。
118名無し名人:2009/02/10(火) 22:22:19 ID:StO46mKC
回答ありがとうございます。全レスしたいところですが、私自身まだよく分かっていないことも多いため、ざっくりとしたレスでご勘弁を。

>>91
駒価値を現実的な値から変えれば変えるほど弱くなる、あるいは、"root.c" で value を求めた直後に、
乱数要素を加えてやると、rand の値が大きいほど弱くなる、といったお手軽な改造でもなかなか興味深い動きになりますね。

>>93
接待用に緩めてくれるボナに改造したいと思っています。
明らかに変な手は選ばずに、最終的に人間に花を持たせてくれるような。

>>96
なるほど。有望そうな案ですね。
ソースに、
if(check_mate)value = 30000;
とかいう、そのものズバリの部分があれば分かりやすいのですが、どうも value の値をいじるだけではダメなようです…

>>97
ええ。詰み以外の手加減を全くしなければ、そういう風になるんでしょうね。
全駒とかしてくる大人げない棋風w

>>99
"iterate.c" が反復深化だから、やっぱりこの辺りのソースをじっくりと読んでみる必要がありそうですね。
ありがとうございます。

>>101
おお! 参考になります。どうもです。

>>106
ドキ。私のやろうとしていることに近いです。
人間側の棋力に合わせて手を選ぶという部分はなんとかなったんですが、なかなか即詰みを見逃してもらえませんw
119名無し名人:2009/02/10(火) 22:29:54 ID:nE15OakS
人間に合わせるなら、激指の最新版みたいに「序盤は強く、終盤になるほど弱いCOM」がよさげ。
進行度があれば簡単なんだが……
120名無し名人:2009/02/10(火) 22:46:55 ID:3I1XMJ0x
ボナ4の改造法として進行度を入れて
序盤、中盤、終盤と分けて学習させると言うのは
いかにも有りそうだね。
121名無し名人:2009/02/10(火) 23:07:15 ID:nE15OakS
ただし、多数の駒の位置関係という評価項目は、局面の進行具合に依存する可能性がある。
これによって、明示的に進行度を持たずとも評価関数が暗黙のうちに内包するかもしれない。
結果として重複するからイラネ、と作者が考えている、かも……

でも人間のために解りやすいパラメタだから、本家も追加して欲しいなぁ
進行度自体も機械学習の対象にして。
122名無し名人:2009/02/10(火) 23:27:32 ID:01hvTXkv
途中で盤面をひっくり返せばいいじゃん。
確か羽生が家族とやるときそうやってたんじゃ。
123名無し名人:2009/02/10(火) 23:33:49 ID:kU5nHuPm
歩は4枚以上なら何枚あっても一緒ってのを評価関数に入れて欲しい。
124名無し名人:2009/02/10(火) 23:42:43 ID:VPgt2g4o
すごい小さなプログラムだな。
将棋ソフトはこんなもんか。
125名無し名人:2009/02/10(火) 23:43:40 ID:3I1XMJ0x
まあ、保木さんとしてはソースまで公開して
変更、再配布自由にしてやったんだから
「こう言うのが欲しい」と思ったら
オマエラ勝手に作れ。

あらゆる要望に答えてられっか!
と言うところなんだろうな。
126名無し名人:2009/02/11(水) 00:02:01 ID:5U9DfOAQ
超攻め棋風のボナンザなので絶対に切れない攻めをマスターさせて欲しい。
127名無し名人:2009/02/11(水) 02:22:06 ID:9bzefc8y
search.c/searchr.cの中の探索結果が返るところで
+Mateだと
if ( beta <= value )
{
DOut( ", beta cut (%" PRIu64 ")\n", ptree->node_searched );
ここでbetaカットが発生するので、valueが+Mateの場合は
continueしてやる
(ただ先手と後手がどちらもmateを捨てるので、bona側だけが+mateを捨てる
ようにしないと
あなたの+mateの手をbonaが見逃すようになる。

あとハッシュテーブル直読みもあるのでおそらくそっちも修正がいる
128名無し名人:2009/02/12(木) 16:11:07 ID:1RhNNuTY
このスレには有名人が混じってるな・・・
129名無し名人:2009/02/12(木) 16:58:39 ID:Uzw34cOI
ば、ばれた?
130名無し名人:2009/02/12(木) 22:55:42 ID:1RhNNuTY
文章の書き方がね。
あのブログに似てるんだな。>有名人
131名無し名人:2009/02/13(金) 02:44:18 ID:u5Hj5rS/
すぐ思いつくような小さな改造だとどうやっても弱くなるね
大がかりな改造だと遅くなってやっぱり弱くなる
どうすりゃいいんだ…
132名無し名人:2009/02/13(金) 02:52:28 ID:UfRlxsp3
>>131
今まで試した改造と結果のもっと詳しい報告頼む
133名無し名人:2009/02/13(金) 07:59:19 ID:mqNvHNCh
改造したボナとオリジナルのボナを自動対戦させる方法はありますでしょうか。
134名無し名人:2009/02/13(金) 08:14:46 ID:zP8lqR6m
あのさあ、改造するだけの知識があるなら、そのぐらいのこと想像つくよね?
まさか、次の一手をどうやって指させるのかわからないで改造するつもり?
135名無し名人:2009/02/13(金) 11:20:39 ID:ILwTdqVk
>>133
改造車を作るけど運転できないタイプの人ですか?
136名無し名人:2009/02/13(金) 11:30:15 ID:DTWfbXPB
誰かlinux用のgui作ってちょうだい
137名無し名人:2009/02/13(金) 11:32:23 ID:UcvZkBNd
じぶんで作ってください。 クロスプラットホームGUIでうpしてくれたら
windows用のコンパイルは任せてください
138名無し名人:2009/02/13(金) 11:33:34 ID:UcvZkBNd
パイロン、ルビで作っても良いよ そしたらどこでも動く
139名無し名人:2009/02/13(金) 12:21:57 ID:KRNuHs5C
ここは不親切なインターネッツです。
140名無し名人:2009/02/14(土) 00:02:07 ID:3VGm8VlD
 GPS将棋の方の _ Bonanzaの探索時間の制御方法のメモ
http://www.sgtpepper.net/kaneko/diary/20090213.html
141名無し名人:2009/02/14(土) 00:30:13 ID:irWPJE6X
おまえらみたいな素人さんに厳しいやつらは俺は大嫌いなんだ

>>133
ぐぐれカス
http://www.geocities.jp/shogi_depot/MyBona.htm
142名無し名人:2009/02/14(土) 00:41:03 ID:MCwe9+Zu
>141
自分でもググレカスとか言ってるくせにw。

>133
ここではなくてボナンザスレで聞いたならみんなに親切に教えてもらえたと主。
143名無し名人:2009/02/15(日) 09:44:48 ID:cteXGpB0
局面のハッシュ化のアルゴリズムがわかりません。
hash.cを読んだのですが・・・。
144名無し名人:2009/02/15(日) 14:36:47 ID:evfqcN3w
ZobristHashingじゃないの?
読んでないけど
145名無し名人:2009/02/17(火) 00:18:14 ID:5DE5nJeL
str_time_symple()は、simpleの書き間違い?
146名無し名人:2009/02/20(金) 20:21:27 ID:sZdOmVS/
age
147名無し名人:2009/02/20(金) 21:07:01 ID:6nltc77m
これってVC++とかで普通にコンパイルできますか?
148名無し名人:2009/02/20(金) 21:35:37 ID:sZdOmVS/
おいらはやってみてはいないが、同梱の src\bonanza\bonanza.txt に
以下のように書いてある。


4. How to build Bonanza
-----------------------

You can build Bonanza by means of GNU Make on Linux or Microsoft NMAKE
on Windows. Here is some examples:

- Microsoft C/C++ Compiler on Windows
> nmake -f Makefile.vs cl
149名無し名人:2009/02/20(金) 21:41:05 ID:6nltc77m
そうですか、Cなんですね
150名無し名人:2009/02/21(土) 17:57:02 ID:JNLsjzg+
>>17
これ参考になったありがとう
151名無し名人:2009/02/22(日) 16:22:08 ID:ltwCPVW5
これコメントをツールで消した形跡があるな。残念。
152名無し名人:2009/02/22(日) 21:58:49 ID:TTMhKSrS
>>151
どこでわかるの?
153名無し名人:2009/02/23(月) 00:02:54 ID:ltwCPVW5
例えば、bitop.c とか関数と関数の間が2行空いているのと、
1行だけのものが混在しているのがあるのでそう思った。

int foo()
{
}

/* コメント */

int bar()
{
}

の場合にコメントを消すと2行空く。初めからコメントが
ないと1行のまま。
単にそういうスタイルなのかもしれないし、推測の域は
でないけど。
154名無し名人:2009/02/23(月) 04:52:47 ID:CUb4Cvac
整形ツールを気に入るまで通せ
155名無し名人:2009/02/25(水) 13:44:54 ID:gC3PrtOb
Visual C++ Express Edition落としたんだけど
コンパイルのやり方がわかりません。
教えてください、先生。
156名無し名人:2009/02/25(水) 14:05:47 ID:71S+qiON
>>148 に書いてあるとおりにやってみた?
157名無し名人:2009/02/25(水) 22:52:08 ID:L7ukn6/P
Express Edition ww
158名無し名人:2009/02/26(木) 08:22:35 ID:n0IGDo3r
>>155
MFC使ってないしExpressでビルドできるはず。
nmakeが確か入ってないので、
PlatformSDKを落とせば入ってるはず
もしくはmakeを探してくる

159名無し名人:2009/02/26(木) 09:31:26 ID:1HB6AGs9
Bonanza 4 ビルドできた。感激。
調子に乗って CSA もビルドしようとしたら MFC? のせいでエラーに。
こちらの方はMFC抜きのバージョンってないのかしらん?
160名無し名人:2009/02/26(木) 09:45:56 ID:rDhEvUNE
>>159
詳細キボンヌ
161名無し名人:2009/02/26(木) 10:00:21 ID:1HB6AGs9
>>160
ええと、駒の初期配置を変えた将棋をボナンザと指してみたいとおもって
CSAの公開されているソース(多分、もしかすると、うさぴょん本の付録CDかも)が
やはり Vc++ だったので、Visual C++ 2008 Express Edition でビルド。
=> afxwin.h が無いのでビルド不可。
162名無し名人:2009/02/26(木) 10:08:18 ID:Qjo0vJLu
>>161
MFCが必要だね。やはりExpress Editionじゃ無理。
少なくとも、standardでやりなさい。
163名無し名人:2009/02/26(木) 10:26:41 ID:1HB6AGs9
>>162
あー、やっぱり。
スネかじりの身としてはこれだけの為に Standard版購入って
わけにはいかなくて、、、、 ともあれ thx です。
164名無し名人:2009/02/26(木) 10:37:13 ID:DV3Jk3pb
誰かJavaに移植しろよ。
165名無し名人:2009/02/26(木) 11:06:19 ID:Qjo0vJLu
これだけの為にw
確かにww
166名無し名人:2009/02/26(木) 11:53:08 ID:Taw7pldv
>161-162
Windows Platform SDKを落として使えば良いじゃない?
Visual C++ Express Edtion 2008 で使えないとかの
制約は確か無かったと思う。

落とせるページを見つけるのは面倒くさかった記憶はあるが。
167名無し名人:2009/02/26(木) 11:57:56 ID:MbONsdmx
Windows SDKは簡単に見つかるよ 6.1入れてるよ
expressでも勝手に入れられると思う
168名無し名人:2009/02/26(木) 12:00:57 ID:MbONsdmx
169名無し名人:2009/02/26(木) 12:12:42 ID:1HB6AGs9
情報どうもです。 なんだかできそうですね。
今は時間が無いので夜にでもやってみます。
ありがとうございました。
170名無し名人:2009/02/26(木) 12:24:20 ID:hsIwwrKA
171名無し名人:2009/02/26(木) 12:30:01 ID:HTLiCSx8
ブラクラ
172名無し名人:2009/02/26(木) 16:00:54 ID:kfOBLwqM
いっそgnushogiを乗っ取ってくれ
173名無し名人:2009/02/26(木) 22:12:57 ID:rDhEvUNE
ソースが汚染されてしまうのでGPLにするのだけはやめてくれ
174名無し名人:2009/02/26(木) 23:07:07 ID:mt1dbblR
アホか
パクらなきゃいいんだよ
175名無し名人:2009/02/27(金) 08:57:40 ID:oO6rjnnk
アホか
新規機能追加や改造するとそのきれいなコードまで汚染されちまうんだよ
まるで細菌やウィルスといっしょで汚い>GNUのGPL
176名無し名人:2009/02/27(金) 12:03:03 ID:FOPFXdWa
そのコードを黙って金儲けに使おうとするから
勝手に汚染とか言ってるだけじゃん。
bonanzaは元々金儲け厳禁って書かれてるからどっちでもいいけど。
177名無し名人:2009/02/27(金) 12:16:58 ID:oO6rjnnk
ほんとにバカだな

以前に開発したライブラリがあるとするだろ
それをGPLのプルグラムに組み込むと汚染されるんだぞ
そうすると、その開発したプログラムを使っている他のプロジェクトも汚染される
こんな凶悪でたちの悪いライセンスがフリーと名乗るのは詐欺だよ
178名無し名人:2009/02/27(金) 12:20:48 ID:FOPFXdWa
元から商用利用が禁止されてるフリーソフトでは何の関係もないこと
何かやましいことしたいのか?
179名無し名人:2009/02/27(金) 12:28:25 ID:FOPFXdWa
でもソースを公開したくないプログラムを組み込んだ新しいボナンザの
バイナリだけ無料で配布したいって奇特な人には影響するのかな?

そんな人いないだろうけど。
180名無し名人:2009/02/27(金) 12:40:04 ID:nK3QOFDY
ソースを公開したくない人なんていくらでもいるだろ
ボナンザだって最初はそうだったんだし
Windowsのフリーソフトは大体そういう文化だろ

あと、ソースは公開したいけど、GPLにはしたくないという人も困る
おそらく、ボナンザのように商用ソフトにも使われて、オープンソースにも
してるというソフトがそれに該当することが多いだろう
181名無し名人:2009/02/27(金) 12:43:12 ID:FOPFXdWa
なるほどね。
上はそんなに大層なコードなのかと言いたくなるけども。
182名無し名人:2009/02/27(金) 13:08:44 ID:oO6rjnnk
>>178
たとえばお前がタクシーの運転手をして日々の糧を得ていたとしよう。
ある日無料のナビをくれる人がいて、喜んで使ってそれで仕事をしたとしよう。
ところがそのナビが実はGPLに汚染してたとしよう。
そうするとそのナビを使ったタクシーの車体も汚染されて、
客から料金を徴収できなくて、仕事には使えなくなるんだぞ。
場合によってはそのタクシー会社の他のタクシーにも感染することがある。
そうするとその会社は倒産するしかないよな。

こんな横暴が許されていいのか?
183名無し名人:2009/02/27(金) 13:15:36 ID:FOPFXdWa
料金は以前のまま徴収できるぞ。
ただ客からタクシーの構造を公開しろと言われたら 見せる必要があるけど。
184名無し名人:2009/02/27(金) 13:20:51 ID:oO6rjnnk
例が悪かったか

じゃあ、お前が焼き鳥屋をやっていたとしよう。
先祖代々受け継がれた秘伝のタレがお前の店の自慢だった。
ある日、親切そうな人が、この植木を店に置きなされてといって
見事な鑑賞植物をくれたのじゃ。

ところがそれが不幸なことにGPLに感染していたんじゃな。
それで、秘伝のタレにも汚いGPLが感染してしまい、
先祖伝来の秘密を公開せざるをえなくなってしまった。

ご先祖様に申し訳がたたないと思わないか?
185名無し名人:2009/02/27(金) 13:28:43 ID:FOPFXdWa
そんな例が実際あるの?
そうだと知りつつ、黙って使ってたのがバレたのなら聞いたことあるけど。
186名無し名人:2009/02/27(金) 13:45:02 ID:oO6rjnnk
実例があったかどうかは知らないが、知らずに使ってしまう危険もあるので、
感染性があり凶悪だと言ってるんだよ。
その点では通常のウィルスや細菌と同じ。

無料で感染性の無い真に自由なライセンスも存在しているわけだから、
GPLは「自由」と名乗るのは詐欺的だし辞めて欲しい
187名無し名人:2009/02/27(金) 14:02:25 ID:tLR8bIz0
アルゴリズムには著作権は無かったような。

あと、GPLは多くの人が制約が強すぎると思っているのかな。よく分からんけど。
188名無し名人:2009/02/27(金) 14:43:26 ID:+XRtPDFC
GPLウイルス説なんてMSですらもう声高には言わなくなったのに
未だにそんなこと言う人いるんだね。

「知らずに使ってしまう危険」は、明らかに使う奴の問題でしょ。
焼き鳥のタレの例で言えば、秘伝のタレに、自分の与り知らないところで
作られた、用途や使用条件も定かでないような醤油や砂糖や返しを
新たにブレンドするような行為だぞ。出所がしっかりしたものかどうか、
使用条件がどうなのかも確認しないで、何か起こったときに
被害者ヅラとかできないでしょ。

もちろん、LGPLやMITがいいならそう要望すればいいだけの話。
それでダメなら、作者のポリシーとあなたのポリシーが違うという
ことで、まあコード欲しい側は我慢するしかないね。あなたのための
コードじゃなかった、ということだ。
189名無し名人:2009/02/27(金) 15:00:21 ID:oO6rjnnk
>LGPLやMITがいいならそう要望すればいいだけの話。
最初は、GPLは汚いのでボナをGPLにするのはやめて欲しいと言ったら
>何かやましいことしたいのか?
とか変な詮索をするやつがいたので、
GPLの汚さを説明しただけ
190188:2009/02/27(金) 16:58:06 ID:+XRtPDFC
>>189
> 最初は、GPLは汚いのでボナをGPLにするのはやめて欲しいと言ったら

ここで言ってもしょうがなかんべ。作者に言いなさい。
それでダメなら、あなたのためのコードじゃなかったということだ。

> GPLの汚さを説明しただけ

ミスリーディングな比喩だから、GPL知ってる人も知らない人も
納得してないみたいだけどな。

そもそも仮にBonanzaのコードがGPLで公開されたとして、
誰かが「そうと知らずに」コードを流用して自分名義の将棋ソフトを
無償公開したり売ったりする、なんてことが現実に起こりうると思うの?
191名無し名人:2009/02/27(金) 17:03:19 ID:s/I1yCCZ
GPLのソースが汚いというのは他人が改変すると汚くなるということですかね?
きれいに改変すれば問題ないということかな。
192名無し名人:2009/02/27(金) 17:06:08 ID:pm2H2iLA
一次配布元のものを改変する分には
汚染はないんだよね?
193188:2009/02/27(金) 17:40:25 ID:+XRtPDFC
>>191
GPLとは、「新たなコードもまたGPLで公開することを条件に、
そのコードにGPLで公開されたコードを利用してよい」というもの。
裏を返すと、GPLのコードを組み込んだプログラムは、
そのソースコードをGPLで公開しなければならない、ということになる。
これをGPLの「ライセンス感染性」という。コードの書き方の
構造的・論理的・美的な意味でのきれいさ・きたなさとは関係ない。

ライセンス感染 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E6%84%9F%E6%9F%93

>>192
一次配布元の公開ライセンスがGPLなら、そもそもGPLへの「汚染」を
懸念する必要はない。一次配布元の公開ライセンスがGPLでないなら、
一次配布元がGPLのコードを盗用したり、GPLで公開されているライブラリを
リンクしていない限り、「汚染」を懸念する必要はない。
194名無し名人:2009/02/27(金) 17:59:25 ID:s/I1yCCZ
>>193
それを汚いと言ってたのか。
でもライセンス汚染は有料である場合ならわかるけど、無料の伝播に異議を唱えてるのか?
有料にできないのが気に食わないのか、それとも改変したもののソースは公開したくないということのどちら?
将棋ソフトは他に応用が効くわけでもないし普通に改変して公開する場合はGPLで問題ないんじゃないかな?
195名無し名人:2009/02/27(金) 19:08:23 ID:nK3QOFDY
>>194
ソースを公開したくないってのが一般的だろうね
しょぼいソースだから恥ずかしいとか、自分のソースは
ぱくられたくないとか将来商用にしたいとか
それ以外にも、いろいろややこしい問題があってね
ライセンス矛盾の問題があって、ソース公開できない別の
ライブラリ(Microsoftのライブラリなど)とリンクしているから
GPLが使えないという問題もある
中には「ソース公開はしたいけど、GPLにはしたくない」とか
そういう開発者もいるわけね
思想的にGPLを嫌っているような開発者もいる
196名無し名人:2009/02/27(金) 19:31:09 ID:65ODMaYj
>>177
それは、「以前に開発したライブラリ」をデュアルライセンスにすればいいだけ。

> 2. Legal Notices
> ----------------
>
> This program is protected by copyright. Without a specific
> permission, any means of commercial applications are prohibited.
> Furthermore, this program is distributed without a warrantee.
> Within these limits, you can use, redistribute, and/or modify it.

そもそも"any means of commercial applications are prohibited"て言ってる作者が、
ライセンスを商用ソフトにも利用可能なGPLに変更しないだろ。
197名無し名人:2009/02/27(金) 20:50:09 ID:AFb3ouyO
自分は束縛が嫌なので自由を求めるが、自由を強制されるのはやはり束縛されるので嫌
198名無し名人:2009/02/27(金) 23:34:46 ID:xstBQw34
ところで良く分からんのだが、GPLのようなあるいはボナンザのような
ソースが公開されたソフトのソースを読んでアルゴリズムを理解してから
コードそのものは自分で一生懸命コツコツ書いたらどうなるんだろ?
(一行たりともコピーはしていないとする)

いくら自分で書いてもアルゴリズムを真似したらコードは恐ろしく
似てくると思うし、そういうのはグレーゾーンなのか許されないのか?
199名無し名人:2009/02/28(土) 00:17:59 ID:q/zLEmSr
グレー以上の危険性があるだろうね。
最終的には裁判所が判断する事だけどライセンス気にする人は普通やらない。
コードを解析して仕様書を書く人と仕様書を読んで独自コードを書く人に
作業人員を分離するクリーンルーム方式なら白だけど。
200198:2009/02/28(土) 00:45:33 ID:W7oLZoeK
>199
やっぱりビジネスとして確実に危険を避けようとするなら
そこまで気を使わなければならないのだろうな。

答えてくれてどうもありがとう。

201名無し名人:2009/02/28(土) 01:17:41 ID:Hf5pN0YP
>>198
保木さんが参考にした Crafty のソースコード見れば、
そのあたりは判断つくと思う。
202名無し名人:2009/02/28(土) 01:21:15 ID:W7oLZoeK
>201
え、それどういう意味ですか?

Craftyとボナンザ4.0のソースコードを比較してみれば
どのくらいまで似ていても許容範囲か見当が付くと言う事?
203名無し名人:2009/02/28(土) 02:55:09 ID:4bYYEfkM
スーパーハッカーの方にお願い。
激指、棚瀬等他ソフトの第一候補手の筋を参照して、
その手の読みは深くするスーパーボナンザを作ってください。
204名無し名人:2009/02/28(土) 03:53:01 ID:0kbHj8WI
俺がダウンロードしたソースには、無断で営利目的使用禁止だけど
変更転載は自由と書かれたREADMEがあったから、GPLでもなんでもないんじゃない?
オリジナルライセンスということだな。

ちなみに"無断でない"の解釈には色々ありそうだな。
とにかくメールでも送れば営利目的に使用できると主張しても間違いでは
ないだろうし、これだけだと結局曖昧なライセンスということになりそう。
205名無し名人:2009/02/28(土) 04:52:10 ID:+FT5ZviU
そうGPL関係無い。

> ちなみに"無断でない"の解釈には色々ありそうだな。
> とにかくメールでも送れば営利目的に使用できると主張しても間違いでは
> ないだろうし、これだけだと結局曖昧なライセンスということになりそう。

別にライセンスに曖昧なところは無いだろ。
>>69をどう読んだら、メールで知らせれば商用利用可能って解釈になるんだ?
206名無し名人:2009/02/28(土) 05:18:46 ID:to2gO6Yp
最近GPLを勉強したようなバカが知ったかして鬱陶しい。
207名無し名人:2009/02/28(土) 09:26:54 ID:h46PhHQE
GPLだと知らずに組み込んだライブラリが原因で、叩かれた無知が暴れているだけだろ。
GPLの問題点なんざ、ここを読む奴なら誰でも知ってるだろうし。
わざわざ指摘したり問題にするような事じゃない。汚染された物(GPL)は触れなきゃいいだけ。
汚染されたくないけど、食いたい、とか、どこのわがまま小僧だよ。
208名無し名人:2009/02/28(土) 10:29:25 ID:wx2sxbux
>>203
既にできるよ
激指、棚瀬の棋譜をcsa形式で保存して結合しておいて、
BonanzaMethodで学習させれば
指し手を学習して優先するように評価関数が最適化される

209名無し名人:2009/02/28(土) 18:12:53 ID:OoYwwRfW
なるほど。言われてみれば。
プロ棋士の棋譜を学習させてプロ並に強くするということができるなら、そういうことも可能なんでしょうね。
210名無し名人:2009/03/01(日) 00:22:33 ID:veWnHAIv
学習用の棋譜データは何を使っているの?
2ちゃんねる棋譜をCSA形式に変換?
211名無し名人:2009/03/01(日) 14:31:37 ID:F1Qztwml
>>210
2ちゃんねる棋譜かどうかはわからんがCSA形式
csa.cでread_record関数で読んでる
ファイル名はrecords.csa(これは同梱されてない)

212名無し名人:2009/03/05(木) 03:09:42 ID:x392yERh
保木さんは当然お金だして棋譜買ってるでしょ。
ミニマムとCSA将棋の定義外してビルドし直すのは簡単だけど
2ch棋譜じゃ絶対量が足らないくて弱くなるに間違いない。
213名無し名人:2009/03/06(金) 00:05:58 ID:lmVFJFsN
>>212
具体的には、どういう商品?
売っているものは「将棋年鑑CD-ROM」しか知らないのですが。
絶対量、何局ぐらい必要なのでしょう?
214名無し名人:2009/03/06(金) 00:32:05 ID:0MIAuGPv
プロ棋士用では
215名無し名人:2009/03/06(金) 01:32:45 ID:alHFFHJM
>>210
>  棋譜データとしてプロ棋士の公式戦から3万局と,
> 将棋クラブの棋譜集から3万局の[8],計6万局を集め
> た.将棋クラブからの3万局は,全50万局面中,先手
> (後手)玉が4段目(6段目)に進入したものを選ぶ.
GPWのプロシーディングから。
[8]はttp://www.amazon.co.jp/dp/4880861693

ボナンザ作ったときの2ch棋譜の棋譜数知らんけど、
だいたい同じくらいじゃないか?
後、NHKの特集で江戸時代の棋譜まで使っているとか言ってた。
2ch棋譜には江戸時代のも含まれてる。
216名無し名人:2009/03/06(金) 01:35:29 ID:alHFFHJM
ググったら、↓のページのpaper.docにGPWの論文が置いてあった。許可とってんのか?

ttp://www11.atwiki.jp/aliceproject/
217名無し名人:2009/03/06(金) 20:10:02 ID:MNuvONHv
>212
私はむしろ2ch棋譜だと思うけどな。
少なくとも最初に作った時に学習させたのは。

3万局くらいと言う棋譜の数もおおよそ合うし、
ボナンザは最初、商品化するつもりは無かったみたいで
フリーで配ってた。(今でも配ってるけどw)

コンピュータ将棋選手権に出るつもりすら無かったようだ。

そういうものの学習データに5万円以上も払うかなぁ?
うまく強くなるかどうかすら始めは分からないのに。
公式に売られていて簡単に手に入りそうなものだけでは
棋譜の総数もかなり足りないし。

ttp://softplaza.biglobe.ne.jp/shop/shogi/kifu/
218名無し名人:2009/03/06(金) 20:22:05 ID:0MIAuGPv
開発費、経費で出して貰えるだろ。 銀星のところから。
219名無し名人:2009/03/06(金) 20:27:50 ID:MNuvONHv
>218
銀星なんか何の関係も無いだろ、少なくとも開発当初に於いては。
220名無し名人:2009/03/08(日) 03:43:07 ID:vdMFJFCa
>>217
趣味にいくら使うかはその人の価値観の問題でしょ?
レースに出るわけでも無いのに車の改造に何十万も何百万もかける人はたくさん居る。
221名無し名人:2009/03/08(日) 06:13:17 ID:wcyiw/YO
プロになるわけでもないのにものすごい値段の駒とか盤とか、
読みもしないのに大量の棋書とか持ってる人もいるしなw
222名無し名人:2009/03/08(日) 10:55:49 ID:fNjziEzp
>>217
どうせ開発のために費やす時間って下手すりゃ年単位になるわけで、
給与に換算すれば何千万にも相当する。

それにくらべりゃ5万円なんてゴミみたいなもんだろ。
223名無し名人:2009/03/08(日) 18:39:19 ID:5e+Jh7pK
>222
例え、趣味に費やす時間を時給に換算すれば何百万になったとしても
(何千万はオーバーだな)実際に自由に使える何百万円を持ってる
人間は非常に少ない。

趣味に時間を費やした上にそういう具合にどんどんお金も気にせず
使うと本当にあっと言う間に大金を使い切るよ(何千万でもね)。

ある意味、経験者は語るw。
224名無し名人:2009/03/08(日) 18:51:50 ID:5rMjCvbR
時給何百万ってウィリアムゲイツかよ
225名無し名人:2009/03/08(日) 18:54:35 ID:5e+Jh7pK
>224
もちろん「費やす時間x時給」だよ。
分かってるだろうけど。
226名無し名人:2009/03/08(日) 19:52:56 ID:BMH7sHhG
さすがに棋譜データに5万ぐらいはポンと出すと思うよ。
プログラム関係の書籍買ったら5万なんてすぐいくよ。
227名無し名人:2009/03/08(日) 22:44:25 ID:flXrGi5s
評価関数evaluate()は、局面に対する評価だけを計算していて、その局面の手番側に加点をしていない。それで構わない理由を教えて。
228名無し名人:2009/03/09(月) 00:45:34 ID:PXU17zOx
評価する全ての局面が同じ手番なら加点しなくてええかな。または、ほとんどの局面だとか。

まぁ他に理由があると思うけど。(静止探索と関係ありそう)
229名無し名人:2009/03/11(水) 11:57:47 ID:JYU4OLYk
>>229
オヤスミ…
  <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
230名無し名人:2009/03/11(水) 16:09:18 ID:UqY3/ps0
>>227マジレスすると
nullMoveCutのときにdepth<1のとき整合性を保つためだと思う。。
231名無し名人:2009/03/15(日) 18:51:03 ID:XrJyKRbo
>>229
 Z
  z
  z
 <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
232名無し名人:2009/03/16(月) 18:35:28 ID:JYRlNvNU
ボナンザのソースをVC2005からコンパイルしようとしているのですが
Makefile.vsのコンパイルオプションでデフォルトの状態より実行速度が
速くできる方法あります?
AthlonXPに対応したもので御願いします。
自分でやったのには

cl:の部分とcl-pgoの部分で

CFLAGS="$(FLAG) /MT /W4 /nologo /Ox /arch:SSE /Gr /GS- /GL
または
CFLAGS="$(FLAG) /MT /W4 /nologo /Ox /arch:SSE /DWIN_VERION /Gr /GS- /GL
更に
CFLAGS="$(FLAG) /MT /W4 /nologo /O2 /arch:SSE /DWIN_VERION /Gr /GS- /GL
などこれと似たようなことをいくらかやってみましたが/arch:SSEをいれるとNPSの値が
低くなっています。

お勧めの方法はありませんか?
ソースの中身をきちんと見たわけではないのでSSEが効果があるかどうかは分かりませんが。
233名無し名人:2009/03/18(水) 01:03:22 ID:vUXqIN+f
>>233ゲットオォオオォ!!!!!
  ∧∧
  (^ω^)
 cu_uっ バイーン
  彡
 / ̄ ̄\
 | ̄1 ̄|
 | ̄2 ̄|
 ̄ ̄ ̄ ̄ ̄ ̄
234名無し名人:2009/03/20(金) 00:32:25 ID:Ta2qOTdm
>>232
PGOもやってます?
235名無し名人:2009/03/21(土) 13:58:22 ID:XzphbUHV
>234
やり方が正しいのかわかりませんが一応やってます。
だだし、最初に実行するファイルはMakefileの中で
csa.exeに変えてますけど正しいですよね。
bonanza.exe単体で起動しませんし。
236名無し名人:2009/03/22(日) 10:57:28 ID:frMKNWGT
bonanza4.04でMingw環境でwinsock2がリンクできません。
Makefileの中で

LDFLAG1に
-lws2_32 を

OPT = に
-DWin32_Winsock を

shougi.h ファイルの7行目あたりをを
#if defined(_WIN32)

# include <windows.h> //読み込ませても読み込ませなくても失敗
# include <winsock.h> //読み込ませても読み込ませなくても失敗
# include <winsock2.h>

をしています。
Mingwでは strtok_r をサポートしていないのでそれはとりあえず後で考えるとしても
(VCではかわりに strtok_s を使うようにしてある)


Mingwは勝手に_WIN32を読み込んでいるみたいなのでそのまま放置しています。
Linuxやgccも実験程度にしかやっていないので正しいのかどうかはわかりません。

cygwin環境でcygdll1.dllを使う環境の中ではコンパイルできましたが
いざ実行すると「thinking」で止まってしまいます。
237名無し名人:2009/03/22(日) 11:00:09 ID:frMKNWGT
肝心のエラーですがこんな感じです(長いので一部)
sckt.o:sckt.c:(.text+0x7): undefined reference to `WSAGetLastError@0'
sckt.o:sckt.c:(.text+0x70): undefined reference to `WSAStartup@8'
sckt.o:sckt.c:(.text+0x83): undefined reference to `inet_addr@4'
sckt.o:sckt.c:(.text+0xa8): undefined reference to `socket@12'
sckt.o:sckt.c:(.text+0xce): undefined reference to `htons@4'
sckt.o:sckt.c:(.text+0xea): undefined reference to `connect@12'
sckt.o:sckt.c:(.text+0x107): undefined reference to `gethostbyname@4'
sckt.o:sckt.c:(.text+0x123): undefined reference to `WSAGetLastError@0'
sckt.o:sckt.c:(.text+0x16c): undefined reference to `WSAGetLastError@0'
sckt.o:sckt.c:(.text+0x1ae): undefined reference to `WSACleanup@0'
sckt.o:sckt.c:(.text+0x1bd): undefined reference to `WSAGetLastError@0'
sckt.o:sckt.c:(.text+0x1cd): undefined reference to `WSAGetLastError@0'

環境はMSYS+MinGW と Cygwinとで両方やりました。
238名無し名人:2009/03/22(日) 11:10:20 ID:frMKNWGT
補足
Cygwin環境では -mno-cygwin オプションをつけたのと
つけないで Mingwで動かすのもやっています。
profileの環境変数もMingw優先かCygwin優先のPATHで
両方試しました。

WindowsのPATH自体は全くいじっていません。
239名無し名人:2009/03/22(日) 17:21:54 ID:frMKNWGT
reimpで liblws2_32.aに変換してもダメ。
240名無し名人:2009/03/24(火) 02:48:51 ID:8+EVMYI7
>>236-239 それ、エラーを見る限り(自分はVSが主なんで、正確な事はわからんが)
リンクができてないか、リンクするべきものがちゃんと指定されてないんだと思う。
オプション関係とか順序とかが間違ってないか?を確認するべきかと。
参考:
ttp://www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/etc/p1.htm
ttp://www.u-aizu.ac.jp/course/prog0/debug/gcc-error/
241名無し名人:2009/03/24(火) 10:42:05 ID:bHRwCZG8
>240

なるほど順番が間違っていたように思います。
Makefileを見てみると
$(CC) -o bonanza $(LDFLAG1) $(OBJS) $(LDFLAG2)
となっていたので
$(CC) -o bonanza $(OBJS) $(LDFLAG1) $(LDFLAG2)
としました。
全く基本がわかっていなかったと思います。お恥ずかしい。
VCではAthlon用のコンパイラオプションが用意されていないので
ちょっとgccで試してみたかったのです。
貴重な助言ありがとうございます。

あとはstrtok_rをどうしようかな・・・。
Windows用ならどうやらstrtok_sを使っているようですが
何とか考えて見ます。


242名無し名人:2009/03/24(火) 22:57:30 ID:nMWwprb4
素直に visual studio express を使えばいいんじゃ。。。
243名無し名人:2009/03/25(水) 09:56:34 ID:xN/Ugb7O
>242
ごもっともな意見ですがAthlonXP用の最適化オプションを
gccで試してみたいので・・・。
244名無し名人:2009/03/25(水) 10:41:24 ID:pJTh0/iv
最適化性能はGCCよりVC++がいいよ。
PGO無しでも。
245名無し名人:2009/03/25(水) 11:15:21 ID:xN/Ugb7O
>244
VC++にAthlonXP用の最適化オプションがなかったから
gcc貯めそうかと思ったけどめんどくさくなってきたから
VCでいいかな。
SSEぐらいまでしかないけど。
それにしてもzipファイルの中にあるバイナリは自分でコンパイル
するよりNPSが出るように思うけどIntel C++でも使ってるのかな。
246名無し名人:2009/03/25(水) 11:30:52 ID:xN/Ugb7O
Linux使っている人はどうしてるんでしょう。
247名無し名人:2009/03/25(水) 11:59:37 ID:wLVAfNkL
>>245
SSEは効果ないと思う(昔willametteで試みた)。
SSE関連のレジスタを使用するロスをカバーするだけの処理の連続性を確保できるかだと思う。
関数丸ごと分岐なしとかそういうレベルでないと効果は望めないかと...
248名無し名人:2009/03/25(水) 17:28:47 ID:xN/Ugb7O
>247
そうなんですか。
ソースを詳しく見てないのでもしかしたら早くなるかもと思っていたのですが。
もっとも詳しく見ても簡単には理解できませんが。

もう少しプログラムの中身を理解しようとgccはやめてVC++の統合環境でデバッグ作業をしようとしました。
コンパイル自体は簡単にできるのですが、csa.exeのソースがないためにトレースガできません。
bonanza.exeを実行する前に直接csa.exeを実行したのですがcsa.exeにデバッガ情報がないために
csa.exeからbonanzaのプロジェクトに移動できないのだと思います。

うまくcsa.exeを起動してbonanza.exeをトレースしてみる方法ありますか?
249名無し名人:2009/03/25(水) 17:30:49 ID:iAC7hwFz
トレース、トレースラ、トレースガ

MPが足りてるんだよ!
250名無し名人:2009/03/25(水) 17:59:56 ID:xN/Ugb7O
すいません。別のフリーソフトCSA将棋があるんですね。
失礼しました。
251名無し名人:2009/03/25(水) 19:23:11 ID:iAC7hwFz
ショーギ、ショーギラ、ショーギガ

HPはもうゼロよ、お父ちゃんやめてあげて!
252名無し名人:2009/03/25(水) 21:27:38 ID:LeHWpfvb
いろいろ混ざりすぎだろw
253名無し名人:2009/04/06(月) 14:40:04 ID:9LvutJSH
>>233
  サテト
  ∧∧
 (・ω・ )
 _| ⊃/(__
/ ヽ-(___/
 ̄ ̄ ̄ ̄ ̄ ̄
254名無し名人:2009/04/10(金) 23:33:47 ID:7zQUeIOX
255名無し名人:2009/04/10(金) 23:40:57 ID:+q+T5mpq
>254
久しぶりに有用なネタだ。
256名無し名人:2009/04/11(土) 12:16:23 ID:2O1qQDQJ
なるほど、 >>254 のサイトは結構参考になりますね。

ところで自分は、ボナが投了直前にでる水平線効果?の見苦しい王手を
なくしたい、さらには形作りのような概念の導入にチャレンジしたいのですが
どなたかその方向でトライされた方、あるいはするつもりの方はいらっしゃいますか?
257名無し名人:2009/04/14(火) 22:42:54 ID:EDKhJQ3Z
>256
私みたいに将棋が弱い人にとってはまだ何かあるかもって
思わせるから一概になんとも言えないかも?
確かに明らかに見苦しいのはあるけど。
258名無し名人:2009/04/15(水) 00:24:41 ID:upUfkaXJ
むむ・・・仲間がいる(PC分野で)だが力にはなってやれない。
259256:2009/04/15(水) 16:34:33 ID:YhxoZ8+E
>>257
そうですね、まあ私もそうしょっちゅう勝てるわけではないのですがw

ただ、現在棋力がそれほど無い人でも勝てるような、少々ルールを
改変した将棋を作ってまして、それだとかなり勝てるので最終盤が
結構気になるわけです。

どちらにしても、どうもその方向でチャレンジしてる人はいない
ようだということを認識しました。

260名無し名人:2009/04/16(木) 18:51:31 ID:M3XkBANr
明らかに見苦しい抵抗と、
プロでも秒読みなら受け間違えて頓死する可能性のあるような抵抗を
comが見分けるのは結構難しいだろな。
261256:2009/04/20(月) 00:55:09 ID:t3r49Cz+
>>260
とりあえず、
「点数が大きく開いていて周囲に手がかりの無い状態での
絶望的な王手」は控える仕様としました。

あと、無駄な中合も無くしたいのですがこれはまた判定が
難しいですね。

262名無し名人:2009/04/20(月) 14:06:13 ID:v27dOT0U
強さに結びつかないならば、判定多くする分弱くなるぞ
263名無し名人:2009/04/20(月) 17:03:27 ID:svNnVdAh
>>261
「無駄な中合」って「無駄な合駒」と同じ意味だよね
それなら柿木の無駄合判定アルゴリズムが使えるのでは?
264名無し名人:2009/04/21(火) 00:37:32 ID:JkWP9Oh0
>>262
対COM戦はまず確実に弱くなりますね。
ですが自分は対人戦しか考えていませんので、ちょっと状況が違うのです。

対人戦の場合、詰みが有るや無しやという最終盤で、COMの応手で
それが分ってしまう事があります。
またぎりぎりの局面で人間がCOM玉の詰みを考えている時に、無駄な王手を
かけて自爆するよりは、じっと詰めろをかける方が対人戦の
勝率は上がるはずです。

>>263
これは詰将棋でのアルゴリズムですね。
現在のCOMは、詰めよ以前の段階でも無駄合してきますから
そのまま転用はできないと思いますが、簡単に実装できたらいいかも。
というか、そういう方向性でしか解決できないのでしょうね。
265256:2009/04/21(火) 00:48:08 ID:JkWP9Oh0
あと少し補足すると、、、オリジナルのボナをより強くするようなことが自分にできるとは
到底思えないのでw  人がより楽しく対戦できるような方向で改造してる ってことでしょうか。

たぶんあともう数日で一応お試し公開できる予定なので、その節にはぜひ。
266名無し名人:2009/04/21(火) 00:53:48 ID:OUNDe1Ze
たぶん、COM将棋やってる連中は人間(プロ)に勝つことしか考えてなくて、
そのうちCOMがめちゃ強くなれば終盤の投了なんて考えなくてもいい(どうせ百戦百勝)ということだろうな。

片手間にそれらしいことをやるくらいはいいけど、まずは強くなること。話はそれからだっていう感じ。
でも大部分の人間にとっては十分強すぎるので、人間的な指し手もそろそろ研究してほしい……
267名無し名人:2009/04/21(火) 11:02:41 ID:rG5LEg09
2015年頃には 脳の機能的なシミュレーションが可能になる見通しだそうだから
その頃には特別なプログラミングしなくても人間的な指し手が可能になると思う

なのであまり価値が無い研究になりそう>人間的な手を指すプログラムの研究
268名無し名人:2009/04/21(火) 18:35:41 ID:+XuxfaRr
>>267
人間いらなくなるってことかい。
想定している使い方はしらんけど
そう簡単にはいかんでしょ。

御者や女工さんが失職したように
一部は不要になるかしらんが
269名無し名人:2009/04/22(水) 12:50:07 ID:+rseAiV+
>267
そんなもん、ウソかホラかあるいは聞いた方の誤解に決まってるだろ?

そんな話は何十年(コンピュータが開発された当初)から言われ続けてきて
未だに出来てない事からも分かる。

後、たっぷり千年は不可能だな。 脳の機能の複雑さを舐め過ぎ。
270名無し名人:2009/04/22(水) 22:31:13 ID:9RrlRG70
ひとつの脳細胞は数万の細胞からの入力を受け、閾値により興奮状態となり、数万の別の細胞に情報を送る
興奮後一定期間は興奮しない状態となる。
スイッチング時間はCPUと比べるとかなり(5〜6桁程度)遅い

現在のCPUでリアルタイムにシミュレートできる脳細胞の数はいくつくらいでしょうか?


ちなみに人間の脳細胞の数は約200億個
271名無し名人:2009/04/22(水) 23:11:23 ID:9RrlRG70
272名無し名人:2009/04/22(水) 23:17:55 ID:e2GvFrFZ
>>270
1秒間に何回、ニューロの状態を更新するかによるんじゃないの。

1秒間に100回ぐらい更新する必要があるとしよう。

・いまのPCで1秒間に1GBぐらいランダムに読み書きが出来ると仮定
・1つのニューロはその励起状態とそれに接続するニューロの情報などを100byte程度で表現されていて、
1回の更新でこの100byte程度を読み書きすると仮定

そうすると1秒間に 1GB / 100 / 100 = 100K個(10万個)が100回更新できることになる。

1秒間に100回というのが多いのか少ないのかは俺は知らん。たぶん少ない気はする。
あと、100K個だと人間の脳には到底及ばんよな。
273名無し名人:2009/04/22(水) 23:33:42 ID:NFPdDHUP
>271
(計算上)人間の脳をシミュレーションできるだけの計算パワーを
持つコンピュータシステムができる事と「実際にシミュレーション」
できる事は全然違う。

それも飽くまで、現状のラフな推測に過ぎないが。

人間の脳がどうやって情報を処理してるのか、どうやって機能を
実現するように構造が組織されているのかまだかけらほども
分かって無いのにそんな事が実現できるわけなかろう?

2015年辺りになって状況を見てみれば分かる。
まだまだ不可能な、まるっきり手の届かない話だと言う事がね。
274名無し名人:2009/04/22(水) 23:45:59 ID:9RrlRG70
>>27
まだ完全には解明されてはいないが、生きた脳の活動を観測できるようなになった
ことなどで、かなり解明が進んでいる。
「まだかけらほども分かって無い」などということはない。
275名無し名人:2009/04/22(水) 23:48:01 ID:9RrlRG70
脳の断面画像を多数撮影し、それから脳細胞ネットワークの3次元構造を解明する研究も進んでいる。
276名無し名人:2009/04/22(水) 23:52:29 ID:nA8ste7t
脳を解明なんてありえないから。
物質と実際の感情はとどのつまりどうやっても繋がらない。
既存の物質から、さらに細かい物質の発見にとってかわるだけ。
で、今見える一番細かい物質とそのときの感情を結びつけるだけの話。
結びつける物質の名前が変わる、ただそれだけ。
物質はどこまで細かく追っても、物質。感情自体じゃないから。
277名無し名人:2009/04/22(水) 23:55:20 ID:e2GvFrFZ
脳の構造を解明することももちろん重要なのだが、仮にいま完全に解明されても
いまのコンピュータにそれをシミュレーションするだけのマシンパワーがないよ。

いまのコンピュータがムーアの法則通りに成長したとしても、15年後ですら、1000倍。
>272の計算式だと、100Kが100Mになるが、脳細胞の数にはまだ足りないんじゃないかな。

>267はときどきこのスレに現われる例のキチガイだろう。
278名無し名人:2009/04/22(水) 23:56:34 ID:NFPdDHUP
>274
生きた神経細胞の一個一個の活動が分かるようになったのならともかく、
「この辺の血流量が多いな」とかの雑駁な観測で構造と機能の関係が
分かるわけねーだろ。

夢見過ぎだよ。
279名無し名人:2009/04/23(木) 00:19:46 ID:1KyFrzrv
>生きた神経細胞の一個一個の活動が分かるようになったのならともかく

わかってもどうにもならない。
「○○という酵素が働いてたんだ!」で、次に
「○○酵素の働きを司ってたのは××酵素だったんだ!」
「いや、△△というシステム!」
「新発見、◎◎という・・・」以下ループ。
それらの物質や名称は、人間の脳の
「今日はむしゃくしゃするので角交換振飛車を指してみよう」という判断自体には
永遠に繋がらない。テキトーに結びつけるだけなら、どの段階でも出来るけど。

網目の形だけ真似て電流通して「これはまるで脳!」とか
「インターネットにより地球自体が脳!」とか言葉遊びするのは
もちろんアリだけど。
280名無し名人:2009/04/23(木) 00:40:06 ID:rWahqnKQ
>279
生きた人間の脳細胞、一個一個の活動をリアルタイムに
しかも全部をいっぺんに観測できたとしてもなお、人間の
精神活動がどうやって生まれてくるのか分からないと言う
可能性は認める。

全体像を理解しようにも多分、膨大すぎ複雑すぎるだろう。
構造と機能の階層関係を支配している比較的シンプルな原理でも
見つけられない限りは。

人間の脳は人間が理解するには複雑すぎるシステムなのかも知れない。
281名無し名人:2009/04/23(木) 08:17:00 ID:rNatFKJ+
なんか一連の書き込みを読むと、10年ほど前に
「将棋はチェスと違って複雑なので、コンピュータが人間に勝てるようにはならないだろう」
というやつがいっぱいいたことを思い出したよ。
282名無し名人:2009/04/23(木) 08:28:41 ID:rNatFKJ+
おまいら、将棋と人間の脳に幻想いだきすぎ
283名無し名人:2009/04/23(木) 09:32:48 ID:rNatFKJ+
http://www.mattbamberger.com/content/BrainSimulation

このサイトには、「人間の脳の完全なシミュレーションには約20ぺた(10^15)flopsあればよさげ」と書いてある
The amount of computational power required to completely simulate a human brain at the neural level is probably about 20 petaflops.

現在は No1 のスパコンが1ペタflopsに達した程度みたいだ
http://www.top500.org/lists/2008/11/performance_development
284名無し名人:2009/04/23(木) 09:45:45 ID:rNatFKJ+
http://vesicle.nsi.edu/users/izhikevich/human_brain_simulation/Blue_Brain.htm

Models of Spiking Neurons
Simulation of Large-Scale Brain Models

などの研究をしている@The Neurosciences Institute
285名無し名人:2009/04/23(木) 09:53:54 ID:rNatFKJ+
Simulation of Large-Scale Brain Models のところを読むと以下のように書いてある

1000億個のニューロンのシミュレーション(人間の脳の細胞数とほぼ同じ)のシミュレーションを行った。
3GHzCPU*27 のbeowulf cluster マシンにて 1秒のシミュレーションを行うのに50日を要した @2005年10月

50日 = 60*60*24*50秒 = 4,320,000 = 4.32 * 10^6 倍遅い
286名無し名人:2009/04/23(木) 09:57:59 ID:X5yWOrhX
>>283
現在のスパコンは何台ものマシンを並べてある構造なので、マシン間の通信オーバーヘッドが大きく
いまのアーキテクチャのまま20倍になっても、それは本当の意味での20P flopsじゃないからなぁ…
287名無し名人:2009/04/23(木) 10:05:34 ID:rNatFKJ+
http://vesicle.nsi.edu/users/izhikevich/publications/large-scale_model_of_human_brain.pdf

これは哺乳類の脳のモデル化に関する研究


おいらは脳の専門家でもシミュレーションの専門家でもないので、ざっと調べてみたけど
脳の構造が充分解明され、シミュレーション技術が発展し、ハードが速くなれば、そう遠くない将来に
スパコンでリアルタイムに人間の脳のシミュレーションができるようになってもおかしくない気がしてきた
288名無し名人:2009/04/23(木) 10:14:51 ID:rNatFKJ+
>>286
脳の場合、ひとつの細胞に接続しているのはせいぜい数万個だし、各細胞が独立に動作しているので並列性がよい
したがって、マシン台数がN倍になって、シミュレーション性能はN倍にはならないが、√N倍よりはかなり大きくなると思う
289名無し名人:2009/04/23(木) 10:42:01 ID:rNatFKJ+
>>276
> 物質と実際の感情はとどのつまりどうやっても繋がらない

そんなことはない。

哺乳類の中脳の腹側被蓋野から大脳皮質に投射する名A10神経系のように、
欲求が満たされたときに活性化し、その個体に快の感覚を与える神経系がわかっている。
これらは神経系特有の神経伝達物質を分泌する。

ドパミンなどの神経伝達物質の分泌が実際の感情とダイレクトに結びついている
神経伝達物質は数100種類が発見されている
290名無し名人:2009/04/23(木) 11:51:15 ID:X5yWOrhX
>>288
> 各細胞が独立に動作しているので並列性がよい

細胞間の情報伝達が問題だな。

マシンを何台も接続するなら、この通信のオーバーヘッドってめちゃくちゃでかいんだけど。
まあ、それを考慮しても、√Nよりは良いだろうけどな…。
291名無し名人:2009/04/23(木) 13:17:33 ID:6ZLjYDvR
ええと、話が哲学的な問題ではないと仮定した上で、、、
コンピュータは無論感情は持たないわけですが、特定の条件で特定の反応を
するようにプログラミングしておけば、一見感情を持ったように見えさせることも
できるわけです。

例えば、評価点数が大きく変わったときに、ボナが驚いたふりをする、というような
ことをある程度は出来ますね。

292名無し名人:2009/04/23(木) 22:50:32 ID:povY4PMT
>291
だいぶ前に人間の感情も物質でコントロールされているんだと
ラジオで聞いたような記憶がある。
ドーパミンやセロトニンの量少しでやる気とか変わってくるしね・・・。
293名無し名人:2009/04/24(金) 08:24:46 ID:gdR+9U+R
>>269 はどこ行った?
人間脳のリアルタイムシミュレーションがたっぷり千年は不可能な説得力ある話はないのか?
294名無し名人:2009/04/27(月) 09:01:02 ID:xvthM8KC
>>253
   ?
  ∧∧
  (´・ω)
 _|⊃/(___
/ ヽ_(____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
295256:2009/04/28(火) 00:25:46 ID:in3a05le
以前に少し書いた者ですが、ようやく公開できる状態になりますので、とりあえずお知らせを。
ルールを改変しているのでGUIまで作る必要があり、結構時間かかりました。

Mosuran for Windows (ダウンロード)
http://magiwa.net/bn/Mx.exe?Parm=mosuran/FrDownload&Init=CALL&SYSKEY=0001

ボナ for Mosuran というコンソールCPUと対戦できます。

入門、初心者モードであれば大抵の方がボナに勝てると思います。
サイトの説明がまだほとんど出来てないので何のことか分らないでしょうが、、、
296名無し名人:2009/04/28(火) 00:41:22 ID:p863OVpO
>>295
以前の発言とやってることが違うんだが。
モスランルールとボナンザは直接関係ないと思う。
以前は新ルール作るなんて書いてなかった。
297名無し名人:2009/04/28(火) 00:43:28 ID:p863OVpO
初めの文しか見てなかった 259では書いてあった。
298名無し名人:2009/04/28(火) 00:43:31 ID:90a5EbON
>>295
操作方法やルールがわからず1分で削除した
299名無し名人:2009/04/28(火) 00:53:05 ID:p863OVpO
一手さしたらいきなり負けましたと出て、何もしてこない。こっちが投了した。

System > 対局開始 
Bona4Mos 1> 負けました 
System > 投了
300名無し名人:2009/04/28(火) 00:55:40 ID:p863OVpO
ボナンザの改良じゃ無ければ、ボナンザを使う必要ないじゃん。
ダウンロードと展開で300Mも消費するし、その間に捨てたくなる人が増える気がする。
お手軽でない。
301名無し名人:2009/04/28(火) 00:57:14 ID:90a5EbON
ルールがわからんので試しにBona4Mos同士を対戦させようとしたら出来なくてイラッとした
302名無し名人:2009/04/28(火) 01:02:27 ID:p863OVpO
>>301
ルールとしては、王(のキキ)になれる駒と、
強力な駒(飛角桂のキキ)になれる駒を
相手に知らせずに設定できるという追加らしい。
303名無し名人:2009/04/28(火) 01:07:31 ID:90a5EbON
>>302
そんな複雑なルール要らないから、普通の対戦将棋作ればいいのにw
304名無し名人:2009/04/28(火) 02:02:46 ID:x8xBUw4E
 ――--、.、
 :::::::,-‐、,‐、ヽ
 :::::_| O | O|-i、
 /. ` ' ● ' ニ 、   テケテテッテテェ〜、糞ソフトォ
 ニ __l___ノ
 / ̄ _  | i  ┌─────┐
 |( ̄`'  )/ / ,│Mosuran.   │
 `ー---―' / '(__ )for Windows│
 ====( i)==::::/└─────┘
 :/     ヽ:::i

複雑化する変更は流行らない。単純化や簡素化を目指さないと。

そもそも歴史のあるゲームではルールの変化をあまり求められない。
必要性・必然性・需要があるのならもう変わっている。

弱さを求めるも駒落ちやlimit depthなどの指定を超えられていない。
305名無し名人:2009/04/28(火) 02:13:43 ID:VmH7zpCt
自分が要らないと思えばスルーすればいいだけ。
306名無し名人:2009/04/29(水) 00:13:46 ID:TjbbJEyo
モスランの作者はいじけて出てこなくなった?
307名無し名人:2009/04/29(水) 01:05:11 ID:xPnK5EFG
まあこういう妄想は誰しもがやるだろうね
308名無し名人:2009/04/29(水) 12:28:14 ID:SzZr1NDI
>>306
いやいやそんなやわな神経してませんよw
ただ月内は本業が忙しいので、あまり触れません

この連休は出掛けてインフルエンザを気にするよりは、引き篭もって
いろいろ開発する予定です

完全情報型の現在の将棋はいずれ確実にソフトが人間を越えますので
それ以降の楽しみ方を、人間側・ソフト側共に模索するためのトライアルが
モスラン、という感じです

それから最近ボナの読み筋をトレースしていて気付いたんですが、
明らかに駄目な手をしつこく探索してる場合がありますね
これを軽い負荷でカットできれば探索効率が随分あがるような気がしてます
自分は棋力は四段ぐらいなのでトッププロにはほど遠いですが
自分の感覚をコンピュータに伝えるのには慣れているのでw
309名無し名人:2009/04/29(水) 12:35:09 ID:olOsH5pf
>>308
モスランよりもボナの読み筋探索効率改善作業に力を注げ!
それの方が皆に喜ばれるぞw
310名無し名人:2009/04/29(水) 13:00:48 ID:TjbbJEyo
現行の将棋に追いついたら、銅 (金銀銅ね) でもいれてマスも増やしたらいいじゃん。
モスランより親しみやすいと思う。 動き方をどうするか。
311名無し名人:2009/04/29(水) 13:47:47 ID:th2VC4Pp
http://ja.wikipedia.org/wiki/%E9%8A%85%E5%B0%86

 ○○○
   銅
   ○

だな。
312名無し名人:2009/04/29(水) 13:59:32 ID:qFzzBgMS
>310
そういうことすると、定跡の積み重ねがない分いきなりコンピュータに置いてきぼりの可能性がある。
313名無し名人:2009/04/29(水) 14:14:45 ID:xPnK5EFG
その調子でカードゲーム化しちゃいなYO
314名無し名人:2009/04/29(水) 14:15:05 ID:TjbbJEyo
序盤の定跡が無いのは、コンピュータに不利。 
コンピュータは終盤ほど強い。
ボナンザで定跡外して対戦すれば相当弱くなる。
315名無し名人:2009/04/29(水) 20:14:49 ID:A/CNpRT9
現時点では無価値なのは本当だと思うが、
次の時代への一歩は壮大な無駄から生じると信じる。
ある夢見る開発者からの一言。
316名無し名人:2009/04/29(水) 20:24:34 ID:olOsH5pf
ただモスランとボナソースとは何の関係もないのでここでやる必要ないよね
モスランスレでも立てて勝手にやれって感じ
317名無し名人:2009/04/30(木) 08:54:48 ID:iSSA8I/q
>>294
  !
  ∧∧
 (・ω・ )
 _| ⊃/(__
/ ヽ-(___/
 ̄ ̄ ̄ ̄ ̄ ̄
318名無し名人:2009/05/07(木) 11:21:09 ID:Iy4EWr7E
ところで、そろそろプログラミングの解析の話を・・・。
(他力本願)
319名無し名人:2009/05/15(金) 23:25:10 ID:6X1BqX82
iphoneアプリに移植しようとしてるんだけど
BonanzaはCで書かれているので
そのままでできそうな感じですが
メモリ使用量と定跡ファイルをコンパクト化しないとならなそうです。
320名無し名人:2009/05/16(土) 04:31:07 ID:5Hb0VxzE
次世代iPhoneはメモリーが倍の256MBになるそうですね
321名無し名人:2009/05/16(土) 13:41:08 ID:MWVqyxvu
>>319
iTunesストアで売るの?
322名無し名人:2009/05/16(土) 16:59:34 ID:+gNSvF1M
>31
ソースを全部見たわけじゃないけど
b_pro_pawn 等 と b_tgoldの違いは何?
323名無し名人:2009/05/16(土) 17:59:43 ID:QtZGLK1j
>>322
と金、成香、成桂、成銀、金をひっくるめた total ? の t
324名無し名人:2009/05/16(土) 22:24:08 ID:+gNSvF1M
>323
そうなのかな。ここにいる人みんなbonanzaのソースを
読み込めてるのかな?
325名無し名人:2009/05/16(土) 22:30:13 ID:1QACd9Nr
b_pro_pawn は先手のと金の bitmap。
b_tgold は先手の金と同じ動きの駒の bitmap。
326名無し名人:2009/05/17(日) 00:30:04 ID:yxbmlBFE
>321
売るなら保木さんに連絡を取って許可をもらわんといかんね。
フリーで配布する場合はどうなんだろ?
327名無し名人:2009/05/17(日) 00:56:30 ID:vfdh7ojW
ボナの形勢判断で歩の枚数の効果はどうなっているのでしょうか?
単純に一枚100点と足していくとおかしくなるので、枚数が増えるたびに
歩1枚の価値を小さくしていくべきだと思うのですが。
328名無し名人:2009/05/17(日) 04:51:18 ID:7PT0Ke8U
>>326
フリーでも連絡した方がいいだろうね。
確か著作権は保木さんにあるってライセンスだった。
329名無し名人:2009/05/17(日) 08:26:09 ID:yhyIWI7i
>>327
枚数が増えるたびに歩1枚の価値を小さくしていくようになってます
詳しくはそーすを読んでね
330名無し名人:2009/05/17(日) 15:02:35 ID:R94SXAOk
>>324
細かい話を長々と書いても仕方がないので、簡潔に。
attack.c の 最後のほうにある is_black_attacked() と is_white_attacked() という関数を読めば、
マクロになってるけど bb_tgold、bb_hdk、bb_bh、bb_rd の使われ方が理解できると思う。

>>327
保木氏のgpw2006.pdfでは考慮されている。
ソース内では枚数補正の記述はないけど、fv.bin上のデータを参照することで対応している。
331名無し名人:2009/05/17(日) 15:18:40 ID:vfdh7ojW
>>329
>>330
ボナ3で検討していると歩がたくさんある局面で楽観しすぎるって感じが
あったので、ためしに持ち歩を例えば6歩から2歩くらいに減らすと評価値が
結構変わったりしたので持ち歩の枚数を過剰評価する傾向があるのかと思ってました。
極端に言えば、3歩以上の場合は点数を変えなくても実戦的にはOKなんじゃないかと
思いますが。
332名無し名人:2009/05/17(日) 16:51:14 ID:R94SXAOk
>>331
実践的に必要がないとしても、学習的に必要ないと判断できるかどうか。
「3歩以上」という判断材料がどこから?「4歩以上」では?
など、こういった境界は棋譜からでは見えにくいのではと思う。

自分は学習について全然解らないけどw
333名無し名人:2009/05/17(日) 17:57:55 ID:d1lv5Bhp
>325
ありがとうございます。
334名無し名人:2009/05/17(日) 19:09:54 ID:yxbmlBFE
>331
ボナンザ学習法ではプロ棋士の棋譜の指し手を
理想として学習するので、プロが何枚目の歩でも
取れる歩は取ると言う行動(指し手)を取っていれば
そう学習してしまう。

プログラム側では何枚目の歩なのかを区別して
パラメータ化するくらいしか工夫の仕様が無いな。

でなきゃ、ドーピング(学習結果を手で修正)になっちまう。
335名無し名人:2009/05/18(月) 04:00:19 ID:pzW6q80l
後々祟るから歩はドンドンはらっていいんじゃね。V4では枚数で区別してるけど。
336名無し名人:2009/05/21(木) 10:53:11 ID:sS+b3LGr
今頃になってbとwがチェスの黒と白を意味しているのだと知ったorz。
337名無し名人:2009/05/21(木) 22:09:35 ID:tOFIujqm
ボナンザのソースコードを読むにはChessのCraftyの
ソースコードを平行して読むのが良いのかも知れんね。

私は読んだ事ないけどw。
338名無し名人:2009/05/22(金) 10:25:39 ID:4yzPXL51
>337
余裕があればそうしたいと思います。
bonanza以上にコメントが多く書いてあればの話ですが。
というより初歩的なことでつまづいています。
ソース全体を見ていないからなんともいえないのですが

339名無し名人:2009/05/22(金) 10:29:38 ID:4yzPXL51
----ini.c----
ini_rand( 5489U );
----rand.c----
#define MASK32 0xffffffffU
ini_rand( unsigned int u )

{

int i;

rand_work.count = RAND_N;

u &= MASK32;

rand_work.vec[0] = u;

for ( i = 1; i < RAND_N; i++ )
{

u = i + 1812433253U * ( u ^ ( u >> 30 ) );

u &= MASK32;

rand_work.vec[i] = u;

}

}

340名無し名人:2009/05/22(金) 10:35:00 ID:4yzPXL51
何がやりたいのでしょうか。
5480Uを30右シフトしても値は0で、それとXORしても5480Uのまま。
結局はu = i + 1812433253U**Uと変わりません。
更に
0xffffffffUとXORしたところでuの値は変わらないのに何をしているのでしょうか。
341名無し名人:2009/05/22(金) 11:00:02 ID:zoskoPmH
>>340
たしかに1回目は u >> 30 はゼロになるけど
RAND_N 回繰り返してると、上位2ビットが0以外になる場合もあるんじゃね?
342名無し名人:2009/05/22(金) 11:02:18 ID:zoskoPmH
> 0xffffffffUとXORしたところでuの値は変わらないのに何をしているのでしょうか。
rand_work.vec[] の型がわからないけど、int が64ビットでも
32ビットの範囲の乱数を生成したいんじゃない?
343名無し名人:2009/05/22(金) 14:33:31 ID:4yzPXL51
>341
> RAND_N 回繰り返してると、上位2ビットが0以外になる場合もあるんじゃね?
ini_rand( 5489U );
すると1回目uに使われる値である引数の5489Uは意味がないのでしょうか。

>342
> rand_work.vec[] の型が

定義を繰り返していますが大元はこんな感じでした。

typedef struct { int count; unsigned int cnst[2], vec[RAND_N]; }rand_work_t;

unsigned intですね。
> 32ビットの範囲の乱数
よく分かりました。

344名無し名人:2009/05/22(金) 18:46:15 ID:MRg7cHTr
>>343
rand_work.vec[] が rand32() で使われているので
引数 5849U も含め、乱数生成の元になる値を作られていると思います。

乱数に関しての計算式は一見奇怪なものが多かったりして、
個々の挙動を追うのはかなり面倒だったりします。
「乱数関連の関数」程度で済ませて深追いしないのも手かと。
345名無し名人:2009/05/22(金) 19:08:19 ID:4yzPXL51
>344
深追いはやめました。
疲れました。
話題を変えて

Xor( irank*nfile + ifile, *pbb );

irank*nrankとしたほうが感覚的には理解できそうな気がしますが
トレースの仕方が間違ってますか?
確かにnfile は #define で 9と定義されているから間違いでは
ないのですが・・・。

346名無し名人:2009/05/22(金) 19:56:09 ID:MRg7cHTr
nfileは盤面にfile(筋)がいくつあるか、nrankは盤面にrank(段)がいくつあるか、
を指していると思います。

Bonanzaは盤面を1次元配列81マスで実装しているので、
座標計算において、一段につき9筋分(9マス分)ずれていく、
という表現をされていると思います。
347名無し名人:2009/05/22(金) 20:54:03 ID:4yzPXL51
>346
それは分かるのですが
(一次元配列で高速化をしていることも含めて)
現在の段*段の最大値(9)+筋

かもしくは

現在の筋*筋の最大値(9)+段

と表現するほうが感覚としては普通かと思いました。
たまたま筋と段が同じ数だからいいものの
直感的にざっとみるとなんかつじつまが合わないと
感じました。

先ほどの例の場合だと

現在の段*筋の最大値(9)+筋

という感じでなんとなく違和感を感じます。
細かすぎるのでしょうか^^
348名無し名人:2009/05/22(金) 20:57:52 ID:LBMDsVNn
>>347
じゃあ nfile が 10 で ifile が 0〜9 の動きを考えてみたら?
349名無し名人:2009/05/22(金) 21:28:25 ID:MRg7cHTr
>>347
自分は違和感ないのですが、座標軸が入れ替わってるのかな?

   筋→
段 00 01 02 03 04 05 06 07 08
↓ 09 10 11 12 13 14 15 16 17
   18 19 20 21 22 23 24 25 26
   27 28 29 30 31 32 33 34 35
   36 37 38 39 40 41 42 43 44
   45 46 47 48 49 50 51 52 53
   54 55 56 57 58 59 60 61 62
   63 64 65 66 67 68 69 70 71
   72 73 74 75 76 77 78 79 80

マスの位置 = 段 * 筋の最大値(一段分) + 筋 で、しっくりきます。
350名無し名人:2009/05/22(金) 22:01:28 ID:4yzPXL51
>348
あ、恥ずかしい間違いをしていました。
そうですね。確かにソースの通りで間違いありません。
351名無し名人:2009/05/23(土) 11:41:09 ID:6wIInQGF
特徴ベクトルの理論について分かりやすく
説明してあるサイトとかあったら教えてください。
352名無し名人:2009/05/23(土) 15:53:31 ID:/l+wT1sJ
>>351 どういうことを知りたいの?
353名無し名人:2009/05/23(土) 18:16:14 ID:6wIInQGF
>352
すべてです・・・といったら怒ります?
多少数学的なことを含みます。
GPW2006のメソッドで

l(P,v) = Σm=1-M T[ζ(Pm , v)-ζ(P,m=0, v)]

その局面まででコンピュータが計算した最善手の評価値と
実際に指された手の評価値の違いを合計したものみたいですが
なんでこんなものでプロの指す手の傾向が分かるのでしょうか。

特徴ベクトル自体をあまり理解していないのでそのあたりの数学的な
部分からはじめたいのです。


354名無し名人:2009/05/23(土) 18:18:40 ID:335GM6sA
数学的な部分は自分で勉強するべきでは?
わからないことは数学板で聞けばいいし
355名無し名人:2009/05/23(土) 18:28:47 ID:6wIInQGF
>354
分かりました。地道にやります。
356名無し名人:2009/05/23(土) 18:30:06 ID:vy6gVxOK
>>353
評価関数が正しければ、右辺[]内は負になり、
正しくなければ正になりやすい。
Tは単調増加関数。
従って、右辺が小さいほど評価関数が正しいといえる。

正しくは右辺[]内は先後で符号を反転しないといけないけど。
357名無し名人:2009/05/23(土) 18:44:57 ID:JA1XbCZp
>>354
わざわざこんなことを言うやつもどうかと思うがなぁ・・・教える気がないなら黙ってりゃいいのに
358名無し名人:2009/05/23(土) 19:12:46 ID:ZITP7QpK
教える気がないなら黙ってりゃいいのに
359名無し名人:2009/05/23(土) 23:39:51 ID:6wIInQGF
1万のパラメタか・・・すごいな。
360名無し名人:2009/05/23(土) 23:45:28 ID:6wIInQGF
1万を超える全ベクトルの要素数を探索アルゴリズムと辻褄が合うように
「手動で」((((;゜Д゜)))調整し・・・。
自動学習とかみんな言っているけど自動じゃないんじゃない?
361名無し名人:2009/05/24(日) 00:46:44 ID:lqlnBMk0
>>353
たぶん間違ってるけど適当に説明すると、

ベクトルとは数字の集まりのこと
特徴ベクトルとは、評価関数の定数部分全部のことを指している
最適制御理論とは、目的の計算式を得るにはどんな計算を繰り返せばよいか発見する手法

最適制御理論によって、よりよい評価関数の定数部分全部を求める計算式を求めて
その計算を繰り返すと、ベストな評価関数の定数部分全部が求まる

これをボナンザメソッドと呼んでいる

したがって始めに評価関数の定数部分以外の式の形(7・8ページ)と
何をもって最適な評価関数と呼ぶのか決める必要がある

4ページ目はその目的関数が
「全部の棋譜の全部の指し手と一致するような評価関数の定数部分を求める計算式」
だと説明している場所(Σが2個だから全部の〜全部の〜w)で
3ページ目にあったJがJ'になってtがなくなっていることに注目すると
繰り返し一回分(といっても入力棋譜丸ごと使うから遅い)であることがわかる

他にこまかい説明がいっぱい、例えば
評価値の差が大きくても正解が2番目の候補手に上がってれば実はあんまり悪くないわけで
どのくらい一致状態に近そうか求める関数が必要だから作りましたとか
評価値を全部定数倍しても求まる手はどうせ同じなんでそういうのはやめますとか
複数の駒の配置による点数より駒自体の点数重視したほうがいいよねとか
書いてある

そこから下は最適制御理論が本格的に始まって計算式作ってるが
専門的すぎて不完全にしか理解できてないので専門書読んでくれ
362名無し名人:2009/05/24(日) 00:54:54 ID:BgsCXpjV
一万個のパラメーターってのが最適制御の計算から自動的に出てくるもの
というところがよくわからない。何かもっと簡単なゲームの具体例で説明している
文書なんかがあればいいんですけど。
363名無し名人:2009/05/24(日) 01:27:26 ID:0JBDtE69
将棋以外でボナメソやった話はきかないな
364名無し名人:2009/05/24(日) 06:14:31 ID:R9+1ZDOt
学習させるべき「プロの棋譜」に当たるものが他の分野だとないからな
365名無し名人:2009/05/24(日) 14:54:57 ID:ytFanRvB
>362
1万個のパラメータが自動で出てきたりしないよ。
何をパラメータとして選ぶかは飽くまで人間(設計者)が
経験と勘で決めている。

だからどうしてもいくらかは将棋に関する知識が必要になる。

駒同士の相対的あるいは絶対的位置関係がそれぞれ「別個に」
パラメータになるので組み合わせでむやみに数が膨れる。

>360
誰が「手動で」調整するなんて言ったw?
パラメータの値を調整するのは棋譜から自動的に行われる。
だから自動学習とか機械学習と呼ばれる。
366名無し名人:2009/05/24(日) 15:04:09 ID:ytFanRvB
上に書いたのは用語が不正確だったね。
「1万個の特徴」は人間(設計者)が自分で選んで決める。

それを一次結合して評価関数にするための係数
(パラメータ)は機械学習により自動的に決まる。
367名無し名人:2009/05/24(日) 15:08:02 ID:vzd2FjMh
この理論だと1万棋譜あったら1万棋譜を読み込ませた後で
評価関数が間違っていたら評価関数(もしくはパラメタ)を
手動修正してまた1万棋譜読み込ませてまた修正して・・・
という感じになるの?
368名無し名人:2009/05/24(日) 15:11:15 ID:vzd2FjMh
>367
すみません。更新する前に書き込んでしまったので
365と366を読んでいませんでした。
369名無し名人:2009/05/24(日) 15:17:31 ID:vzd2FjMh
結局プロの手を最適とみなすのですか?
プロの手にも悪手がたくさんあると思うけど。
370名無し名人:2009/05/24(日) 15:19:57 ID:ytFanRvB
>367
いや、手動で調整はしない(はず)。
自動的に調整される(それがボナンザメソッド)

学習させたい棋譜1セットを1回読み込ませて
パラメータを調整するのを1ステップと呼ぶらしい。

それが十分に収束する(棋譜の指し手との一致度が高くなる)
まで何回でも繰り返す。

だからパラメータの選び方がまずかったりすると
いつまで経っても収束しないw。
371名無し名人:2009/05/24(日) 15:33:24 ID:ytFanRvB
>369
そうです。

プロの棋譜にも当然、悪手(敗着)はあるはずですが
何万局もの棋譜からそれを探り出して排除するのは
アマチュアには棋力的、また労力的にほぼ不可能なので。

それに99%の指し手が正しければ
(うまく行けば)正しく学習するだろうと言う考え方。
372名無し名人:2009/05/24(日) 15:41:18 ID:FuoP3wvx
>369
プロだけじゃなくて、アマの手もかたっぱしから放り込む。
良い手を学習するんじゃなくて、一見よさそうな手を学習すると思ってくれ
373名無し名人:2009/05/24(日) 15:55:07 ID:ytFanRvB
>353
統計学習に不慣れなら最小二乗法などの
回帰分析から勉強してはどうでしょう?

ボナンザメソッドは実は単純パーセプトロンと同じで
「ロジスティック回帰モデル」だと読んだ事があります。
374名無し名人:2009/05/24(日) 16:17:34 ID:ytFanRvB
現代的制御理論(最適制御理論)がボナンザメソッドに
どう生かされてるのかは残念ながら私には分かりません。

しばらく前から、ずーっと勉強中w。
変分原理とか難しいよー!
375名無し名人:2009/05/24(日) 17:14:07 ID:ytFanRvB
>353
ちなみにその式の[]の中はコンピュータが計算した最善手と
実際に指された手の評価値の差では無く、ある局面における
合法な任意の指し手と棋譜上で実際にプロ棋士が選んだ指し手の
評価値の差になっています。(私が勘違いしていなければ)

したがってその評価関数が適切(理想的)ならすべての局面で
そのカッコの中はマイナスになるはずなのです。

どの兄弟手よりもプロが実際に指した指し手の方が
評価値が高くなってますので。

そうなってない(プラスになっている)部分が誤差と言うわけ。

それらを合計した結果はT(x)と言うシグモイド関数などが
掛かってから合計されているので必ず正の値になりますが。
376名無し名人:2009/05/24(日) 17:30:50 ID:ytFanRvB
そこまで考えるとなぜT(x)がシグモイド関数などの
階段型関数に類似した形をしてるのかが分かると思います。

なぜ階段型関数(値がマイナスならゼロ、プラスなら1)を
そのまま使わないのかは後で微分しなければならない
だから微分可能な関数でなければならないと言う話らしいです。
377名無し名人:2009/05/24(日) 22:01:24 ID:vzd2FjMh
>375
ありがとうございます。一番分かりやすい説明です。
そこで微分してパ評価値が適切な範囲を限定して
やろうということですね。
瞬間の傾きの大きさを調べることで範囲を狭めることができる。
こういうことですか?

378名無し名人:2009/05/24(日) 22:31:51 ID:ytFanRvB
>377
スミマセン。

どうやって実際に最適なパラメータを計算しているのか
私にはまだ、良く分かりません。

偏微分して停留値がどうとか。最急降下法がどうのこうの。
誰か分かってる人、タッチw!
379名無し名人:2009/05/24(日) 22:49:37 ID:dpY/9Sl8
あとは多変数の極値を求める一般的な話。
保木さんのGPW論文は山登り法だね
傾きの値も使わずに、正負だけ使う。

麓から山に登るのに、東西または南北しか進まない。
まず東西のどちらに傾いているか調べて東が高ければ東に1m進む。
次に南北のどちらに傾いているか調べて北が高ければ北に1m進む。
その繰り返し。
頂上が近づいたら、ニセピークに進まないように歩幅を小さくする。

ピークの形が複雑なので(2次収束しないので)、
わざと効率の低い方法を使う。

以上は2次元(特徴ベクトルの数=2)のとき。
多次元(1万次元)は神の世界で人間の知っていることはたかが知れているので、
控えめ(原始的な方法)がちょうどいい。
380名無し名人:2009/05/24(日) 23:11:02 ID:ytFanRvB
>379
その辺で私は混乱してるんですよ。

与えられた多変数関数の極値を求める問題と
特定の点で極値を持つ関数のパラメータ(係数)を
決める問題は違うんじゃないか?と。

まあ、自分が何か大きな勘違いをしてるのだと思いますが。
381名無し名人:2009/05/24(日) 23:23:36 ID:dpY/9Sl8
>>380
パラメータ(係数)ではなく、変数そのものだよ。
だれだよ係数などと言ったのは。
自分で式を末端まで書いたらわかると思う。
382名無し名人:2009/05/24(日) 23:39:01 ID:ytFanRvB
>381
あー、ゴメンゴメン。
やっぱり勘違いしてましたw。

評価関数そのものではなく、誤差関数をいじくって
作り出した目的関数を最小化するパラメータを探し
求めてるんだからこれで良いんだ。

失敬失敬!

しかし、そうするとすぐにローカルミニマムに
はまり込みそうな気がする。
と言う事はそれをうまく避けるための工夫が
最適制御理論ゆずりなのかな?
383名無し名人:2009/05/24(日) 23:55:33 ID:vzd2FjMh
2,8段目の香、飛角の不成は考えないと書いてあるけど
これだと直前に歩を打って詰ますパターンを検索できない?
よく詰め将棋に不成にしてから歩を打つパターンがあるけど。
384名無し名人:2009/05/25(月) 00:05:13 ID:0Wkcvf3q
>>383
もちろん出来ない。
逆に玉方不成で打歩詰に誘致することも出来ない。
実戦ではめったに起こらないから読むスピード重視と言うことでしょう。
385名無し名人:2009/05/25(月) 16:07:20 ID:T43K2B1P
よくこんなものを半年で作れましたね。
完全に解読するのに半年かかりそう。
386名無し名人:2009/05/25(月) 22:36:31 ID:T43K2B1P
>384
ありがとうございます。
高校の数学どまりなので変分法から勉強しないと・・・。

387名無し名人:2009/05/25(月) 23:56:05 ID:tHdxckdd
これって理想的な評価関数の具体的な形、
すなわちパラメータ一個一個の値が分からないから
誤差関数をいじって作り出した目的関数(汎関数)
の極値問題に帰着させて解くと言うところが
変分法による問題の解き方と言う事なんだろうか?
388名無し名人:2009/05/25(月) 23:59:47 ID:8NIyG4Qn
実体は変分法は関係なくて勾配法
389名無し名人:2009/05/26(火) 10:42:22 ID:e7NCP884
bonanza自体に続いて学習プログラムのソースもアップして欲しい。
390名無し名人:2009/05/26(火) 13:00:17 ID:hoW8WXjW
>>387
例えば棋譜の手が評価値1000点でそれ以外の指し手の一つが1100点の時
断定できるのは間違えたという事実だけなので、不一致回数に1を足す
これを全ての手について計算すると、棋譜の手が最善手から何番目あるか
わかるのでそれを学習に使う
本当は1000点の方が1500点であるべきかもしれないし(誤差-500)
あるいは1100点の方が500点であるべきかもしれない(誤差0)ので
-100という数値はあまり当てにならないのでそのまま使えない
これをほぼ一致したと拡大解釈して、例えば不一致回数に1を足すかわりに
0.5しか足さないようなやり方で参考程度に利用してる
というわけで誤差関数なんてどこにもない
391名無し名人:2009/05/26(火) 13:02:06 ID:hoW8WXjW
>>389
公開されたソースに含まれている
392名無し名人:2009/05/26(火) 14:36:59 ID:e7NCP884
>391
bonanza.txtには書いてあるけどどれか分からない。
と思ったらオプションで決めるのかな?
MINIMUMをはずさないといけないみたい?
393名無し名人:2009/05/26(火) 16:15:29 ID:e3btSX1o
ボナは終盤の玉の固さの点数をもう少し上げて欲しい。
たとえ棋風が少し攻撃的じゃなくなったとしても。
394名無し名人:2009/05/26(火) 17:05:48 ID:hoW8WXjW
>>392
そうだよ
395名無し名人:2009/05/27(水) 15:02:48 ID:Lhjq1Z97
1回指すごとに全部の駒の利きを見てるんですか?
396名無し名人:2009/05/29(金) 18:54:26 ID:uKif8cXE
ini.c の abb_obstacleにはいったい何を格納してるのでしょうか。

else switch ( adirec[ifrom][ito] )
{
case direc_rank:
BBXor( abb_obstacle[ifrom][ito],
abb_plus1dir[ito-1], abb_plus1dir[ifrom] );

これだと同じ位置で排他的論理和して0ばかりになりそう?
397名無し名人:2009/05/29(金) 21:10:50 ID:uKif8cXE
>396
失礼、勘違いしてた。
398名無し名人:2009/06/03(水) 19:07:13 ID:HxeUSobA
定期あげ
399名無し名人:2009/06/07(日) 18:48:51 ID:XM3BLMbp
少し上のレスにもありますが、学習プログラムのソースはどこにあるんですか?
>>392を読んでもよくわからないです。

400名無し名人:2009/06/07(日) 19:51:45 ID:4bXCavQc
>>399
内緒
401名無し名人:2009/06/07(日) 23:12:43 ID:ZVV4kHx6
>400
内緒にしなくたっていいじゃない^^
402名無し名人:2009/06/07(日) 23:14:56 ID:ZVV4kHx6
>ソースを読んでわかったこと、疑問に思ったことをチラシの裏のように書いてくれ

この趣旨に沿って分かった人はもう少し細かく説明して頂戴??
403名無し名人:2009/06/07(日) 23:17:06 ID:U2PSIVYx
チラ裏なんだから要求することじゃないだろw
404名無し名人:2009/06/07(日) 23:18:42 ID:8deCBawM
>>402まずは君が書いてみたらどうだい?
405名無し名人:2009/06/08(月) 00:22:59 ID:zIdwn7PZ
>404
分かった人じゃないと無理だよorz
406名無し名人:2009/06/08(月) 01:24:55 ID:RJ0QnNvO
ソースを読もうってんだから1から10まで全てわからないわけじゃないだろう
407名無し名人:2009/06/08(月) 13:36:20 ID:zIdwn7PZ
>406
まあ、1からじゃないけど2からぐらい分からないかな?
408名無し名人:2009/06/08(月) 21:36:25 ID:zIdwn7PZ
複雑だなぁ。
WinAPIとMFCを両方熟知してないと解読が難しい。
409名無し名人:2009/06/09(火) 23:07:07 ID:oVFjbdXg
silkou.c

SendMessage( hwndMainDlg, WmThinkStart,
   MAKEWPARAM( MAKEWORD( uFileFrom, uRankFrom ),
MAKEWORD( uFileTo, uRankTo ) ), uPiece );

WmThinkStart,メッセージで思考を開始させるのはいいけど

static LRESULT CALLBACK
MainDlgProc( HWND hWnd , UINT uMsg, WPARAM wParam, LPARAM lParam )
上記の関数で

case WmThinkStart を見てもbonanza.exeに直接値を渡しているところは見当たらない。
(uFileFromなど)

どこだ?


410名無し名人:2009/06/09(火) 23:15:44 ID:r3s0Spq3
>>409
WritePipe()
411名無し名人:2009/06/09(火) 23:59:42 ID:oVFjbdXg
>410
WitePipeの中のWriteFileはファイルにデータを書き込んで
いるだけのような感じだが他に使い方があるのかな?

WmThinkStart だと確かにlpszの文字列が6667FUという感じに
なるみたいだけど。
しかしそれをbonznza.exeに伝える方法が分からない。
bonanza.exe側にメッセージを受け取る命令とかがあるのかな?
412名無し名人:2009/06/10(水) 00:40:55 ID:+NIoeiF/
>>411

sikou_dll/sikou.c では、bonanza.exe と anonymous pipe で通信している。CreateProcessAndPipe() で bonanza.exe を子プロセスとして起動する
時、bonanza.exe の標準入力とそのファイルが pipe の両端に指定されている。

ちなみに、MFC は一切関係ない。
413名無し名人:2009/06/11(木) 23:54:55 ID:O39NpcTK
>412
ありがとうございます。
MFCはCSA.exeだけですね。
匿名パイプを理解していませんでした。
414名無し名人:2009/06/28(日) 14:11:05 ID:M6J6gfQL
>>17
最新
#define DPawn 87 /* 174 */
#define DLance 235 /* 470 */
#define DKnight 254 /* 508 */
#define DProPawn 530 /* 617 */
#define DProLance 482 /* 717 */
#define DSilver 371 /* 742 */
#define DProKnight 500 /* 754 */
#define DProSilver 489 /* 860 */
#define DGold 447 /* 894 */
#define DBishop 571 /* 1142 */
#define DRook 647 /* 1294 */
#define DHorse 832 /* 1403 */
#define DDragon 955 /* 1602 */
#define DKing 15000

この数字の二番目(/* 174 */など)は何を意味しているのでしょうか?
415名無し名人:2009/06/28(日) 14:46:15 ID:5zGy23S+
交換した場合の評価値の変化量。たとえば、と金取られると相手の持ち駒に歩がはいる。
416名無し名人:2009/06/28(日) 16:34:40 ID:M6J6gfQL
>>415
なるほど。
なぜ、歩の点数を100から87にしたんでしょうか?
417名無し名人:2009/06/28(日) 20:12:24 ID:p4hrf87+
もまえらみんな頭良すぎ。
さっぱり理解できん。
みんなプログラマー?
418名無し名人:2009/06/28(日) 22:28:51 ID:Etq7GYUG
>>417
抽象的な思考能力の無い将棋脳には理解するのは無理
あきらめな
419名無し名人:2009/06/30(火) 11:52:35 ID:WazVL+B2
何事も経験だよ。
文面だけの判断だが、>>418のレベルでできるなら、>>417にもできる。
420名無し名人:2009/07/04(土) 07:37:45 ID:rEp9nuqR
>>416
1手+静止探索 から 2手+静止探索での学習に変えたら
歩の点数が87に減ったんでしょう
点数は他の駒との相対的なものでしかないですよ
421名無し名人:2009/07/09(木) 12:27:33 ID:aDwVCHA5
▲コンピュータ将棋スレッド51▽で質問したところ、こっちで聞いたほうがいいと言われたので
こちらで質問させていただきます。

ボナメソの機械学習の評価値のペナルティって全く理解できません。
何をどう勉強すれば理解できるようになるのでしょうか?
422名無し名人:2009/07/10(金) 06:14:57 ID:TQQGIHLu
↑L1正則化かL2正則化でぐぐれ
423名無し名人:2009/07/12(日) 06:48:16 ID:rpLNCxl9
>>421
Bona4はL1だけだから解りやすいよ

L1の場合、
速さ=速さ-0.05*|加速度|

※||は値の正負だけを返す(1か-1)

L1はつねに固定の値になる(上の場合0.05か-0.05)
ということは、速さが0.05を越えない場合は0になる。
逆にいうと0.05以内は誤差として0にしてしまうので、
学習要素が0になりやすい
424名無し名人:2009/07/12(日) 17:14:04 ID:c993CBzE
>>423
> 速さ=速さ-0.05*|加速度|

速さというのは、一体何なのでしょうか?
425名無し名人:2009/07/12(日) 18:48:33 ID:nvvG+shS
学習の速さ
426名無し名人:2009/07/12(日) 19:33:20 ID:EL9sHiBw
座標値を時間微分したもの
427名無し名人:2009/07/13(月) 03:42:25 ID:MwDXuxxq
拘束条件の意味が分かりません。
あれは一体何者なのでしょうか?
428名無し名人:2009/07/14(火) 07:42:07 ID:SXdXg7+Q
>>427
Bona4はL1だけだから拘束条件はもうないよ
論文のことを言っているのなら、

抽象的になるけど、拘束条件とは
例えば、東京から大阪に車で移動するとして、
なにも拘束が無いなら、一般道だけを使う場合も含めて
選択肢が変動するが、

予め、高速道路を使うことを拘束しておけば、
基本的に高速道路を走ることになるので、素早く正解に行きやすい

429名無し名人:2009/07/14(火) 08:00:46 ID:SXdXg7+Q
>>424
速さはたとえで、

wがある位置でのある駒の位置評価の配列
dwは、位置評価を棋譜を使って微分を集計した配列

int v=w[ pos ];
float dv=dw[ pos ];

if( v > 0 ) { dv += FV_PENALTY; }
else if( v < 0 ) { dv -= FV_PENALTY; }

if( dv >= 0.0 ) w[ pos ]+=haba;
else
if( dv <= 0.0 ) w[ pos ]-=haba;

w[]が正ならdvに+補正、w[]が負ならdvに-補正
集計微分値が>=0なら、位置評価w[]を増加させ、
<0なら減らす

別にL1は無くても学習自体はできると思う。
430名無し名人:2009/08/01(土) 00:37:57 ID:CV2SzNWi
コンパイル試したけど
nmakeはdata.cでいきなりエラー
MinGWはthread.cでエラー
で俺の夏は終わった
431名無し名人:2009/08/06(木) 08:19:03 ID:oh4NOHl9
vc++でビルドしてみたけど、csa将棋が必須?
コマンドラインで動かないの?

と思ってgccでもビルドしてみたけど使い方がわからん
bonanzaをじっこうすると
-su: bonanza: command not found
と表示される。これどうやって使うの?
432名無し名人:2009/08/06(木) 22:03:20 ID:oh4NOHl9
>>431
あかん。ぼけとったわ。
./bonanzaで動いた。pathが通ってなかったよ
433名無し名人:2009/08/08(土) 01:30:26 ID:zi7nYuKM
>432
Linux/Unixに慣れてないとついやっちゃうよね。
カレント・ディレクトリにEXEが有ってもパス指定しないと
いけないと言うのはMS-DOS上がりには分かりにくい。

俺もそのミスやったわ。しかも、シバーラク悩んじまったw。
434名無し名人:2009/08/08(土) 22:49:45 ID:1YpEd4NH
su
rm -rf /
435名無し名人:2009/08/09(日) 04:09:50 ID:S1hZVwoL
>>434
$ sudo rm -rf /
436名無し名人:2009/08/24(月) 14:42:25 ID:GNd2eYGJ
このスレが伸びると本スレが停滞し
本スレが伸びるとこのスレが停滞する
437名無し名人:2009/09/13(日) 17:09:30 ID:YQwmoggz
hosyu
438名無し名人:2009/09/18(金) 22:30:58 ID:qccSdL7W
hosyu
439名無し名人:2009/09/21(月) 05:20:03 ID:0HVFGDX0
あげ
440名無し名人:2009/09/21(月) 08:33:34 ID:dhYrCBdA
詰将棋メモで知ったので貼っておく

Bonanzaソース完全解析ブログ
http://d.hatena.ne.jp/LS3600/
441名無し名人:2009/09/23(水) 19:41:27 ID:6S1DVf3Y
fv.binの評価値をバイナリエディタで変更とかできるのでしょうか?
例えば、評価値が小さいのをまとめて0にするとかしてみたいのですが。。
442名無し名人:2009/09/23(水) 19:55:50 ID:0HilH0Ti
>>441
もちろん、できるよ。

値は符号付き16bitなのでファイルを普通にバイナリモードでfopenして、2バイトずつ取り出して
絶対値が一定以下なら0にしながら書き出せばいいのでは。
443名無し名人:2009/09/23(水) 20:40:59 ID:Tq3OFY2A
>442
>441は「バイナリ・エディタでまとめて評価値を変更したい」と言ってるのではあるまいか?

だとするとそんな、なんでもできる器用なエディタはなかなか無いとオモ。
結局、Cか何かでプロウラムを書く必要があると言う事になりそう。
444名無し名人:2009/09/24(木) 00:45:40 ID:Blfo6C6u
>>441
読むのはこれでできるので、修正後fv.binに書き出せばOK

enum {
fe_end = 1476,
nsquare = 81,
pos_n = fe_end * ( fe_end+1 )/2 ,
kkp_end = 738,
}

short pc_on_sq[nsquare][pos_n];
short kkp[nsquare][nsquare][kkp_end];

pf = fopen( "fv.bin", "rb" );

size = nsquare * pos_n;
fread( pc_on_sq, sizeof(short), size, pf );

size = nsquare * nsquare * kkp_end;
fread( kkp, sizeof(short), size, pf );

iret = fclose( pf );
445名無し名人:2009/10/16(金) 00:10:27 ID:SO+t7GDZ
縮小版の、1相当のものにデグレードしてよ、誰か

KKPとKPPだっけ、その片方だけにしてfv.binをごっそりシェイプアップ
できるんじゃないの?

ファイルサイズがこんなに小さいのにこんなに強い、そういうの希望
fv.binが巨大すぎるのイラネ
446名無し名人:2009/10/27(火) 10:48:23 ID:CNZYs9Bg
>>445
> KKPとKPPだっけ、その片方だけにしてfv.binをごっそりシェイプアップ

そんなことすると桁違いに弱くなるけどな。
447名無し名人:2009/10/27(火) 11:05:31 ID:C/vpVgHc
全然使ってないスレ落とせよ
448名無し名人:2009/11/03(火) 04:19:50 ID:yV2gWDrj
Bonanzaの手駒の優劣比較のコードにバグがあるらしいんだけど、これって本当?


Bonanzaの手駒の優劣比較にはあまり知られていない技法が使われている
http://d.hatena.ne.jp/LS3600/20091103
449名無し名人:2009/12/01(火) 23:26:34 ID:TNg/lCVr
はてな
450名無し名人:2009/12/02(水) 10:25:47 ID:OrsNh0Qw
うぜえ
451名無し名人:2009/12/06(日) 18:00:53 ID:xbVLrNIw
bonaもブーム去り気味か
452名無し名人:2009/12/06(日) 19:24:24 ID:PSwrgyCf
>>448
OOに例えると
グラ…いやミスター・ブシドー、
みたいなサイトだなそこ
453名無し名人:2009/12/15(火) 22:59:55 ID:VMzQH+do
>>448
そいつはコンピュータ将棋スレで指手差分生成や64ビットの件で
下級プログラマ見つけてはバカだの阿保だの罵って喜んでる
しょーもない人間だから関わらない方がいいよ
そのダイアリーでも上から目線で他のプログラマこき下ろしてるでしょ
454名無し名人:2009/12/15(火) 23:06:06 ID:r9emWBBJ
>>453
いまごろ1ヶ月以上も前の書き込みにレスして必死だな、お前。
455名無し名人:2009/12/17(木) 20:34:35 ID:GjApaPAI
2chはこういう粘着質の性質の悪いやつが多いから
もりあがらねーよな

てかLS3600はどうかんがえてもやねう(ry
456名無し名人
嫁=納期遅延寸前で神経質になっているクライアント