Автор Тема: Нейросети, ИИ и всё, что с ними связано  (Прочитано 3566 раз)

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

Оффлайн StRyK

  • Пользователь
  • Сообщений: 1302
  • Пол: Мужской
    • ВКонтакте
    • Steam
    • Youtube
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #270 : 28 Июль 2025, 15:48:14 »
Vlad666, Теперь сделай полупрозрачный узор на шахматной доске с этой картинкой

Оффлайн Vlad666

  • Пользователь
  • Сообщений: 558
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #271 : 28 Июль 2025, 16:11:53 »
Vlad666, Теперь сделай полупрозрачный узор на шахматной доске с этой картинкой

Прозрачность меняется изменением значения параметра "opacity" в блоке CSS. Картинка должна лежать в папке с html файлом.
« Последнее редактирование: 28 Июль 2025, 16:24:16 от Vlad666 »

Оффлайн StRyK

  • Пользователь
  • Сообщений: 1302
  • Пол: Мужской
    • ВКонтакте
    • Steam
    • Youtube
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #272 : 28 Июль 2025, 16:40:38 »
Прозрачность меняется изменением значения параметра "opacity" в блоке CSS. Картинка должна лежать в папке с html файлом.
Круто, спасибо)

Теперь замути онлайн в игре

Оффлайн Vlad666

  • Пользователь
  • Сообщений: 558
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #273 : 28 Июль 2025, 19:38:30 »
Теперь замути онлайн в игре

Готово. Теперь в игре два режима: против ИИ и против человека по интернету.

Автор дополнения: Gemini 2.5 Pro.

Оффлайн MRGYV

  • Пользователь
  • Сообщений: 35
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #274 : Вчера в 09:30:24 »
Готово. Теперь в игре два режима: против ИИ и против человека по интернету.
Круто :thumbup:

Оффлайн Vlad666

  • Пользователь
  • Сообщений: 558
    • Просмотр профиля
Нейросети, ИИ и всё, что с ними связано
« Ответ #275 : Вчера в 14:12:28 »
Gemini 2.5 Pro добавил в код соблюдение правила "турецкого удара", а так же добавил улучшение в алгоритм сортировки ходов.

Вот как Gemini объясняет новую логику:

Алгоритм сортировки ходов в этом коде — ключевой элемент, который делает альфа-бета отсечение (minimax с альфа-бета) значительно эффективнее. Без хорошей сортировки альфа-бета отсечение работает ненамного лучше простого минимакса.

Общая стратегия

Основная идея сортировки ходов — проверять самые "перспективные" ходы в первую очередь. Если мы сразу найдем очень хороший ход, это позволит установить высокие (для максимизирующего игрока) или низкие (для минимизирующего игрока) значения `alpha` и `beta`. Чем раньше мы это сделаем, тем больше "плохих" веток поиска можно будет отсечь, не тратя время на их анализ.

Алгоритм в этой игре реализован в функции `getAllPossibleMovesForBoard` и использует две вспомогательные функции для оценки ходов: `_scoreCaptureMove` и `_scoreQuietMove`.

Весь процесс можно разбить на следующие шаги:

Шаг 1: Принудительное взятие (Правило "Бить обязательно")

Это самый важный и первый уровень сортировки, продиктованный правилами самих шашек.

1. Проверка на наличие взятий: Алгоритм сначала ищет все возможные ходы со взятием (captures) для текущего игрока на всей доске.
2. Приоритет взятий:
    - Если ходы со взятием существуют, то все остальные ("тихие" ходы, без взятия) полностью игнорируются. Рассматриваться будут только ходы со взятием.
    - Если ходов со взятием нет, только тогда алгоритм переходит к генерации и анализу "тихих" ходов.

Это само по себе является мощнейшей эвристикой, так как взятия кардинально меняют оценку позиции и являются самыми важными ходами в игре.

Шаг 2: Сортировка ходов со взятием (Capture Moves)

Если на первом шаге были найдены ходы со взятием, они не просто берутся в случайном порядке. Они сортируются по "качеству" с помощью функции `_scoreCaptureMove`. Чем выше оценка хода, тем раньше он будет проверен в минимаксе.

Критерии сортировки взятий (в порядке убывания важности):

1. Количество сбитых шашек (Самый высокий приоритет):
    - `score += (move.captureSequence.length || 1) * 100;`
    - Ход, который бьет две шашки (турецкий удар), будет оценен гораздо выше, чем ход, бьющий одну. Это самый сильный фактор, так как он напрямую влияет на материальное преимущество.

2. Ценность сбитых шашек:
    - `if (capturedPiece && capturedPiece.isKing) { score += 50; } else { score += 10; }`
    - Взятие дамки (king) ценится значительно выше (50 очков), чем взятие простой шашки (10 очков).

3. Превращение в дамку в результате взятия:
    - `if (becomesKing) { score += 80; }`
    - Если в результате взятия простая шашка достигает последней горизонтали и становится дамкой, такой ход получает большой бонус (80 очков).

Итог по взятиям: Алгоритм в первую очередь будет рассматривать взятия, которые бьют больше всего шашек, предпочитая бить дамки и ходы, которые приводят к появлению своей дамки.

Шаг 3: Сортировка "тихих" ходов (Quiet Moves)

Если ходов со взятием нет, алгоритм генерирует все возможные "тихие" ходы (передвижение на пустую клетку) и сортирует их с помощью функции `_scoreQuietMove`.

Критерии сортировки тихих ходов (в порядке убывания важности):

1. Превращение в дамку (Самый высокий приоритет):
    - `if (becomesKing) { score += 100; }`
    - Тихий ход, который приводит к превращению шашки в дамку, получает наивысшую оценку. Это "killer move" (ход-убийца), который может полностью изменить ход игры.

2. Продвижение простых шашек вперёд:
    - `score += move.to.row - move.from.row;` (для черных)
    - `score += move.from.row - move.to.row;` (для белых)
    - Ходы, которые продвигают простые шашки ближе к полю превращения, получают небольшой бонус. Это поощряет развитие и создание угроз.

3. Централизация (позиционное преимущество):
    - `if (isToCentral && !isFromCentral) { score += 5; }`
    - Ход, который перемещает шашку в центр доски (условно, клетки с `c` от 2 до 5 и `r` от 2 до 5), получает небольшой бонус.
    - `else if (!isToCentral && isFromCentral) { score -= 5; }`
    - Ход из центра на край доски, наоборот, получает небольшой штраф. Шашки в центре контролируют больше полей и более мобильны.

Итог по тихим ходам: Алгоритм сначала проверит ходы, создающие дамку, затем — ходы, продвигающие шашки к цели и улучшающие позицию (захват центра).

Как это помогает альфа-бета отсечению?

Представим, что ИИ (черные) ищет свой лучший ход.

1.  Он генерирует все свои возможные ходы и сортирует их по описанным выше правилам.
2.  Допустим, лучший по оценке ход — это взятие, которое превращает шашку в дамку. ИИ делает этот ход в уме.
3.  Затем он начинает анализировать ответные ходы игрока (белых). Скорее всего, после такого сильного хода у белых будет мало хороших ответов.
4.  Минимакс быстро получает оценку этой ветки (например, +500 в пользу ИИ). Эта оценка становится значением `alpha`.
5.  Теперь ИИ начинает анализировать свой второй по качеству ход (например, простое продвижение шашки). Если после этого хода найдется хотя бы один ответ белых, который приведет к оценке ниже, чем +500, ИИ сможет отсечь все остальные ответы белых на этот второй ход.

Если бы ИИ сначала проанализировал слабый ход, он бы установил низкое значение `alpha`, и ему пришлось бы перебирать гораздо больше веток, прежде чем найти сильный ход и получить возможность для отсечения. Таким образом, умная сортировка максимизирует количество отсечений и позволяет за то же время просмотреть дерево поиска на большую глубину.
« Последнее редактирование: Вчера в 14:27:47 от Vlad666 »