Управление роботом. Миниконкурс.

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Управление роботом. Миниконкурс.

Сообщение Mikle » 02.01.2012 (Пн) 10:53

Предлагаю немного посоревноваться в искусстве управления роботом.
Краткое описание:
Робот представляет собой три массивных колеса (изображение в 2D), соединённых невесомыми пружинами, внизу расположена земля, имеется сила тяжести, трение. Столкновения колёс между собой и с землёй абсолютно неупругие.
Радиус колеса - 32 (в пикселях), длина ненагруженных пружин - 150, земля находится на уровне -32, то есть колесо, касающееся земли, находится на уровне 0.
ЭТО ВСЁ УЖЕ НАПИСАНО! Ваша задача - написать robot.dll.
Программа, визуализирующая робота, обращается к robot.dll, которая экспортирует единственную ф-цию RTICK. Единственный параметр ф-ции - указатель на структуру, содержащую текущее значения координат и скоростей колёс, а так же усилия, приложенные к пружинам.
Задача - заставить робота двигаться вправо, цель - за минуту уйти как можно дальше.
Ф-ция RTICK вызывается 60 раз в секунду.
Тут уже готовая программа и исходник robot.dll на C++:
http://www.gamedev.ru/files/?id=74460
Можно этот исходник брать за основу. Естественно, на VB6 писать dll можно (и нужно!), просто этот пример я сделал для других сайтов, где далеко не все знакомы с VB.
Текущий результат, который пока можно считать рекордом - 3688.

Немного подробностей. Единицы все условные:
Масса колеса - 1.
Время - 1 "тик", то есть примерно 1/60 сек.
Расстояние - пиксели.
Соответственно скорость - пиксели за тик.
Единица силы - та величина, при которой за 1 тик тело массой в 1 ускоряется на 1.
Ускорение св. падения - 0.1.
Трение об воздух - каждый тик скорость каждого шара умножается на 0.997.
К-т жёсткости пружины - 6/150 (по Гуку).
Сила трения покоя и движения - 3 * сила_сжатия_тел.
Можно только влиять на три пружины, сила от -3 до 3, если дать больше - программа ограничит. Отрицательная сжимает пружину, положительная разжимает. Пружина с индексом №0 соединяет колёса №0 и №1, пружина с индексом №1 соединяет колёса №1 и №2, пружина с индексом №2 соединяет колёса №2 и №0.

Могу, при необходимости, дать исходник физики, но вряд ли это нужно. Мне кажется, что будет и проще, и интереснее сделать так, чтобы робот сам динамически принимал решение.
Более подходящего раздела для этой темы не нашёл.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 02.01.2012 (Пн) 18:51

