Skip to content

Commit

Permalink
Merge pull request #37 from Agony5757/Develop-EncoderV2
Browse files Browse the repository at this point in the history
Develop encoder v2
  • Loading branch information
Agony5757 authored Jan 9, 2025
2 parents b2bac69 + 33d31db commit 78a9b93
Show file tree
Hide file tree
Showing 26 changed files with 2,797 additions and 887 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ jobs:

- name: Build
# Build your program with the given configuration
run: sudo python setup.py install
run: sudo pip install .

- name: Test
run: python -c "import pymahjong as pm;pm.test()" && wget https://github.com/Agony5757/mahjong/releases/download/v1.0.0/paipuxmls.7z && 7z x paipuxmls.7z && python -c "import pymahjong as pm;pm.paipu_replay(mode='debug')"
run: python -c "import pymahjong as pm;pm.test()" && wget https://github.com/Agony5757/mahjong/releases/download/v1.0.4/paipuxmls.7z && 7z x paipuxmls.7z && python -c "import pymahjong as pm;pm.paipu_replay(mode='debug')"

48 changes: 31 additions & 17 deletions Mahjong/Encoding/TrainingDataEncodingV1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -256,23 +256,26 @@ namespace TrainingDataEncoding {
for (auto& sa : actions) {
switch (sa.action) {
case BaseAction::Discard:
data[int(sa.correspond_tiles[0]->tile)] = 1;
if (sa.correspond_tiles[0]->red_dora)
data[int(sa.correspond_tiles[0]->tile) / 9 + 34] = 1;
else
data[int(sa.correspond_tiles[0]->tile)] = 1;
break;
case BaseAction::AnKan:
data[38] = 1;
data[45] = 1;
break;
case BaseAction::KaKan:
data[40] = 1;
data[47] = 1;
break;
case BaseAction::Riichi:
data[41] = 1;
data[45] = 1;
data[48] = 1;
data[52] = 1;
break;
case BaseAction::Tsumo:
data[43] = 1;
data[50] = 1;
break;
case BaseAction::Kyushukyuhai:
data[44] = 1;
data[51] = 1;
break;
default:
throw runtime_error("Bad SelfAction (while encoding).");
Expand All @@ -285,24 +288,35 @@ namespace TrainingDataEncoding {
for (auto& ra : actions) {
switch (ra.action) {
case BaseAction::Pass:
data[46] = 1;
data[53] = 1;
break;
case BaseAction::Chi:
if (action_tile > ra.correspond_tiles[0]->tile)
if (action_tile < ra.correspond_tiles[1]->tile) data[35] = 1; // middle
else data[36] = 1; // right
else data[34] = 1; // left
if (action_tile > ra.correspond_tiles[0]->tile){
if (action_tile < ra.correspond_tiles[1]->tile){
data[38] = 1; // middle
data[41] = 1; // middle_use_red_dora
}
else{
data[39] = 1; // right
data[42] = 1; // right_use_red_dora
}
}
else{
data[37] = 1; // left
data[40] = 1; // left_use_red_dora
}
break;
case BaseAction::Pon:
data[37] = 1;
data[43] = 1;
data[44] = 1; // use red dora
break;
case BaseAction::Kan:
data[39] = 1;
data[46] = 1;
break;
case BaseAction::Ron:
case BaseAction::ChanKan:
case BaseAction::ChanAnKan:
data[42] = 1;
data[49] = 1;
break;
default:
throw runtime_error("Bad ResponseAction (while encoding).");
Expand Down Expand Up @@ -342,8 +356,8 @@ namespace TrainingDataEncoding {
void encode_actions_vector_riichi_step2(dtype* data)
{
array<dtype, n_actions> buffer = { 0 };
buffer[41] = 1;
buffer[46] = 1;
buffer[48] = 1;
buffer[52] = 1;
memcpy(data, buffer.data(), buffer.size());
}

Expand Down
2 changes: 1 addition & 1 deletion Mahjong/Encoding/TrainingDataEncodingV1.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ namespace TrainingDataEncoding {
constexpr size_t n_row = size_hand + size_fulu * size_player + size_river * size_player + size_field + size_last + size_action + size_hand * (size_player - 1);
constexpr size_t n_col = n_tile_types;

constexpr size_t n_actions = 47;
constexpr size_t n_actions = 54;

void encode_table(const Table& table, int pid, bool use_oracle, dtype* data);
void encode_table_riichi_step2(const Table& table, BaseTile riichi_tile, dtype* data);
Expand Down
Loading

0 comments on commit 78a9b93

Please sign in to comment.