Почему моя реализация так медленна по сравнению с другими?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему моя реализация так медленна по сравнению с другими?

Сообщение Anonymous »

Я сейчас работаю над шахматным двигателем, используя C ++. Сначала я начал с Python, но это было слишком медленно. Затем я перешел на C, но библиотека, которую я использовал, не была великолепна. Теперь я использую C ++ (с Lib от https://disservin.github.io/chess-libra ... /move.html), но кажется, что в моем коде есть ошибка, потому что вывод в настоящее время является:
Welcome to the Chess Engine!
Enter depth:
5

Testing position: r3k2r/p1ppqpb1/Bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPB1PPP/R3K2R b KQkq - 0 10
Best move overall: -125
Depth: 1 | Nodes: 37 | Time: 0.00164008s | Score: -125 | Score de base 445
Best move overall: 445
Depth: 2 | Nodes: 452 | Time: 0.0153926s | Score: 445 | Score de base 445
Best move overall: -65
Depth: 3 | Nodes: 3709 | Time: 0.0638264s | Score: -65 | Score de base 445
1
Best move overall: 440
Depth: 4 | Nodes: 28595 | Time: 0.269176s | Score: 440 | Score de base 445
Best move overall: 55
Depth: 5 | Nodes: 239462 | Time: 2.36422s | Score: 55 | Score de base 445
< /code>
, что действительно странно, поскольку мой код должен искать до глубины 5 примерно за 0,2 секунды. Я видел в видео приключений из Себастьяна Лаг, которое, с обрезкой и заказами альфа-бета и перемещением, он уже оценивает ту же позицию всего за 0,02 секунды. Я действительно запутался и надеюсь, что кто-то сможет мне помочь, потому что я внедрил таблицу транспозиции, Killer Moves, MVV-LVA и альфа-бета-обрезка-но мое выступление даже не близко к его. И он использует C#, даже C ++ (кстати, извините, если код сложно читать - я не привык к программированию в C ++.)! < /P>
#include "chess.hpp"

#include
#include
#include
#include
#include

const long long TABLE_SIZE = 1= depth && entry.key == key)
{
if (entry.flag == EXACT)
{
return entry.score;
}
else if (entry.flag == LOWERBOUND && entry.score >= beta)
{
return entry.score;
}
else if (entry.flag == UPPERBOUND && entry.score value)
{
value = score;
bestmove = m;
}
alpha = std::max(alpha,value);
if (alpha >= beta)
{
if (!b.isCapture(m))
{
if (killerMoves[depth][0] != m && killerMoves[depth][1] != m)
{
killerMoves[depth][1] = killerMoves[depth][0];
killerMoves[depth][0] = m;
}
}
break;
}
}
//std::cout

Подробнее здесь: https://stackoverflow.com/questions/796 ... d-to-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»