allow some randomness

This commit is contained in:
2023-10-02 14:34:04 +08:00
parent aa717979b7
commit 4b209bba68
2 changed files with 19 additions and 4 deletions

View File

@ -122,6 +122,7 @@ for i in range(0,10):
fn.close()
print(lines)
total_round+=1
if len(lines)>0:
if lines[0]=='YOU WIN!\n':
win_round+=1
print("win rate: "+str(win_round/total_round),win_round,total_round)
@ -168,6 +169,7 @@ while True:
# check the output
print(lines)
total_round+=1
if len(lines)>0:
if lines[0]=='YOU WIN!\n':
win_round+=1
print("win rate: "+str(win_round/total_round),win_round,total_round)

View File

@ -57,6 +57,7 @@ void InitGame() {
namespace Client {
const unsigned int RndSeed = std::random_device{}();
std::mt19937 RawRnd(RndSeed); // a basic random generator
const double RawRnd_max = 4294967295.0;
const int max_size = 35;
char game_map[max_size][max_size]; // store the raw game map in format of char
std::queue<std::pair<int, int> >
@ -489,6 +490,9 @@ std::pair<int, int> SimpleGuess() {
}
}
std::pair<int, int> best_guess = TotalRandomGuess();
bool allow_a_guess = true;
const double guess_begin_consideration_ratio = 0.95;
const double guess_tightness_parameter = 10;
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
if (map_status[i][j] == 0) {
@ -499,6 +503,15 @@ std::pair<int, int> SimpleGuess() {
if (this_prob < current_prob) {
best_guess.first = i;
best_guess.second = j;
} else if ((double)(total_known) / (rows * columns) >
guess_begin_consideration_ratio &&
allow_a_guess) {
if (exp(-(this_prob - current_prob) * guess_tightness_parameter) <
RawRnd() / RawRnd_max) {
best_guess.first = i;
best_guess.second = j;
allow_a_guess = false;
}
}
}
return best_guess;