EvaluationTest
by yasumodev
HTML
<textarea id="log"></textarea>
JavaScript
// 局面データ
var tree = {val:0, child:[]};
tree.child[0] = {val:1, child:[]};
tree.child[1] = {val:2, child:[]};
tree.child[0].child[0] = {val:0, child:[]};
tree.child[0].child[1] = {val:0, child:[]};
tree.child[1].child[0] = {val:0, child:[]};
tree.child[1].child[1] = {val:0, child:[]};
tree.child[0].child[0].child[0] = {val:500, child:[]};
tree.child[0].child[0].child[1] = {val:-200, child:[]};
tree.child[0].child[1].child[0] = {val:700, child:[]};
tree.child[0].child[1].child[1] = {val:300, child:[]};
tree.child[0].child[1].child[2] = {val:100, child:[]};
tree.child[1].child[0].child[0] = {val:200, child:[]};
tree.child[1].child[0].child[1] = {val:-100, child:[]};
tree.child[1].child[1].child[0] = {val:800, child:[]};
var MUGEN = 999999;
var DEPTH_MAX = 3;
var leaf_cnt = 0;
function get_valu(turn, depth, node, limit)
{
log_(sp(depth) + "turn:" + turn + " depth:" + depth + " limit:" + limit);
if(depth == DEPTH_MAX){
leaf_cnt++;
return node.val;
}
var best = turn? -MUGEN: +MUGEN;
var beta = +MUGEN; // 上限値
var alpha = -MUGEN; // 下限値
for(var i=0; i<node.child.length; i++)
{
var next_node = node.child[i];
// MAX探索
if(turn){
var valu = get_valu(!turn, depth+1, next_node, alpha);
log_(sp(depth) + "valu:" + valu);
// 下限値更新
if(valu > alpha){
alpha = valu;
}
// 探索打切
if(valu > limit){
log_(sp(depth) + "MAX-CUT:" + limit);
return limit;
}
// 最善評価更新
if(valu > best){
best = valu;
// 最善手を保存
if(depth == 0) {
node.best_move = i;
}
}
}
// MIN探索
else{
var valu = get_valu(!turn, depth+1, next_node, beta);
log_(sp(depth) + "valu:" + valu);
// 上限値更新
if(valu < beta){
beta = valu;
}
// 探索打切
if(valu < limit){
log_(sp(depth) + "MIN-CUT:" + limit);
return limit;
}
// 最善評価更新
if(valu < best){
best = valu;
}
}
}//end for
return best;
}
function sp(num) {
return " ".repeat(num*2);
}
function log_(msg)...