Я пытался добавить кеширование в свой минимаксный алгоритм для 4-строчного ИИ, но не смог сделать это правильно. После добавления кеширования алгоритм продолжает ломать и галлюцинировать коэффициенты. Реализация кэширования верна на 100%. Я пытался следовать предложениям из разных веток по одному и тому же вопросу, но не мог понять, как это работает, поэтому спросил в чате, но он дал мне другой ответ, поэтому я не знаю, что делать. Допустим, я закешировал некоторую позицию с ее альфа- и бета-значениями в конце поиска. После некоторых вычислений я попадаю в разумную позицию, но на этот раз у меня уже есть альфа и бета (и, следовательно, результат, в зависимости от того, кто делает ход). Что я должен делать дальше? Очевидно, что если значения одинаковы, я могу просто повторно использовать кэшированное значение, но что мне делать, если они не совпадают. Наверняка есть способ ускорить алгоритм с помощью кешированных значений.
Я пробовал просто загрузить позицию, найденную в кеше, — не сработало.
Я также пробовал кучу разных вещей, тут не повезло.
Хорошо, кто-то закрыл без причины, хотя я описал проблему и задал прямой вопрос. Вот моя минимаксная функция:
struct field
{
long long fir;
long long sec;
bool operator==(const field& other) const {
return sec == other.sec && fir == other.fir;
}
size_t operator()(const field& s) const {
return hash()(s.sec) ^ (hash()(s.fir 4){
auto it = cacheval.find({cfir, csec});
if(it != cacheval.end()){
int index = it->second;
if(resalpha[index] == alpha and resbeta[index] == beta)
return reseval[index];
isfound = true;
alpha = max(alpha, resalpha[index]);
beta = min(beta, resbeta[index]);
}
}
if(left4 > 0)
if(cw4(cfir, left4))
return depth;
if(left3 > 0)
if(cw3(cfir, left3))
return depth;
if(left5 > 0)
if(cw5(cfir, left5))
return depth;
if(left2 > 0)
if(cw2(cfir, left2))
return depth;
if(left6 > 0)
if(cw6(cfir, left6))
return depth;
if(left1 > 0)
if(cw1(cfir, left1))
return depth;
if(left7 > 0)
if(cw7(cfir, left7))
return depth;
if(depth == 0)
return 0;
int res = -100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, false, beta, alpha, cfir | (1LL 0)
if(cw6(csec, left6))
return -depth;
if(left1 > 0)
if(cw1(csec, left1))
return -depth;
if(left7 > 0)
if(cw7(csec, left7))
return -depth;
if(depth == 0)
return 0;
int res = 100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, true, beta, alpha, cfir, csec | (1LL
Подробнее здесь: https://stackoverflow.com/questions/783 ... ta-pruning
Кэширование с помощью минимаксного алгоритма с альфа/бета-обрезкой ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1713381625
Anonymous
Я пытался добавить кеширование в свой минимаксный алгоритм для 4-строчного ИИ, но не смог сделать это правильно. После добавления кеширования алгоритм продолжает ломать и галлюцинировать коэффициенты. Реализация кэширования верна на 100%. Я пытался следовать предложениям из разных веток по одному и тому же вопросу, но не мог понять, как это работает, поэтому спросил в чате, но он дал мне другой ответ, поэтому я не знаю, что делать. Допустим, я закешировал некоторую позицию с ее альфа- и бета-значениями в конце поиска. После некоторых вычислений я попадаю в разумную позицию, но на этот раз у меня уже есть альфа и бета (и, следовательно, результат, в зависимости от того, кто делает ход). Что я должен делать дальше? Очевидно, что если значения одинаковы, я могу просто повторно использовать кэшированное значение, но что мне делать, если они не совпадают. Наверняка есть способ ускорить алгоритм с помощью кешированных значений.
Я пробовал просто загрузить позицию, найденную в кеше, — не сработало.
Я также пробовал кучу разных вещей, тут не повезло.
Хорошо, кто-то закрыл без причины, хотя я описал проблему и задал прямой вопрос. Вот моя минимаксная функция:
struct field
{
long long fir;
long long sec;
bool operator==(const field& other) const {
return sec == other.sec && fir == other.fir;
}
size_t operator()(const field& s) const {
return hash()(s.sec) ^ (hash()(s.fir 4){
auto it = cacheval.find({cfir, csec});
if(it != cacheval.end()){
int index = it->second;
if(resalpha[index] == alpha and resbeta[index] == beta)
return reseval[index];
isfound = true;
alpha = max(alpha, resalpha[index]);
beta = min(beta, resbeta[index]);
}
}
if(left4 > 0)
if(cw4(cfir, left4))
return depth;
if(left3 > 0)
if(cw3(cfir, left3))
return depth;
if(left5 > 0)
if(cw5(cfir, left5))
return depth;
if(left2 > 0)
if(cw2(cfir, left2))
return depth;
if(left6 > 0)
if(cw6(cfir, left6))
return depth;
if(left1 > 0)
if(cw1(cfir, left1))
return depth;
if(left7 > 0)
if(cw7(cfir, left7))
return depth;
if(depth == 0)
return 0;
int res = -100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, false, beta, alpha, cfir | (1LL 0)
if(cw6(csec, left6))
return -depth;
if(left1 > 0)
if(cw1(csec, left1))
return -depth;
if(left7 > 0)
if(cw7(csec, left7))
return -depth;
if(depth == 0)
return 0;
int res = 100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, true, beta, alpha, cfir, csec | (1LL
Подробнее здесь: [url]https://stackoverflow.com/questions/78325104/caching-with-minimax-algorithm-with-alpha-beta-pruning[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия