ආයුබෝවන්, අද මම ඔබට පෙන්වන්නට කැමති මා දිගු කලක් මුහුණ දුන් ගැටලුවකි… මට සම්භාව්ය තේරීම සමඟ Monte Carlo Tree Search භාවිත කිරීමට අවශ්ය විය, පුළුල් කරන්න, පිටුපස ප්රචාරණය සහ යනාදිය… මම මුහුණ දුන් ගැටලුව වූයේ මතකය කාන්දු වීමයි, සහ මම යම් කාලයක් සොයමින් සිටියේ මතකය එක් මට්ටමකින් අඩු කිරීමට සහ efficnet නිදහස් මතකය අඩු කිරීමට හොඳ විසඳුමකි. එය නිවැරදි කිරීම සඳහා, ඔබ උපරිම ගැඹුර ගණනය කළ යුතු අතර ගස පිළිවෙලට ගැඹුරේ සිට අඩු ගැඹුරට නැවත සකස් කළ යුතුය.. විවේකය කේත උදාහරණයේ පහත විස්තර කෙරේ. ස්තූතියි සහ විනෝද වන්න! :ඩී.
typedef struct ch_mcts_tree { struct ch_mcts_tree **children; struct ch_mcts_tree *parent; float *board; int parents; int player; int total_count; int count; int index; int *visit_count; float *value; float *prob; } ch_mcts_tree; int ch_calculate_depth(ch_mcts_tree* node) { if (node == NULL) return 0; int max_depth = 0; for (int i = 0; i < node->count; ++i) { if (node->children[i] != NULL) { int child_depth = ch_calculate_depth(node->children[i]); if (child_depth > max_depth) { max_depth = child_depth; } } } return max_depth + 1; } ch_mcts_tree* ch_free_mcts(ch_mcts_tree* root, int exclude_index) { if (root == NULL) return NULL; int* depths = (int*)CALLOC(root->count, sizeof(int)); for (int i = 0; i < root->count; ++i) { depths[i] = (i == exclude_index || root->children[i] == NULL) ? -1 : ch_calculate_depth(root->children[i]); } for (int pass = 0; pass < root->count; ++pass) { int max_depth = -1, max_index = -1; for (int i = 0; i < root->count; ++i) { if (depths[i] > max_depth) { max_depth = depths[i]; max_index = i; } } if (max_index != -1 && root->children[max_index] != NULL) { root->children[max_index] = ch_free_mcts(root->children[max_index], -1); depths[max_index] = -1; } } FREE(depths); if (root->visit_count) { FREE(root->visit_count); root->visit_count = NULL; } if (root->value) { FREE(root->value); root->value = NULL; } if (root->board) { FREE(root->board); root->board = NULL; } if (root->prob) { FREE(root->prob); root->prob = NULL; } if (root->children) { FREE(root->children); root->children = NULL; } FREE(root); return NULL; }