ConNquestEnv — это Python-обертка над VizDoom, предназначенная для обучения агента по нарастающей сложности. Агент начинается в яме (near-зона) и сражается с волнами врагов, каждая из которых генерируется динамически по набору правил.
Цель — обеспечить постепенное обучение навыкам выживания и боя, начиная с простейших ситуаций (враги с малым HP, оружие в зоне старта) и двигаясь к сложным комбинациям.
Каждая волна генерируется при вызове spawn_wave(). Алгоритм:
- Определение текущего уровня сложности (tier) на основе номера волны.
- Выбор врагов:
- Объединяются все враги от tier 1 до текущего.
- Метод выбора зависит от параметра
distribution.typeв конфиге:weighted: используется взвешенное распределение — враги текущего tier получают больший вес (tier_bonus).uniform: все враги выбираются с равной вероятностью.
- Выбор всегда без повторов.
- Проверка урона:
- Суммируется HP всех врагов.
- Оценивается минимальный возможный урон от всех выдаваемых оружий и патронов (через
min_damage * packs). - Если урона недостаточно, добавляется
extra_ammo_typeв количестве, покрывающем дефицит (extra_pack_damage).
- Спавн:
- Враги размещаются на
farточках (доступ постепенно расширяется). - Оружие и патроны — в
ringиnearзонах. - Хил и броня спавнятся каждые
health_intervalволн. - Каждые
backpack_intervalволн — рюкзак в центре.
- Враги размещаются на
- Вызов
step(action):- Действие передаётся в VizDoom.
- Награда включает:
- Базовую от среды (
living_reward,death_penalty) - За убийства (
kill) - За сбор предметов (
item) - За восстановление здоровья (
health) - За прохождение волны (
wave)
- Базовую от среды (
- Также возвращается словарь
infoс текущим состоянием: номер волны, здоровье, убийства, собранные предметы.
| Превью | ||
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
project/
├── env.py # Основной класс ConNquestEnv
├── config.yaml # Конфигурационный YAML
├── ConNquest.wad # Кастомная карта
├── images/
│ ├── screen1.png
│ ├── screen2.png
│ ├── screen3.png
│ ├── screen4.png
│ └── screen5.png
from connquest import ConNquestEnv
env = ConNquestEnv("config.yaml")
obs = env.reset()
done = False
while not done:
action = env.game.get_available_buttons_size() * [0] # пример: все кнопки = 0
obs, reward, done, info = env.step(action)- Python 3.8+
- ViZDoom
- PyYAML
Всю логику конфигурации карты, врагов, волн, предметов и параметров VizDoom можно изменить через config.yaml.






