Надеюсь, это не слишком большой вопрос, но я просматриваю исходные коды Faile и TSCP, и я играю их друг против друга. Насколько я вижу, у двигателей много общего, но Faile ищет ~ 1,3 миллиона узлов в секунду, в то время как TSCP ищет только 300 тыс. Узлов в секунду.Почему Faile намного быстрее, чем простая шахматная программа (TSCP)? (Оптимизация шахматных движков)
Исходный код для faile можно найти здесь: http://faile.sourceforge.net/download.php. Исходный код TSCP можно найти здесь: http://www.tckerrigan.com/Chess/TSCP.
Просмотрев их, я вижу несколько сходств: оба используют представление массива (хотя Faile использует плату размера 144), оба используют альфа-бета-поиск с какой-то таблицей транспозиции, обе имеют очень похожие функции оценки. Основное различие, которое я могу найти, заключается в том, что Faile использует избыточное представление платы, также имея массивы местоположений фрагментов. Это означает, что когда ходы генерируются (по очень похожим функциям для обеих программ), Faile должен зацикливаться на меньшее количество плохих штук, при этом для этого массива стоит значительно меньше ресурсов.
Мой вопрос: почему существует 4-кратное различие в скорости этих двух программ? Кроме того, почему Faile последовательно избивает TSCP (я оцениваю примерно 200 ELO разностей, просто наблюдая за их ходами)? Для последнего это, по-видимому, связано с тем, что Фейл ищет несколько слоев глубже.
Спасибо за ответ. Я могу поделиться некоторыми исследованиями, которые я сделал с ними в то же время.Я думаю, что я нашел эту, пожалуй, самую большую причину, в то время как то, что вы сказали, является хорошей причиной, заключается в том, что, хотя сначала TSCP использует таблицы транспозиций, на самом деле это не так. Он создает ключ Zobrist, но использует его только для повтора путем повторения. Это означает, что он потенциально анализирует некоторые позиции много раз. Из того, что я прочитал, таблицы транспонирования могут составить 3-4-кратное увеличение производительности. –