-
Notifications
You must be signed in to change notification settings - Fork 395
Open
Description
void PCfrSolver::findGameSpecificIsomorphisms() {
// hand isomorphisms
vector<Card> board_cards = Card::long2boardCards(this->initial_board_long);
for(int i = 0;i <= 1;i ++){
vector<PrivateCards>& range = i == 0?this->range1:this->range2;
for(std::size_t i_range = 0;i_range < range.size();i_range ++) {
PrivateCards one_range = range[i_range];
uint32_t range_hash[4]; // four colors, hash of the isomorphisms range + hand combos
for(int i = 0;i < 4;i ++)range_hash[i] = 0;
for (int color = 0; color < 4; color++) {
for (Card one_card:board_cards) {
if (one_card.getCardInt() % 4 == color) {
range_hash[color] = range_hash[color] | (1 << (one_card.getCardInt() / 4));
}
}
}
for (int color = 0; color < 4; color++) {
for (int one_card_int:{one_range.card1,one_range.card2}) {
if (one_card_int % 4 == color) {
range_hash[color] = range_hash[color] | (1 << (one_card_int / 4 + 16));
}
}
}
// TODO check whethe hash is equal with others
}
}
//
uint16_t color_hash[4];
for(int i = 0;i < 4;i ++)color_hash[i] = 0;
for (Card one_card:board_cards) {
int rankind = one_card.getCardInt() % 4;
int suitind = one_card.getCardInt() / 4;
color_hash[rankind] = color_hash[rankind] | (1 << suitind);
}
for(int i = 0;i < 4;i ++){
this->color_iso_offset[0][i] = 0;
for(int j = 0;j < i;j ++){
if(color_hash[i] == color_hash[j]){
this->color_iso_offset[0][i] = j - i;
continue;
}
}
}
for(std::size_t deal = 0;deal < this->deck.getCards().size();deal ++) {
uint16_t color_hash[4];
for(int i = 0;i < 4;i ++)color_hash[i] = 0;
// chance node isomorphisms
for (Card one_card:board_cards) {
int rankind = one_card.getCardInt() % 4;
int suitind = one_card.getCardInt() / 4;
color_hash[rankind] = color_hash[rankind] | (1 << suitind);
}
Card one_card = this->deck.getCards()[deal];
int rankind = one_card.getCardInt() % 4;
int suitind = one_card.getCardInt() / 4;
color_hash[rankind] = color_hash[rankind] | (1 << suitind);
for (int i = 0; i < 4; i++) {
this->color_iso_offset[deal + 1][i] = 0;
for (int j = 0; j < i; j++) {
if (color_hash[i] == color_hash[j]) {
this->color_iso_offset[deal + 1][i] = j - i;
continue;
}
}
}
}
}
Metadata
Metadata
Assignees
Labels
No labels