Russian Qt Forum
Ноябрь 22, 2024, 19:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Арена для ботов  (Прочитано 10998 раз)
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« : Июнь 27, 2013, 09:53 »

Если найдутся желающие поучаствовать в проекте арены - отпишитесь здесь.
Кратко идеи арены я описал в теме http://www.prog.org.ru/topic_25120_0.html

Как я уже писал, у самого ядра может быть много интересных применений, это не только игра.
« Последнее редактирование: Июнь 27, 2013, 09:54 от Old » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Июнь 27, 2013, 20:38 »

Если найдутся желающие поучаствовать в проекте арены - отпишитесь здесь.
Кратко идеи арены я описал в теме http://www.prog.org.ru/topic_25120_0.html

Как я уже писал, у самого ядра может быть много интересных применений, это не только игра.

Хотелось бы уточнить пару моментов:
1) Как я понимаю, бот на каждом шаге имеет информацию о локальном своём окружении (пусть не о всём поле, но о некоторой его окрестности в которой он непосредственно в данный момент времени находится)?
2) Состояние бота на следующей итерации зависит от того, какой из множества вариантов стратегии он выбрал?

Если так, то есть апробованные алоритмы, схожие с данной задачей. Единственное, к чему в итоге мы стремимся.. Что требуется от конкретного бота?
   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Июнь 27, 2013, 20:56 »

Я предлагаю сделать систему, на которой можно создавать разные арены со своими ботами.
Это может быть арена для моделирования предложенной задачи, может быть арена для моделирования жизни океана (планктон, рыбы, акулы), торговых роботов и т.д.
Идеи по реализации такой системы есть.

А потом на этой системе можно смоделировать арену для решения этой конкретной задачи с двигающимся по карте ботом (или даже усложнить ее).

Это тонкости конкретной реализации этой арены.
1) Как я понимаю, бот на каждом шаге имеет информацию о локальном своём окружении (пусть не о всём поле, но о некоторой его окрестности в которой он непосредственно в данный момент времени находится)?
Мне кажется, будет интересней если бот будет видеть только небольшой участок карты вокруг себя.

2) Состояние бота на следующей итерации зависит от того, какой из множества вариантов стратегии он выбрал?
Да. Бот это объект класса и он сможет сохранять любую информацию, какую посчитает нужной и соответственно использовать ее в дальнейшем для принятия решений.
 
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Июнь 28, 2013, 08:35 »

Не знаю в верную ли сторону мыслю. Хотел бы поделится мыслями по реализации арены. На мой взгляд было бы неплохо написать API в котором можно было бы проинициализировать Арену (задав размеры, количество бонусов и прочие штуки.). А так же с помощью это го самого API управлять ботом или еще чем нибудь. То есть API предоставит возможность пользователю создавать "Арену" перемещать на ней элементы, увеличивать и уменьшать вес некоторых значений. Но при этом алгоритм реализации уже будет зависеть от пользователя API, хочет видит всю карту, хочет только часть, хочет теряет вес мощности при передвижении хочет нет. Верно понимаю ? Есть ли репозитарий на гитхабе ? Времени не особо много, но вроде как идея интересная.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Июнь 28, 2013, 11:17 »

Арены могут сильно отличаться друг от друга. Например, для одних задач нужна карта, на которой развиваются все действия, для других нет - это для торговых ботов или систем датчиков и выключателей. Поэтому, в первом случае арена должна предоставлять ботам сенсоры (для исследования карты) и рычаги для управления транспортером, а во втором данные по рынку и возможность осуществлять куплю/продажу.
Есть идея сделать библиотеку, с помощью которой пользователь сможет описывать конкретную арену, писать для нее ботов и запускать их внутри этой арены.
Само ядро не очень сложно реализовать, весь функционал будет в арене.
Ядро по сути будет хранить сам объект скриптового движка и список объектов ботов, которые будут выполняться.
Арена же будет предоставлять все возможные рычаги для бота, внутри скриптового движка.
Библиотека будет содержать абстрактные арены, которые пользователь сможет наследовать и настраивать под себя.
Визуализаторы будут тесно связаны с аренами, поэтому нужно будет написать инструментальные классы облегчающие визуализацию карт.
« Последнее редактирование: Июнь 28, 2013, 11:21 от Old » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #5 : Июнь 28, 2013, 23:28 »

Идея интересная и много наворотов уже предложено Улыбающийся. Мне кажется, что нужно начать с простого варианта, прототипа, и посмотреть, как это дело пойдет. Будет активно развиваться - хорошо, заглохнет - не так много времени потеряется. На основе этого варианта станет понятно, как в последствии надо будет делать "по уму". Так что сейчас надо определить простую задачу, открыть проект в каком-нибудь репозитории и писать код Улыбающийся.
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Июнь 29, 2013, 11:21 »

Тогда опишу свои мысли по этому хозяйству.
Хорошо бы делать систему так, что бы скриптовый движек можно было менять: Qt+js, lua, python. Но для прототипа можно остановиться на Qt+js.

Все названия условны, если кто-то предложит другое название для классов и методов, то я только за.

Основные подсистемы:
Core - ядро, содержит само скриптовый движек и шедуллер для выполнения кода ботов.
Arena - предоставление и обслуживание всех вызовов бота, управление картой и т.д.
Viewer - визуализатор состояния арены.

Пространство Core.
Класс Engine - сам движек, предоставляет методы для удобной регистрации классов и функций внутри сриптового движка (Arena регистрирует нужный API).
Класс BotSheduler - шедулер ботов, позволяет добавлять/удалять/запускать/останавливать ботов.
Класс TimeLine - класс для управления временем симуляции. Позволяет задавать, от простого, один шаг в секунду до сложного, в начале симуляции время идет быстро, а после каких-то событий или шагов может замедляться и т.д. Позволит пользователю манипулировать временем, как ему захочется.

Пространство Arena.
Класс Model - модель арены (базовый класс). Основной метод - настроить скриптовый движек для работы ботов.
Класс Map - базовый класс для карт, предоставляет основной функционал для управления картой.
Класс MapModel - наследник Model, заточенный для работы с картами.

Пространство Viewer.
Класс View - базовый класс для гляделок.
Класс MapView - виджет, умеющий отображать Map. Пользователь сможет наследоваться от него для отображения своих карт.

Код
C++ (Qt)
int main(...)
{
   ba::core::engine eng;             // Создаем объект движка
 
   myMap m( "map.dat" );                  // Создаем и загружаем карту
   ba::arena::myMapModel mod( m );  // Создаем модель арены с картой
 
   ba::core::easyTimeLine tl( 1000 ); // Создаем объект времени: шаг в секунду
   eng.installModel( mod );      // Модель регистрирует в пространстве скрипта все доступные для ботов функции
   eng.setTimeLine( tl );         // Настраиваем время
   eng.loadScript( "bots.js" );  // Загружаем и выполняем файл с кодом бота
                                         // (в скрипте создается объект бота и регистрируется в шедулере ядра, через api шедулера)
 
   eng.run();                        // Запуск симуляции
}
 

Шедулер испускает сигналы, при начале выполнения тика каждого бота (может и в конце выполнения?) и после полного прохода по всем ботам. Это будет удобно для визуализатора, он сможет обновлять свое представление.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #7 : Июнь 29, 2013, 13:36 »

Хорошо бы делать систему так, что бы скриптовый движек можно было менять: Qt+js, lua, python. Но для прототипа можно остановиться на Qt+js.

Основные подсистемы:
Core - ядро, содержит само скриптовый движек и шедуллер для выполнения кода ботов.
Arena - предоставление и обслуживание всех вызовов бота, управление картой и т.д.
Viewer - визуализатор состояния арены.

С такой основной системой вполне согласен. Детали смогут определиться позднее.

По начальной задаче арены для ботов у меня сложилась такая история:
Космический корабль прилетает на планету и спускает на нее исследовательского бота-разведчика (scout). Скаут должен исследовать (увидеть) всю поверхность планеты и вернуться в исходную точку, где его заберут обратно на корабль. Изначально у бота есть определенный запас энергии, который тратится на движение и починку самого себя (в ямке отвалилось колесо, сверху упал камень/дерево и т.п.). Энергия может пополняться из найденных ресурсов. Планету могут исследовать несколько враждебных друг другу ботов, победителем будет тот, который потратит на это меньше времени и вернется в исходную точку с бОльшим количеством энергии.

Теперь в деталях:
1. Карта двумерная, прямоугольная с квадратными ячейками.
2. Карта статическая и не изменяется (только исчезают ресурсы).
3. Ячейки карты могут иметь различные типы местности с разной проходимостью (на движение тратится 1, 2, 3... единиц энергии).
4. Чтобы жизнь медом не казалась, в одной ячейке может быть несколько объектов.
5. Объекты на карте: непреодолимое препятствие, ресурс с энергией, предмет наносящий урон.
6. При прохождении ячейки с объектом урона он остается, объект ресурса исчезает.
7. Бот может распознать ячейку с уроном, но изначально сила урона ему не известна (задается на карте рандомно в начале). После получения урона он может эту силу запомнить. Сила урона ограничена (10 единиц энергии).
8. Бот видит ячейку с ресурсом и уровнем его энергии сразу. Максимальный уровень энергии ресурса ограничен (10 единиц).
9. В начале бот имеет максимальный запас энергии (100, 200), который при собирании ресурсов не может быть превышен.
10. Если энергия снижается до 0, то разведчик считается потерянным (погибает).
11. За один шаг бот может сдвинуться только на одну соседнюю ячейку, по диагонали двигаться не может.
12. Сканер бота имеет ограниченную видимость (радиус 3-5 ячеек).
13. Изначально бот опускается в случайную свободную ячейку.
14. Соревнования ботов на одной карте могут проходить в несколько этапов (меняются друг с другом стартовыми позициями).

Для начала хватит Улыбающийся. Можно уточнить эти пункты, но особо усердствовать не стоит, чтобы не усложнять начальную задачу.

Проект можно разместить на:
1. github.com - наибольшее удобство по содержанию кода, но маловато инструментов для сопровождения проекта.
2. assembla.com - чуть меньшее удобство по содержанию кода (но есть интеграция с гитхаб), много удобных инструментов для командной работы.
3. bitbucket.org - в общем средне, но есть приватные рабочие пространства.
Высказывайтесь за/против или предлагайте свои варианты размещения проекта Улыбающийся.
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Июнь 29, 2013, 14:37 »

Для начала хватит Улыбающийся. Можно уточнить эти пункты, но особо усердствовать не стоит, чтобы не усложнять начальную задачу.
Ok. История интересная, основные условия тоже. Улыбающийся
Давайте начнем проектировать движек: детально описывать сущности, их задачи и связи. Потом распределим задачи и будем кодировать.
Репозиторий я уже создал на гитхабе: https://github.com/OldMen/botarena.git
Обсуждать проект можно будет здесь.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #9 : Июнь 30, 2013, 00:25 »

Добавил немного описания в readme репозитория, принимайте pull request Улыбающийся.

Одной этой темы для обсуждения не хватит, скоро она переплетется в разных вопросах и запутается. Лучше обсуждать и проектировать в рабочем пространстве проекта: вопросы в Issues, описание и документация в Wiki.

Надо еще продумать структуру файлов проекта. Ядро само просится в dll, в конечном итоге оно все равно там окажется, поэтому чем раньше оно там оформится - тем лучше. Тестовое приложение будет использовать ядро из dll, грузить карты и ботов, показывать это все на экране. Пока так видится Улыбающийся.
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #10 : Июнь 30, 2013, 13:36 »

Сформировал дерево исходников.
Систему сборки - CMake.
Директория game будет содержит исходники для реализации конкретной игры, в engine - общая библиотека.
Подсистемы: core, arena и view - оформлены разделяемыми отдельными библиотеками.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #11 : Июнь 30, 2013, 17:10 »

Теперь надо реализовать абстрактные и базовые классы с заглушками из этого поста, чтобы было от чего отталкиваться.

Надо еще сразу договориться о стиле кодирования. Предлагаю за основу взять Qt Coding Style, только фигурные скобки на новую строку всегда переносить. Сам пользуюсь Uncrustify и другим советую Улыбающийся. Все сущности документировать комментариями в стиле Doxygen, хотя бы одним простым предложением, чтобы видеть зависимости между классами (вряд ли кто возьмется графы наследования/зависимости руками рисовать).

Думаю впоследствии смогу взять на себя карту и объекты на ней. Но заниматься этим проектом смогу по остаточному принципу (после основной работы, отдыха), в совсем свободное время, так что продвигаться это будет довольно медленно.
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #12 : Июнь 30, 2013, 17:21 »

Теперь надо реализовать абстрактные и базовые классы с заглушками из этого поста, чтобы было от чего отталкиваться.
Основные вещи я набросаю. Продумаю более детально сущности и их связи.

только фигурные скобки на новую строку всегда переносить.
Я кодирую только так. А если мне приходилось исправлять чужие исходники, где не так, то они первым делом рефакторяться. Улыбающийся
У меня свой стиль, сформированный еще при царе Горохи, поменять все равно не получиться. Улыбающийся

Сам пользуюсь Uncrustify и другим советую Улыбающийся.
А выложите куда нибудь свой конфиг для него. Улыбающийся

Все сущности документировать комментариями в стиле Doxygen, хотя бы одним простым предложением, чтобы видеть зависимости между классами (вряд ли кто возьмется графы наследования/зависимости руками рисовать).
Ok

Думаю впоследствии смогу взять на себя карту и объекты на ней. Но заниматься этим проектом смогу по остаточному принципу (после основной работы, отдыха), в совсем свободное время, так что продвигаться это будет довольно медленно.
У меня возможности такие же. Улыбающийся
Постараюсь что бы быстрей все "задышало", тогда может люди потянутся помочь...
« Последнее редактирование: Июнь 30, 2013, 17:57 от Old » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #13 : Июнь 30, 2013, 17:50 »

Сам пользуюсь Uncrustify и другим советую Улыбающийся.
У меня свой стиль, сформированный еще при царе Горохи, поменять все равно не получиться. Улыбающийся

В том и прелесть форматировщика, что писать можно в своем стиле, а парой кнопок отформатировать в другой. Свой стиль остается при себе, а разные проекты ведутся в своих настройках. По крайней мере голова не болит о всяких пробелах между скобками и разными уровнями отступов Веселый.
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #14 : Июнь 30, 2013, 17:57 »

В том и прелесть форматировщика, что писать можно в своем стиле, а парой кнопок отформатировать в другой. Свой стиль остается при себе, а разные проекты ведутся в своих настройках. По крайней мере голова не болит о всяких пробелах между скобками и разными уровнями отступов Веселый.
Я сначала подумал, что вы ссылку на какой-то стандарт кодирования выложили.
Посмотрел их сайт, поставил себе, теперь бы на ваш конфик взглянуть. Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.079 секунд. Запросов: 23.