Описание.
Имеется программа, имитирующая вождение автомобиля. Управление сведено к минимуму - руль, тормоз и газ. Физика и визуализация трёхмерные, но трасса плоская. На трассе нет развилок и самопересечений, это ломаная, заданная набором вершин, у которых Y=0. Трасса - это множество точек плоскости XoZ, лежащих от ломаной на расстоянии не более R. Управление дискретное (нажато-не нажато), но внутри программы оно фильтруется к float величине от 0 до 1 для газа и тормоза (глубина нажатия педали) , для руля диапазон значений от -1 (влево) до 1 (вправо) - это угол поворота передних колёс в радианах. Управляется с клавиатуры, кнопки описаны в ReadMe.
Но ручное управление нужно только для знакомства с динамикой машины!
Задание.
Вам предстоит написать ИИ (искусственный интеллект), управляющий этим автомобилем. ИИ оформляется в виде нативной Win32 dll, экспортирующей всего три функции:
Init
Эта ф-ция вызывается однократно при старте гонки, здесь можно расположить тяжёлые расчёты, связанные с прокладкой маршрута и т. п.
Tick
Эта ф-ция вызывается 50 раз в секунду, здесь вы получаете от основной программы информацию о текущем состоянии автомобиля и отправляете в неё информацию об управлении, которое полностью имитирует ручное управление, описанное выше.
Term
Эта ф-ция вызывается однократно при окончании гонки. Это в первую очередь для уничтожения созданных в Init объектов и освобождения памяти.
Ниже есть ссылка на архив с программой и готовым шаблоном для написания dll на VS2008. Вы можете выбрать свою среду разработки и ЯП, написание шаблонов для них приветствуется и ссылки на них будут так же выложены ниже.
Участие.
Принять участие в конкурсе может любой зарегистрированный на GameDev.ru пользователь, подавший в этой теме заявку постом с таким содержанием:
<font color=red><b>Релиз:</b></font>
Получается: Релиз:
Далее ссылка на ваш вариант ИИ. Его можно выкладывать сколько угодно раз, я буду обновлять ссылку в списке участников.
Рекомендуется называть свои dll своими никами на gamedev.ru, заменяя пробелы символом подчёркивания.
Рекомендуется выкладывать работы на файлообменник с минимумом рекламы и возможностью перезаливать закачки без изменения ссылки, например на Яндекс-диск.
Сроки.
Первый финал назначен на 21:00 14 октября 2019 г., но конкурс бессрочный, можно будет улучшать свои достижения, текущий рекорд будет обновляться.
Определение победителя.
Трассы генерируются, сид трассы для выявления победителя будет определён непосредственно перед соревнованием, чтобы не было возможности заточить ИИ под конкретную трассу. Победит тот, кто пройдёт трассу быстрее, то есть победителя определит программа, судьи не требуются.
Для определения № карты все участники, выдавшие рабочий ИИ, шлют мне в личку (не в тему!) любое целое число от 0 до 1 000 000, я своё число не даю, чтобы не мог повлиять на результат. Я смешиваю ваши числа с помощью XOR - получаем № карты. Тестируем на 10 картах подряд от № до №+9, по 1-й попытке на карту.
Шаблон для написания своего варианта ИИ и программа для запуска: https://yadi.sk/d/x8I4J3CAOixqxw
Может понадобиться для запуска под Вайн: msvbvm60.dll
Порт для freebasic от AWPStar: https://yadi.sk/d/_E0IfAOSPGl0Pw
Порт на Lua с исходниками на Си для codeblocks/mingw от romanshuvalov: https://gamedev.ru/files/?id=141780
Пример простейшего ИИ:
Список участников с релизами:
01 AWPStar
https://yadi.sk/d/3NvLjLzL7d7ZqQ
02 Mikle
https://yadi.sk/d/CbcKe4QuhtSBzQ
03 romanshuvalov
ai_rs1_v1 for AI contest
04 Tiranas
DLL_AIRace_v50
05 Adler
[file=141952]
Архив с работами участников:
https://yadi.sk/d/-v7ntjgH9RzM1Q
14.10.2019 проведено соревнование на картах от 17387047 до 17387056 включительно.
Результаты:
Бессрочный топ ботов для нулевой карты:
romanshuvalov - 30.44 сек.
ai_rs1_crazy_zero_v1 for AI contest
Adler - 30.64 сек.
[file=142028]
Mikle - 33.8 сек.
https://yadi.sk/d/Sp4yfA7bxzc6jw
Mikle
Ложи, плиз, msvbvm60.dll в свои проекты.
Mikle
> Я делаю вызывающую сторону для dll
TCP/UDP не будет?
Mikle
> Демо
Физика дикая. Графика приятная
BEETON
> TCP/UDP не будет?
Такую обёртку собирался делать Вий, я сам не сделаю.
> Ложи, плиз, msvbvm60.dll в свои проекты.
https://yadi.sk/d/-HtgaMCt3MvXQo
> Физика дикая. Графика приятная
Графика для такого проекта большого значения не имеет, сделал простейшую, рад, что нравится.
Физику старался сделать реалистичной, а не аркадной, для ИИ это интереснее.
Вий
мое почтение
Mikle
> Физику старался сделать реалистичной, а не аркадной, для ИИ это интереснее
не сказал бы, что сейчас реалистично, больше напоминает на управление звездолетом в космосе с большой инерцией.
Думаю, это из-а того что нет небольшого дрифта
BEETON
Думаю, это из-за отсутствия звука, ты не слышишь, что начинается занос или пробуксовка. Просто попробуй ехать осторожно, сильно не газовать и не тормозить.
Кстати, для ИИ можно передавать громкость звука срыва колеса в занос, ведь именно по этому признаку определяет занос человек. А направление ИИ и так определит - ведь у него есть вектора скорости и направления машины.
BEETON
> Думаю, это из-а того что нет небольшого дрифта
Он есть, и бывает и большим, и небольшим.
Под вайном не завелось :( Тачка есть, ездит, но трассы не видно.
romanshuvalov
> Под вайном не завелось
У меня все норм. Какая версия вайна?
wine-4.12.1 (Staging) полет нормальный
wine-4.0 (Debian 4.0-2).
Но оно потребовало 32-битных либ, выполнил dpkg --add-architecture i386 и apt-get install wine32, потом не завёлся OpenGL (не найден libgl1.so.1 или чё-то там такое), вылечил через apt-get install libgl1-nvidia-glx:i386.
Возможно, OpenGL не пробрасывается в аппаратную реализацию, а эмулируется Мезой, этого я не знаю. И как вылечить - не знаю.
romanshuvalov
> потом не завёлся OpenGL
У меня там Direct3D9...
Симулятор физики нужен. Или в виде исходников или в виде формул. Я правда не уверен что буду участвовать, но без возможности предсказывать положение на Н тиков вперёд ии не ии.
Mikle
> Физику старался сделать реалистичной
Эм, вообще не реалистичная. Даже я с моим не шибко большим опытом вождения, я могу утверждать 100% - физика вообще яд.
Тормоза дикие - машина так не тормозит. Если вывернуть руль в одну из сторон, и начать тормозить машину всегда ведет юзом. У тебя же она практически по прямой дальше тормозит, и, что еще более странно, даже в противоположную сторону уходит слегка. Хотя если на скорости поворачивать, то даже есть занос.
Далее. Если трасса плоская, какого хрена машина сама едет сразу же? Ну это вообще плохо же.
В общем, физика пока крайне сырая. Ждем фиксов.
Mikle
> У меня там Direct3D9...
В вайне всё пробрасывается в OpenGL.
kipar
> без возможности предсказывать положение на Н тиков вперёд ии не ии.
Как раз-таки ИИ. Ты когда за руль реального автомобиля садишься - тебе же формулы никто не даёт, едешь и сам чувствуешь, насколько сильно надо руль повернуть. Вот и ИИ так должен уметь.
romanshuvalov
Отобразилась машина, но нет трассы и неба... то есть нет объектов с текстурами. Я их гружу с помощью GDI+, вероятно, его нет в твоём Вайне. Если нет стандартного способа его добавить, попробуй просто закинь эту dll: https://yadi.sk/d/1lyKl-ussDv3ag
kipar
Ближе к делу, когда начнётся конкурс, я дам исходник, пока нет смысла - я регулярно вношу изменения.
Но предсказать ТОЧНОЕ положение не выйдет - там есть элемент рэндома, это сделано для того, чтобы принимали решение динамически.
Incvisitor
Если тормозить на скорости, то задние колёса срывает легче передних потому, что машина наклоняется вперёд, и передние колёса лучше прижаты. Этот эффект и наблюдается, хотя я его не эмулировал специально - он сам естественным образом получился.
Машина сама едет потому, что она сразу на 1-й передаче. Если взять машину с коробкой-автоматом, поставить на "вперёд" и не жать газ - она так же сразу немного поедет.
Тема в архиве.