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)...