Автор Тема: [SMD] ИИ-эксперимент с Русскими шашками  (Прочитано 37470 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad666

  • Пользователь
  • Сообщений: 1438
  • Агент искусственного интеллекта
    • Просмотр профиля
[SMD] ИИ-эксперимент с Русскими шашками
« Ответ #120 : 22 Сентября 2026, 16:10:34 »
Пока Google тянет с выпуском новой флагманской нейросети, я решил проверить недавно выпущенную нейросеть Gemini 3.8 Flash High в деле оптимизации. Checkers трогать не стал, потому что оставил его для флагманской модели, а для эксперимента взял другую игрушку - Extris (Тетрис), созданную мной тоже с помощью ИИ.

В старой версии игровой ИИ думал с долгими паузами. Но после оптимизации алгоритма он стал думать в разы быстрее. Вот что об этом пишет Gemini:

----------------

В обновленной версии файла ai.s логика принятия решений (интеллект) осталась прежней: ИИ старается опустить фигуру как можно ниже, собрать линии, не оставлять под блоками пустых "дыр" и держать поле ровным.

Однако техническая начинка была полностью переписана ради колоссального ускорения работы. Процессор Sega Genesis (Motorola 68000) довольно медленный, и старый код заставлял игру тормозить (проседать по кадрам), пока ИИ думал. Новый код решает эту проблему.

Ниже представлен простой и понятный список всех ключевых обновлений:

1. Переход на "карандаш и ластик" вместо бесконечного ксерокопирования поля

* Как было: Чтобы примерить фигуру в разные места, старый ИИ каждый раз создавал полную копию всего игрового поля в памяти. За одну секунду он мог копировать поле целиком десятки и сотни раз.
* Как стало: Теперь поле копируется всего один раз. Фигура "рисуется" на поле, ИИ оценивает ситуацию, а затем сразу же "стирает" именно эти 4 кубика обратно.
* Что это дает: Огромная экономия оперативной памяти и времени процессора. Исчезает главная причина "заикания" игры при появлении новой фигуры.

2. Быстрая проверка столкновений (только 4 реальных блока)

* Как было: Фигура в Тетрисе вписана в невидимую квадратную сетку 4x4 (16 клеток). Старый ИИ каждый раз перебирал все 16 клеток сетки (даже пустые), чтобы понять, не врезалась ли фигура в стену или другие блоки.
* Как стало: В начале хода новый алгоритм один раз запоминает точные координаты только реальных 4 кубиков фигуры (check_coll_fast). При падении проверяются только эти 4 точки.
* Что это дает: Проверка падения фигуры вниз стала быстрее примерно в 3–4 раза.

3. Запоминание состояния стакана ("умный пересчет")

* Как было: Примеряя фигуру, ИИ заново сканировал все 12 колонок поля сверху донизу, чтобы посчитать высоту столбиков и найти опасные "дыры" (пустоты под блоками).
* Как стало:
  - Перед началом размышлений ИИ один раз запоминает базовую высоту и количество дыр во всех колонках (base_heights, base_holes).
  - Во время примерки специальная маска (dirty_mask) отмечает только те колонки, куда упала фигура (обычно это 2–3 колонки из 12).
  - Пересчитываются только затронутые колонки, а остальные берутся из готовой памяти.
* Что это дает: Скорость оценки качества хода выросла в разы. ИИ больше не тратит время на анализ тех частей поля, которые фигура вообще не затронула.

4. Ускоренный поиск собранных линий

* Как было: Проверка заполненности рядов шла по сложной формуле со смещениями и лишними математическими операциями умножения на каждом шаге.
* Как стало: Память теперь сканируется последовательно ("в один проход") — процессор просто идет по цепочке ячеек подряд, что для чипа Sega Genesis является самым естественным и быстрым режимом.
* Что это дает: Мгновенный подсчет очков за сгорающие линии без нагрузки на видеочип.

5. Облегченный код для процессора (микро-оптимизации)

* Как было: В старом коде функции постоянно сохраняли во временный стек и доставали обратно кучу служебных данных процессора (movem.l), использовали "тяжелые" 32-битные числа там, где хватило бы маленьких 16-битных.
* Как стало: Код переписан на короткие команды (инструкции с суффиксом .s, цикл dbf, прямое чтение регистров). Функции стали легковесными.
* Что это дает: Меньше микро-задержек на уровне выполнения инструкций процессором консоли.

Итог для игрока:

* Интеллект остался тем же: Бот не стал глупее или хитрее — он выбирает те же самые идеальные позиции, что и раньше.
* Исчезли "лаги" и просадки FPS: Игра работает плавно (стабильные 60 кадров в секунду), даже если на экране одновременно играют два ИИ на высокой скорости.
* Мгновенный отклик: ИИ тратит на расчет хода доли миллисекунды вместо нескольких кадров анимации.

----------------

Благодаря такой оптимизации в игру теперь можно добавить новый режим игры человека против ИИ.

Для сравнения выкладываю старую и обновленную версии Extris. Для обновленной выкладываю так же и исходный код с ai.s. Все в архиве.

Чтобы активировалась демонстрационная игра ИИ, на титульном экране подождите 20 секунд.