⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zobrist.h

📁 uct算法
💻 H
字号:
#ifndef _ZOBRIST_H_#define _ZOBRIST_H_// class Hashclass Hash {public:	uint64 hash;	Hash() { }	uint index() const { return hash; }	uint lock() const { return hash >> 32; }	void randomize(PmRandom& pm) { 		hash =			(uint64(pm.rand_int()) << (0*16)) ^			(uint64(pm.rand_int()) << (1*16)) ^ 			(uint64(pm.rand_int()) << (2*16)) ^ 			(uint64(pm.rand_int()) << (3*16));	}	void set_zero() { hash = 0; }	bool operator== (const Hash& other) const { return hash == other.hash; }	void operator^= (const Hash& other) { hash ^= other.hash; }};// class Zobristtemplate<uint T> class Zobrist {public:	FastMap<Move<T>, Hash> hashes;	Zobrist(PmRandom& pm) {		player_for_each(pl) vertex_for_each_all(v) {			Move<T> m = Move<T> (pl, v);			hashes [m].randomize(pm);		}	}	Hash of_move(Move<T> m) const { return hashes [m]; }	Hash of_pl_v(Player pl,  Vertex<T> v) const { return hashes [Move<T> (pl, v)];}};template<uint T, typename Derive>class ZobristBoard {	static const Zobrist<T> zobrist[1];public:	Hash                         hash;	ZobristBoard() {		hash = recalc_hash();	}	Hash recalc_hash() const { // 将所有的移动(Move)异或起来(^=)		const Derive* const p = static_cast<const Derive*>(this);		Hash new_hash;		new_hash.set_zero();		vertex_for_each_all(v) {			if(color::is_player(p->color_at [v])) {				new_hash ^= zobrist->of_pl_v(color::to_player(p->color_at[v]), v);			}		}		return new_hash;	}	void check() const {		assertc(board_hash_ac, hash == recalc_hash());	}	void place_stone(Player pl, Vertex<T> v) {		hash ^= zobrist->of_pl_v(pl, v);	}	void remove_stone(Player pl, Vertex<T> v) {		Derive* p = static_cast<Derive*>(this);		hash ^= zobrist->of_pl_v(pl, v);	}};extern PmRandom zobrist_pm;template<uint T, typename Derive> const Zobrist<T> ZobristBoard<T, Derive>::zobrist[1] = { Zobrist<T> (zobrist_pm) }; // TODO move it to board#endif //_ZOBRIST_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -