My Project
piecePair.h
Go to the documentation of this file.
1/* piecePair.h
2 */
3#ifndef OSL_EVAL_PIECEPAIR_H
4#define OSL_EVAL_PIECEPAIR_H
5
6#include "osl/eval/weights.h"
9#include <iostream>
10
11namespace osl
12{
13 namespace eval
14 {
15 namespace ml
16 {
18 {
19 public:
20 enum {
24 DIM = plain_table_size + x_table_size + y_table_size, // 14 * 12 * PTYPEO_SIZE * PTYPEO_SIZE
25 };
26
27 static int eval(const NumEffectState&, const Weights&);
28 template<int Direction, int Offset>
29 static int sum12One(const Piece *basePtr,const int *xbase, const int *ybase);
30 static int sum12(NumEffectState const& state,Square base,PtypeO ptypeO);
31 template<int Direction, int Offset>
32 static int adjust12One(const Piece *basePtr,const int *xbase1, const int *ybase1,const int *xbase2, const int *ybase2);
33 static int adjust12(NumEffectState const& state,Square base,PtypeO pos,PtypeO neg);
34
35 static int evalWithUpdate(const NumEffectState& state, Move moved, int last_value, const Weights& values);
36 static int evalWithUpdateCompiled(const NumEffectState& state, Move moved, int last_value);
37
38 static int pieceValue(const NumEffectState& state, Piece p, const Weights& values);
39 static int pieceValueDouble(const NumEffectState& state, Piece p, const Weights&);
40 static int weight(Player attack, int index, const Weights& values)
41 {
42 return osl::eval::delta(attack) * values.value(index);
43 }
45 static index_t index(int offset_id, Piece p, Piece q);
46 static index_t index(int offset_id, Square p0, PtypeO o0, Square p1, PtypeO o1);
47
48 static int value(int offset_id, Piece p, Piece q, const Weights& values)
49 {
50 assert(p.isOnBoard() && q.isOnBoard());
51 return value(offset_id, p.square(), p.ptypeO(), q.square(), q.ptypeO(), values);
52 }
53 static int value(int offset_id, Piece p, Square p1, PtypeO o1, const Weights& values)
54 {
55 return value(offset_id, p.square(), p.ptypeO(), p1, o1, values);
56 }
57 static int value(int offset_id, Square p0, PtypeO o0, Square p1, PtypeO o1, const Weights& values)
58 {
59 assert(p0 != p1);
60 index_t idx = index(offset_id, p0, o0, p1, o1);
61 assert(idx[0] != 0); // do not forget to call init()
62 int ret = 0;
63 for (int i=0; i<3; ++i)
64 ret += (idx[i] > 0) ? values.value(idx[i]) : -values.value(-idx[i]);
65 return ret;
66 }
67
68 static void init();
69 static void sanitize(Weights& values);
71 static void compile(const Weights& values);
72 static int valueCompiled(int offset_id, Piece p, Square p1, PtypeO o1)
73 {
74 return valueCompiled(offset_id, p.square(), p.ptypeO(), p1, o1);
75 }
76 static int valueCompiled(int offset_id, Square p0, PtypeO o0, Square p1, PtypeO o1);
77
78 // 内部用
79 struct IndexTable : public CArray3d<signed short, 12, PTYPEO_SIZE, PTYPEO_SIZE>
80 {
81 IndexTable();
82 void fillBW(int index, int dir, Ptype p0, Ptype p1);
84 void fillSame(int index, int dir, Ptype p0, Ptype p1);
86 void fillDiffer(int index, int dir, Ptype p0, Ptype p1);
87 static int pindex(Player player, Ptype ptype)
88 {
89 return ptypeOIndex(newPtypeO(player, ptype));
90 }
91 void amplify(int base);
92 };
95 static const CArray<Offset, 12> offsets; // offset_id -> Offset
96 };
97 }
98 }
99}
100
101
102#endif /* OSL_EVAL_ATTACKKING_H */
103// ;;; Local Variables:
104// ;;; mode:c++
105// ;;; c-basic-offset:2
106// ;;; End:
圧縮していない moveの表現 .
利きを持つ局面
PtypeO ptypeO() const
Definition basic_type.h:824
const Square square() const
Definition basic_type.h:832
bool isOnBoard() const
Definition basic_type.h:985
static int value(int offset_id, Square p0, PtypeO o0, Square p1, PtypeO o1, const Weights &values)
Definition piecePair.h:57
static int valueCompiled(int offset_id, Piece p, Square p1, PtypeO o1)
Definition piecePair.h:72
static int evalWithUpdate(const NumEffectState &state, Move moved, int last_value, const Weights &values)
Definition piecePair.cc:461
static IndexTable plain_table
Definition piecePair.h:93
static int evalWithUpdateCompiled(const NumEffectState &state, Move moved, int last_value)
Definition piecePair.cc:595
static int weight(Player attack, int index, const Weights &values)
Definition piecePair.h:40
static index_t index(int offset_id, Piece p, Piece q)
Definition piecePair.cc:440
static int value(int offset_id, Piece p, Piece q, const Weights &values)
Definition piecePair.h:48
static int sum12One(const Piece *basePtr, const int *xbase, const int *ybase)
Definition piecePair.cc:529
static const CArray< Offset, 12 > offsets
Definition piecePair.h:8
static int sum12(NumEffectState const &state, Square base, PtypeO ptypeO)
Definition piecePair.cc:538
static int pieceValue(const NumEffectState &state, Piece p, const Weights &values)
Definition piecePair.cc:669
static int adjust12One(const Piece *basePtr, const int *xbase1, const int *ybase1, const int *xbase2, const int *ybase2)
Definition piecePair.cc:560
CArray< int, 3 > index_t
Definition piecePair.h:44
static int adjust12(NumEffectState const &state, Square base, PtypeO pos, PtypeO neg)
Definition piecePair.cc:572
static void compile(const Weights &values)
values を展開してクラス全体で使う
Definition piecePair.cc:365
static CArray< IndexTable, 10 > y_table
Definition piecePair.h:94
static void sanitize(Weights &values)
Definition piecePair.cc:396
static int pieceValueDouble(const NumEffectState &state, Piece p, const Weights &)
Definition piecePair.cc:650
static int value(int offset_id, Piece p, Square p1, PtypeO o1, const Weights &values)
Definition piecePair.h:53
static CArray< IndexTable, 10 > x_table
Definition piecePair.h:94
int delta(Player p)
playerにとってちょっと高い値
Definition evalTraits.h:104
Ptype
駒の種類を4ビットでコード化する
Definition basic_type.h:84
unsigned int ptypeOIndex(PtypeO ptypeo)
Definition basic_type.h:205
Player
Definition basic_type.h:8
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
Definition basic_type.h:199
PtypeO newPtypeO(Player player, Ptype ptype)
Definition basic_type.h:211
static int pindex(Player player, Ptype ptype)
Definition piecePair.h:87
void fillSame(int index, int dir, Ptype p0, Ptype p1)
for same owner
Definition piecePair.cc:332
void fillBW(int index, int dir, Ptype p0, Ptype p1)
Definition piecePair.cc:323
void fillDiffer(int index, int dir, Ptype p0, Ptype p1)
for different owner
Definition piecePair.cc:338
int value(size_t index) const
Definition weights.h:27