[ :( ]
Из раза в раз — твоя программа не имеет окна, не отображается в таскбаре, и нужно последовательно сворачивать 1000 окон в системе, чтобы найти там ушедшее на почти самый задний план окно твоей программы.
[ / :( ]

Подобного рода конкурсы мне по нраву. Всё-таки переношу в народный треп. Где можно выкладывать «прошивки» работов и мериться результатами и смореть самый последний рекорд?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Управление роботом. Миниконкурс.

Сообщение Proxy » 02.01.2012 (Пн) 19:33

Пока не могу найти время попробовать, но заинтересовало. Вообще люблю подобного рода "игрушки".
А может стоит создать где-нибудь раздел, посвящённый подобного рода мероприятиям (где нужно написать ИИ и подключить как dll)?
Я когда-то давно писал такие шахматы для игры двух ИИ, просто функция получения игровой ситуации и функция хода, могло проверить ход на корректность, но ИИ я так и не написал, можно было только через эдакую консольку ходы делать, на том проект и заглох. В целом ничего не мешает возобновить.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 02.01.2012 (Пн) 21:20

Хакер писал(а):твоя программа не имеет окна, не отображается в таскбаре

Про таскбар забыл :)
Хакер писал(а):Всё-таки переношу в народный треп.

И хорошо, тут народу больше!
Хакер писал(а):Где можно выкладывать «прошивки» работов и мериться результатами и смореть самый последний рекорд?

Прямо здесь, наверное. Вот тема на GameDev.ru:
http://www.gamedev.ru/code/forum/?id=156656
Там уже порог в 40000 побили. Но нам, наверное, интересны свои результаты.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 03.01.2012 (Вт) 1:59

Такое ощущение, что у тебя в физике глюки, зависящие от системного времени. То, что работало два часа назад, не работает сейчас. Хотя речи быть не может о том, что я поменял что-то в своём коде. У «воспроизвожу» ответы из записанного текстового файла. Текстовый файл никто не менял.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 03.01.2012 (Вт) 8:47

У меня накопилось уже много разных dll, ни одна из них так себя не ведёт.
Время моя программа не опрашивает, есть целочисленный счётчик вызовов ф-ции RTICK, его я и использую в качестве времени. Есть один вызов Sleep, но он только для задержки, на рассчётные параметры он не влияет. RND я не использую. Если бы были глюки - они должны были бы всё равно повторяться.
Могу предположить два варианта:
1. Твоя программа зависит от времени. Но, если ты воспроизводишь записанные в файл команды, это исключается.
2. Запуск на разных процессорах. Я уже встречал ситуацию, когда AMD и Intel по разному округляли float.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 03.01.2012 (Вт) 9:02

Но и у меня нет заклада на времени. И процессор я не менял.
Я записывал ответы функци RTICK для удачных «решений» в файл вот так:
Код: Выделить всё
sresult = sresult + CStr(tickind) + " " + CStr(r.Force(1)) + " " + CStr(r.Force(2)) + " " + CStr(r.Force(3)) + vbNewLine


в таком формате
Код: Выделить всё
82 -0,3 -0,3 -0,25
94 -0,6 -0,6 -0,5
96 -0,9 -0,9 -0,75
98 -1,2 -1,2 -1
99 -1,5 -1,5 -1,25
101 -1,8 -1,8 -1,5
103 -2,1 -2,1 -1,75
104 -2,4 -2,4 -2
106 -2,7 -2,7 -2,25
107 -3 -3 -2,5
115 3 3 -3


Два файла содержат «программу управления роботом» для результатов 36k и 39k.

Потом по мере улучшения треугольник начал вести себя как-то странно. Какую-то способность к самовозбуждению приобрёл, колбасит его, «узлы» начинают двигаться очень быстро и напоминают броуновское движение.

Тогда я решил «проиграть» ранее записанный файл. Ну и что? Робот вёл себя просто неадекватно, прыгал вверх, вних, делал какие-то непонятные кульбиты. Такое впечатление, что где-то ошибка вычисления. Или сила иногда не ограничивается тройкой. Или где-то принципиальная ошибка вычисления физики.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 03.01.2012 (Вт) 9:47

А можно для опытов твою dll-проигрыватель с текстовым файлом?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 03.01.2012 (Вт) 11:06

Почему если RTICK имеет такой вид:
Код: Выделить всё
r.Force(1) = -3
r.Force(2) = -3
r.Force(3) = -3


То фигура падает со вращением по часовой стрелке, если изначально она падает без какого-либо вращение. Имхо, это и есть одно из проявлений неправильной физики.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 03.01.2012 (Вт) 17:35

Физика, конечно, не идеальна. Всё дело в направлении цикла рассчёта коллизий для колёс - сначала проверяем 0-й с 1-м, потом 1-й со 2-м, потом 2-й с 0-м. Каждая пара рассчитывается достаточно корректно, я пробовал менять направление рассчёта - тогда при таком старте закручивает в другую сторону. Это проявляется при столкновениях колёс между собой.
Но, в любом случае, это не зависит от времени.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 03.01.2012 (Вт) 17:50

Почему бы нельзя организовать расчёт «одновременно», а не итеративно. Да, как раз при столкновении колёс друг-об-друга на больших скоростях и проявляются сверхстранные эффекты.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 03.01.2012 (Вт) 18:09

Хакер писал(а):Почему бы нельзя организовать расчёт «одновременно», а не итеративно.

Всё можно, просто делать два прохода рассчёта - в первый рассчитывать воздействия, во второй их вносить. Я поздно заметил.
Но можно вполне считать такое поведение реалией нашего виртуального мира, это не сильно мешает программировать поведение робота. И, повторяю, это никак не зависит от времени в системе.
Тем более не хочу вносить изменения, так как народ уже вовсю соревнуется, Apati с GcUp сделал 47852:
http://gcup.ru/go?http://rghost.ru/35723396
К тому времени, как эта задача "выдохнется", постараюсь подготовить новую, более корректную физически.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Управление роботом. Миниконкурс.

Сообщение Хакер » 03.01.2012 (Вт) 18:52

Mikle писал(а):И, повторяю, это никак не зависит от времени в системе.

Пусть так.

Mikle писал(а):Тем более не хочу вносить изменения, так как народ уже вовсю соревнуется, Apati с GcUp сделал 47852:

Возможно на правильной физике будет ещё больший результат. Но вообще: в чём прикол соревноваться на неадекватной физике? :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Управление роботом. Миниконкурс.

Сообщение Mikle » 04.01.2012 (Ср) 21:09

Мой рекорд - 53053:
http://www.gamedev.ru/files/?id=74548


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList