152 lines
6.7 KiB
Markdown
152 lines
6.7 KiB
Markdown
# Результаты тестирования A* алгоритма с новыми правилами
|
||
|
||
## Новые правила
|
||
1. **Препятствия**: Можно проезжать через камни, но нельзя на них останавливаться
|
||
2. **Снег (тип 2)**: Ускорение ограничено диапазоном от -1 до +1
|
||
3. **Лёд (тип 3)**: Ускорение нельзя менять (только сохранение текущей скорости)
|
||
4. **Обычная дорога (тип 0)**: Ускорение от -2 до +2
|
||
|
||
## Тестовые карты
|
||
|
||
### Тест 1: test-obstacles.json
|
||
**Цель**: Проверить проезд через препятствия
|
||
|
||
**Описание**: Карта 15x11 с большой зоной препятствий (56 клеток) между стартом и чекпоинтом
|
||
|
||
**Результаты**:
|
||
- ✅ Решение найдено за 4 хода
|
||
- ✅ Машина успешно проехала через зону препятствий
|
||
- ✅ Траектория: (0,10) → (2,10) → (6,9) → (11,6) → (14,1)
|
||
- Максимальная скорость: 8
|
||
- Время работы: 0.04 сек
|
||
- Итераций: 24
|
||
|
||
**Вывод**: Алгоритм корректно проезжает через препятствия, не останавливаясь на них.
|
||
|
||
---
|
||
|
||
### Тест 2: test-snow.json
|
||
**Цель**: Проверить ограничение ускорения на снегу
|
||
|
||
**Описание**: Карта 15x9 с большой зоной снега (49 клеток) между стартом и чекпоинтом
|
||
|
||
**Результаты**:
|
||
- ✅ Решение найдено за 3 хода
|
||
- ✅ На снегу использовалось ограниченное ускорение: (1,1) и (-1,0)
|
||
- ✅ Траектория: (0,8) → (2,6) → (5,5) → (7,4)
|
||
- Максимальная скорость: 4
|
||
- Время работы: 0.04 сек
|
||
- Итераций: 42
|
||
|
||
**Вывод**: На снегу ускорение корректно ограничено диапазоном ±1.
|
||
|
||
---
|
||
|
||
### Тест 3: test-ice.json
|
||
**Цель**: Проверить инерцию на льду
|
||
|
||
**Описание**: Карта 18x9 с большой зоной льда (54 клетки) между стартом и чекпоинтом
|
||
|
||
**Результаты**:
|
||
- ✅ Решение найдено за 3 хода
|
||
- ✅ Машина не останавливалась на льду
|
||
- ✅ Траектория: (0,8) → (2,8) → (6,7) → (9,4)
|
||
- Максимальная скорость: 6
|
||
- Время работы: 0.04 сек
|
||
- Итераций: 34
|
||
|
||
**Вывод**: Алгоритм успешно обходит или проходит через лёд без остановки.
|
||
|
||
---
|
||
|
||
### Тест 4: test-combined.json
|
||
**Цель**: Проверить комбинацию всех типов поверхностей
|
||
|
||
**Описание**: Карта 20x15 с 4 чекпоинтами и всеми типами поверхностей:
|
||
- 16 препятствий
|
||
- 24 клетки снега
|
||
- 15 клеток льда
|
||
|
||
**Результаты**:
|
||
- ✅ Решение найдено за 9 ходов
|
||
- ✅ Собраны все 4 чекпоинта
|
||
- ✅ Проезд через препятствия: шаги 3-4
|
||
- ✅ Движение по снегу с ограниченным ускорением: шаги 6-7
|
||
- ✅ Проход через/около льда без остановки: шаги 8-9
|
||
- Максимальная скорость: 6
|
||
- Время работы: 0.04 сек
|
||
- Итераций: 21
|
||
|
||
**Детальный путь**:
|
||
```
|
||
Шаг 0: (0,14) Скор=(0,0) Ускор=(0,0)
|
||
Шаг 1: (1,12) Скор=(1,-2) Ускор=(1,-2)
|
||
Шаг 2: (3,12) Скор=(2,0) Ускор=(1,2) ✓ Чекпоинт #1
|
||
Шаг 3: (7,12) Скор=(4,0) Ускор=(2,0)
|
||
Шаг 4: (9,10) Скор=(2,-2) Ускор=(-2,-2)
|
||
Шаг 5: (9,9) Скор=(0,-1) Ускор=(-2,1) ✓ Чекпоинт #2
|
||
Шаг 6: (11,7) Скор=(2,-2) Ускор=(2,-1)
|
||
Шаг 7: (12,6) Скор=(1,-1) Ускор=(-1,1) ✓ Чекпоинт #3 (на снегу)
|
||
Шаг 8: (15,3) Скор=(3,-3) Ускор=(2,-2)
|
||
Шаг 9: (17,2) Скор=(2,-1) Ускор=(-1,2) ✓ Чекпоинт #4
|
||
```
|
||
|
||
**Вывод**: Алгоритм корректно работает со всеми типами поверхностей одновременно.
|
||
|
||
---
|
||
|
||
## Общие выводы
|
||
|
||
### Успешные проверки
|
||
✅ Препятствия можно проезжать, нельзя останавливаться
|
||
✅ На снегу ускорение ограничено ±1
|
||
✅ На льду ускорение нельзя менять
|
||
✅ Все типы поверхностей работают в комбинации
|
||
✅ Алгоритм быстро находит оптимальные решения
|
||
|
||
### Производительность
|
||
- Все тесты выполнились за 0.04 секунды
|
||
- Количество итераций: от 21 до 42
|
||
- Максимальный размер открытого множества: от 101 до 256
|
||
|
||
### Рекомендации для дальнейшего использования
|
||
1. Карты с большим количеством льда могут требовать более сложного планирования
|
||
2. Снег эффективно замедляет движение, но не блокирует пути
|
||
3. Препятствия теперь не являются критичным блокировщиком - можно прыгать через них
|
||
4. Комбинированные карты решаются эффективно благодаря адаптивному подходу A*
|
||
|
||
## Визуализация карт
|
||
|
||
### Легенда
|
||
- `S` - старт
|
||
- `1-9` - чекпоинты (номера)
|
||
- `●` - чекпоинты с номерами >= 10
|
||
- `#` - препятствия (можно проезжать)
|
||
- `~` - снег (ускорение ±1)
|
||
- `=` - лёд (инерция)
|
||
- `.` - путь решения
|
||
- ` ` - обычная дорога
|
||
|
||
## Запуск тестов
|
||
|
||
```bash
|
||
# Компиляция
|
||
dotnet build racing-astar.csproj
|
||
|
||
# Тест 1: Препятствия
|
||
./bin/Debug/net8.0/racing-astar maps/test-obstacles.json
|
||
|
||
# Тест 2: Снег
|
||
./bin/Debug/net8.0/racing-astar maps/test-snow.json
|
||
|
||
# Тест 3: Лёд
|
||
./bin/Debug/net8.0/racing-astar maps/test-ice.json
|
||
|
||
# Тест 4: Комбинированная карта
|
||
./bin/Debug/net8.0/racing-astar maps/test-combined.json
|
||
```
|
||
|
||
## Дата тестирования
|
||
19 октября 2025
|
||
|