Jabber @udaff.com
i2008
i2008@conference.udaff.com
Суббота, 12 июля 2008< ^ >
Конфигурация комнаты

GMT+4
[00:30:17] <MikleB> ну что все прочли?
[00:30:35] <gpfault> прочёл
[00:33:01] <MikleB> что будем писать?
[00:47:28] keguar-ru вышел(а) из комнаты
[00:47:35] <Fly> А там реально всё через tcp/ip сокеты?
[00:47:55] <gpfault> да
[00:48:07] <Fly> Я могу это реализовать.
[00:49:12] <gpfault> надо вначале решить какой нужен интерфейс, ибо судя по таймаутам, будет нужна асинхронность
[00:49:35] <Fly> В смысле асинхронность?
[00:49:47] <gpfault> то есть одновременно ждать новой инфы от тарелки и просчитывать варианты
[00:50:27] <Fly> Можно два потока завести. Один на приём, другой на отдачу данных
[00:50:42] <gpfault> да, как-то так
[00:52:14] <Fly> Тогда я сейчас сделаю.
[00:54:10] <gpfault> для начала стоит обсудить модель общения тредов друг с другом, а также какое API для синхронизации использовать, если таковое понадобится
[00:56:02] <Fly> Например, входящие сообщения будут поститься в очередь сообщений.
[00:56:17] <Fly> Обрабатываться будут в одном потоке по порядку.
[00:57:10] <Fly> Отсылка сообщений думаю особого механизма не требует.
[00:57:26] <gpfault> да, мне тоже так кажется
[00:57:40] <Fly> Значит я это и пишу.
[00:57:52] <Fly> Если что, легко сменить будет.
[00:58:07] <gpfault> а метод синхронизации доступа к очереди?
[00:58:32] <Fly> Семафор и критическая секция.
[00:58:45] <Fly> Небоись, я класс сделаю.
[00:59:15] <gpfault> семафор тут может и не нужен даже, вроде volatile переменной хватить должно. Менять её только в секции, а читать где угодно
[00:59:17] <Fly> С функциями типа GetMessage и PeekMessage
[00:59:39] <Fly> Это может привести к десинхронизации
[00:59:52] <Fly> Я уже не раз такие очереди писал.
[01:00:04] <Fly> Тут у меня в основном копипаст будет.
[01:00:22] <Fly> Как прогу назвать?
[01:00:37] <gpfault> пофиг
[01:02:53] <gpfault> но вообще всё же нафига семафор?
помоему просто флаг "есть ли новые данные".
получили данные, зашли в секцию, поставили флаг, добавили данные, вышли из секции
увидели что флаг стоит, зашли в секцию, сняли флаг, перенесли данные к себе (насколько я понимаю их не много, можно тупо скопировать), вышли из секции
[01:07:08] <Fly> Проблема в том, что во время чтения может происходить запись.
[01:07:36] <gpfault> так оно же только в секции происходит
[01:07:49] <gpfault> а для флага - да, может
[01:07:51] keguar-ru вошёл(а) в комнату
[01:07:57] <Fly> Посмотрим.
[01:08:39] <gpfault> для флага в этом криминала нет, благо он булевский
[01:09:31] <Fly> Фишка в том, что если ты его захочешь сбросить в какой-то момент, в тот же момент кто-нибудь захочет его установить.
[01:09:58] <gpfault> нет. Вся запись флага происходит только в секции.
[01:10:08] <gpfault> вне секции - только его чтение
[01:11:21] <Fly> Да там всё время всякая херня происходит, если использовать незащищённую переменную.
[01:12:13] <Fly> А если они под линукс компиляют, то у них этот семафор будет?
[01:12:21] <gpfault> не всегда. тут явно больше 2х тредов не понадобится
[01:12:47] <Fly> ... и та же критическая секция.
[01:16:47] <gpfault> это ещё один вопрос - о том, какое api использовать. Можно или собрать на WinAPI и запускать под wine
или написать на posix api.
В общем, я думаю стоит сделать 4 глобальных процедуры
void InitOSSpecific();
void Lock();
void UnLock();
double getTimeInSeconds();
короче тут организаторы подложили много граблей просто так :(
[01:18:21] <Fly> Можно класс платформо-независимый.
[01:18:27] <Fly> Класс уже есть :)
[01:18:41] <Fly> Осталось добавить ему платформо-независимости
[01:19:23] <Fly> Ты под линуксом знаешь, как выглядит критическая секция?
[01:19:27] <gpfault> я сделаю linux-версию
[01:19:48] <Fly> Давай тогда я тебе класс через svn передам
[01:20:06] <gpfault> только мы ещё создание нити забыли
[01:21:14] <gpfault> void startThread(thread_func_type);
[01:21:27] <Fly> Для треда тоже есть класс
[01:23:02] <gpfault> ну можно и класс, хорошо залей в svn header
[01:23:16] <Fly> Блин, как к свн подключиться?
[01:23:46] <Fly> Пишет, could not connect to server svn.assembla.com
[01:24:13] <gpfault> у меня соединяет...
[01:25:54] <Fly> Блин, у меня прокся сдохла. :(
[01:26:44] <Fly> Блин, вот попросил вчера человека нормально проксю настроит, так он её сломал :(
[01:28:00] <Fly> Может новый свн создадим?
[01:28:06] <Fly> А то там ифы много
[01:28:21] <Fly> Мне очень дорого будет заново это всё выкачивать.
[01:28:25] <gpfault> впринципе можно всё почистить
[01:28:33] <Fly> Удали всё.
[01:28:36] <gpfault> ok
[01:29:34] <gpfault> готово
[01:30:28] <Fly> Куда заливать?
[01:30:52] <gpfault> в смысле? туда же
[01:30:58] <Fly> В какую папку?
[01:31:11] <gpfault> libs давай
[01:31:19] <Fly> ок
[01:33:06] <Fly> Залил
[01:34:00] <Fly> Thread.hpp и CriticalSection.hpp - это реализация через api
[01:34:28] <Fly> Handle.hpp - это надстройка над виндовым HANDLE
[01:34:44] <Fly> BaseThread - это надстройка над Thread
[01:34:55] <Fly> Для удобства
[01:35:26] <Fly> Object.hpp - это базовые классы для всего
[01:36:09] <gpfault> это конечно всё круто, но я не уверен что в этой задаче столько надо. Впрочем я посмотрю
[01:36:27] <Fly> Я к этому привык уже просто. :)
[01:38:10] <gpfault> я понимаю, только наверное разумней будет не это переносить, а реализовать поверх этого 5 функций, которые нам понадобятся:
void InitOSSpecific();
void Lock();
void UnLock();
double getTimeInSeconds();
void startThread(thread_func_type);
[01:41:01] <gpfault> thread_func_type==LPTHREAD_START_ROUTINE
DWORD (*LPTHREAD_START_ROUTINE) (void* lpThreadParameter)
[01:53:52] <Fly> Это что?
[01:54:45] <Fly> Сделай их. Я сам перенесу на свои исходники.
[01:54:54] <gpfault> ok
[01:55:23] <Fly> Только поток нужно создавать приостановленным.
[01:55:35] <Fly> И реализовать функцию ResumeThread
[01:56:16] <Fly> И ещё InitCriticalSection( &cs ) и DeleteCriticalSection( &cs);
[01:57:10] <gpfault> нафига нам это в нашей задаче???
[01:57:25] <gpfault> InitCriticalSection( &cs ) - это в InitOSSpecific
[01:57:42] <gpfault> DeleteCriticalSection - удалится в конце само
[01:58:18] <gpfault> насчёт приостановки подумать надо, может действительно надо
[01:59:45] <Fly> А в линуксе разве нету ResumeThread?
[01:59:51] <gpfault> есть
[01:59:57] <Fly> Ну, вот
[01:59:57] <gpfault> ну, аналог в смысле
[02:00:08] <Fly> Ну дак сделай
[02:00:12] <gpfault> ok
[02:00:18] <Fly> Критическая секция у нас же не одна будет.
[02:00:25] <gpfault> одна
[02:00:40] <Fly> Полюбому надо функцию создания и удаления.
[02:01:07] <gpfault> хорошо, уговорил, но имхо это нафиг нам не надо.
[02:02:02] <Fly> Я не думаю, что это так сложно пишется
[02:02:26] <gpfault> тогда сделаю 8 функций и 2 определения типа
[02:03:07] <gpfault> типы CriticalSection и ThreadFuncType
[02:05:46] MikleB вышел(а) из комнаты: Replaced by new connection
[02:05:46] MikleB вошёл(а) в комнату
[02:06:21] <Fly> Сделай хоть как :)
[02:16:30] <gpfault> залили описание API libs/osutils.h
[02:17:21] <gpfault> resume не будет ибо я не помню как (и оно нам не надо)
[02:20:34] <Fly> Надо
[02:21:01] <gpfault> в принципе оно конечно надо, но нам-то для чего?
[02:21:15] <Fly> У меня класс для потока его использует.
[02:22:02] <gpfault> ты неверно меня понял. это API стоит реализовать поверх твоего, а не наоборот.
[02:22:06] <Fly> Нужно это, чтобы поток не начал выполняться до того, как класс создастся
[02:22:36] <Fly> Да нет же. Моё - это надстройка над виндовым апи
[02:23:57] <Fly> А мы хотим апи-независимую прогу сделать.
[02:24:01] <Fly> Для этого и функции
[02:24:12] <Fly> Иначе мои классы нафиг не нужны
[02:24:16] <gpfault> я понимаю. полностью эмулировать виндовое api в достаточном для запуска твоих классов - смысла нет. там не только resumethread всплывёт
[02:24:45] <gpfault> нам надо 2 нити + 1 секция, всё.
[02:24:57] <Fly> Там только резюм нужет
[02:25:18] <Fly> У тебя хелпа нету что ли по апи?
[02:25:54] <gpfault> и ещё определение DWORD и всех отсальных типов из windows.h
[02:26:05] <gpfault> короче это не вариант
[02:26:10] <Fly> Да не нужно это
[02:26:42] <Fly> Нужно ТОЛЬКО резюмтред
[02:28:14] <gpfault> хорошо, согласен.
Ничего не мешает мне в CreateThread ничего не делать, а в resume создавать, так?
[02:28:50] <gpfault> прямого маппинга на соответсвующую функцию linux нет
[02:29:14] <gpfault> есть какая-то альтернатива по функционалу, но я забыл
[02:29:18] <Fly> Ладно, кароче сделай void startThread(thread_func_type);
[02:29:42] <Fly> Мне поправить будет быстрее, чем тебя уговорить.
[02:30:22] <Fly> Вообще прогу я уже написал :)
[02:30:40] <keguar-ru> уже 28 кило логов
[02:32:09] <MikleB> каких логов?
[02:32:21] <Fly> Чата видимо
[02:39:52] <Fly> А где LiveCD брать?
[02:41:44] <MikleB> http://icfpcontest.org/live-cd.html
[02:41:51] <gpfault> оно 600Мб
[02:41:57] <gpfault> и дико глючное
[02:42:48] <Fly> О.о
[02:42:53] <Fly> А как прогу тестать тогда?
[02:43:11] <gpfault> о,
http://smlnj.org/icfp08-contest/simulator.html
обновилось
[02:43:17] <Fly> Там есть тестовый сервак.
[02:43:21] <Fly> Он под livecd
[02:43:37] <Fly> Ты под линухой?
[02:43:50] <gpfault> я livecd себе поставил
[02:44:01] <Fly> У тебя ip белый?
[02:44:21] <gpfault> да
[02:44:31] <Fly> Я буду к тебе коннектиться :)
[02:45:12] <gpfault> ok, ща я перегружусь в linux, ибо этот livecd - ппц
[02:45:17] gpfault вышел(а) из комнаты
[02:49:24] gpfault вошёл(а) в комнату
[02:51:48] <MikleB> когда будете моск контроллера писать?
[02:52:03] <Fly> Когда выспимся :)
[02:53:00] <gpfault> да, это не раньше
[02:53:20] <gpfault> хост gpfault.no-ip.org
[02:53:32] <gpfault> 78.106.204.228
[02:53:39] <Fly> статический?
[02:53:46] <gpfault> нет
[02:53:55] <gpfault> при реконнетах меняется
[02:54:02] <Fly> ок
[02:54:32] <Fly> Запусти сервак на какую-нибудь мапу
[02:54:43] <gpfault> а с портом - не очень ясно что делать. Я тебе могу или сообщать или попробовать дать ssh-доступ
[02:54:51] <gpfault> 17676
[02:55:15] <Fly> Просто сообщай
[02:56:56] <gpfault> оно картинку рисует :)
[02:57:13] <Fly> Прога работает :)
[02:57:17] <Fly> Какую картинку?
[02:57:21] <gpfault> ERROR: Connection reset by peer (connreset)
GC type time ms number bytes bytes/sec
------------- ------- ------- --------------- ---------------
copying 935 4,764 163,099,040 174,437,475
mark-compact 0 0 0 -
minor 0 0 0 -
total GC time: 2,375 ms (12.9%)
max pause: 3 ms
total allocated: 1,610,590,064 bytes
max live: 43,764 bytes
max semispace: 364,544 bytes
max stack size: 1,760 bytes
marked cards: 0
minor scanned: 0 bytes
[02:57:30] <Fly> Я дисконнектился
[02:58:01] <Fly> Сейчас прога тупо печатает приходящие сообщения.
[02:58:14] <gpfault> похоже порт скорее не меняется, хоть это радует
[02:58:22] <Fly> Ну и ладно
[03:02:19] <MikleB> почитал я очем вы тут говорили и ниче не понял:(
[03:03:35] <Fly> А что конкретно не понятно?
[03:03:57] <MikleB> какие то секции и семафоры
[03:08:11] <Fly> Это для синхронизации потоков.
[03:09:33] <Fly> gpfault, функции оперирующие критическими секциями я встроил в свои классы.
[03:09:44] <Fly> Остально заюзаю.
[03:09:55] <Fly> Т.е. их можно оттуда удалить.
[03:11:42] <gpfault> я оттестиь их не успел, только проверил что компилируется, хотя конечно там мало где налажать можно, но всё же
прогу выложи
[03:13:17] <MikleB> вобщем я лучше буду помогать писать моск, остальное не интересно
[03:14:48] <Fly> Ща всё будет.
[03:19:56] <Fly> разве надо: unsigned ( *thread_func_type )( void * );
А не?: unsigned ( __stdcall *thread_func_type )( void * );
[03:20:17] <gpfault> я хз, честно
[03:21:15] <gpfault> если без него работает, то лучше бещ него
[03:22:55] <Fly> В винде он нужен
[03:23:45] <gpfault> ну раз без него не работает, оставь
[03:32:50] <Fly> У тебя сервак включён?
[03:33:54] <gpfault> включил
[03:34:56] <Fly> Работает.
[03:35:02] <Fly> Выкладываю.
[03:36:22] <Fly> Выложил
[03:36:42] <gpfault> запустил сервак циклически перезапускаться
[03:36:50] <Fly> Проверь компилябельность под линукс
[03:37:04] <Fly> А он выключается после дисконнекта? О.о
[03:37:25] <gpfault> да
[03:52:26] MikleB вышел(а) из комнаты
[04:14:50] <Fly> Ты скомпилял?
[04:15:28] <gpfault> почти
[04:15:34] <Fly> Это как?
[04:15:57] <Fly> Если какие-то ошибки, то ты мне говори
[04:15:58] <gpfault> это значит что 95% несовметимостей поправил, осталась одна видимо
[04:16:14] <gpfault> нет, не ошибки а просто другое API метами
[04:16:25] <Fly> Для линукса?
[04:16:35] <gpfault> да
[04:16:39] <Fly> Ясно
[04:16:57] <Fly> Кароче, я спать.
[04:17:09] <gpfault> скомпилил, только оно похоже не пашет :(
Где-то API отличается и по логике
[04:17:27] <Fly> Завтра разберёмся
[04:17:34] <gpfault> да
[04:47:16] <gpfault> всё оказалось довольно просто - для critical section был нужен рекурсивный мьютекс, теперь всё работает - /Solution/linux
правок довольно много, под виндой не проверял, но старался чтоб ничего не попортилось
[04:47:46] gpfault вышел(а) из комнаты
[08:59:18] Fly вышел(а) из комнаты
[12:47:38] gpfault вошёл(а) в комнату
[12:49:40] MikleB вошёл(а) в комнату
[13:00:21] <MikleB> что такое hard turn?
[13:00:21] keguar-ru вышел(а) из комнаты
[13:00:48] <gpfault> hard turn видимо насколько я понял просто поворот с другой угловой скоростью
[13:01:15] <gpfault> но в любом случае, при повороте угловая скорость меняется не мгновенно
[13:01:35] <MikleB> а углового ускорения нету?
[13:01:44] <MikleB> всмысле =0 ?
[13:02:34] <gpfault> оно есть иможет меняться в неких пределах при получении команд на поворот
[13:02:49] <gpfault> но узнать/задать явно мы его не можем
[13:08:03] <MikleB> а ты думал как писать контроллер?
[13:09:49] <gpfault> честно говоря идей довольно мало. Для начала взять простой случай - марсиан нет, только рельеф. Соответственно есть заданный в некотором виде лабиринт, в котором надо пройти в заданную точку.
[13:10:54] <gpfault> формат его внутреннего представления видится мне в виде набора треугольников с вершинами в центрах объектов
[13:11:15] <MikleB> зачем
[13:11:33] <gpfault> затем, что других идей у меня нет :)
[13:11:44] <MikleB> там надо как то по касательным идти
[13:11:58] <MikleB> получится граф и на нем дейкстру
[13:12:07] <MikleB> но это без учета возни со скоростями
[13:12:54] <gpfault> а как ты будешь определять где вообще можно пройти, а где нет?
[13:13:31] <MikleB> ну это проблема)
[13:14:36] <MikleB> а если в эллепс попадает кусочек кратора но центр кратора нет, то этот кратер ровер видит?
[13:15:10] <gpfault> без понятия, надо будет проверить на имеющемся сервере, но это я думаю непринципиально
[13:15:11] <MikleB> эллипс*
[13:16:39] <MikleB> а если ровер врезается то он отскаивает или просто скорость обнуляется?
[13:17:14] <gpfault> отскакивает с уменьшением скорости
[13:19:04] <MikleB> странно что угловое ускорение может быть не постоянно а линейное постоянное
[13:21:13] <gpfault> линейное ускорение тоже зависит от скорости
[13:23:25] <MikleB> ну я про "a"
[13:23:37] <MikleB> без учета трения
[13:23:48] <gpfault> а с чего ты взял, что угловое не постоянно?
[13:24:07] <MikleB> ээ, я наверно тебя не правильно понял
[13:24:26] <gpfault> это просто неизвестно
[13:24:58] <MikleB> а формула для угловой скорости такая же тока там "a" и "k" другие?
[13:25:26] <gpfault> формула неизвестна
[13:25:47] <MikleB> фигова
[13:33:03] <MikleB> а скора у вас все будет готово чтобы писать контроллер?
[13:39:07] <gpfault> по идее - да.
насколько я понимаю всё выглядит как-то так. Будет vector<событие в каком-то виде>, в которой записана вся полученная на данный момент информация.
также есть процедура int recieveMoreEvents(vector<событие в каком-то виде>) которую надо периодически вызывать и она, возможно допишет новые событияи вернёт сколько дописала. Ну и void SendCommand(команда в каком-то виде)
"событие в каком-то виде" и "команда в каком-то виде" в первом приближении тупо union у которго есть поле char type, определяющее его тип
[13:40:07] <gpfault> ну ещё изначальные данные в структуре даны
[13:42:08] <MikleB> и еще впрос ровер провалится в кратер если он его заденет или центр попадет в кратер?
[13:43:07] <gpfault> когда центр
[13:43:49] <gpfault> В общем кратеры можно в некотором смысле считать теми же столбами только радиусом на РАДИУС_РОВЕРА меньше
[13:44:18] <MikleB> ясно
[14:00:07] Fly вошёл(а) в комнату
[14:10:30] <gpfault> Fly, ты уже редактируешь прогу? Если нет, то я сейчас добавляю в ту версию что лежит в Solution/linux , в частности типы для сообщений и их разбор (уже в процессе)
Если да, то мне наверное стоит остановиться.
[14:11:25] <Fly> Пока только смотрю
[14:13:46] <Fly> Ты добавляй пока. Я новую скачаю.
[14:14:21] <gpfault> ok
[14:23:29] <Fly> Ты запостил?
[14:24:41] <gpfault> да
[14:24:54] <gpfault> то что на данный момент
[14:25:20] <Fly> Я там маленькое исправление сейчас внесу. Можно?
[14:25:50] <gpfault> пожалуйста,я надеюсь svn разберётся
[14:26:11] <gpfault> я сейчас только Connection.h редактирую и всё
[14:26:53] <Fly> Его и я буду :)
[14:27:32] <gpfault> хорошо, тогда я его пока не трогаю
[14:27:41] <Fly> Всё, запостил.
[14:28:03] <Fly> Надо свн почистить
[14:28:07] <Fly> Удалить libs
[14:28:23] <Fly> И перенести текущую версию решения в Solution
[14:28:32] <Fly> Из подпапки linux
[14:28:36] <Fly> Сделаешь?
[14:28:41] <Fly> И мне самому?
[14:28:47] <gpfault> сделаю
[14:28:57] <Fly> ок
[14:29:55] <Fly> Ты хотя бы открывающую фигурную скобочку на новую строчку ставь. А то код вообще нечитаемый.
[14:36:18] <gpfault> перенеслось всё вроде
[15:10:48] keguar-ru вошёл(а) в комнату
[15:29:59] <MikleB> пора моск писать!!!!
[15:30:18] <keguar-ru> вы уже писали симулятор?
[15:33:37] <gpfault> симулятор на сайте лежит и крутится у меня на gpfault.no-ip.org порт 17676
или о каком симуляторе ты?
[15:33:57] <keguar-ru> я о симуляторе, на котором видно что происходит.
[15:34:06] <gpfault> там видно
[15:34:24] <keguar-ru> он случайно не внутри ливсиди?
[15:35:08] <gpfault> случайно он на это и рассчитан да :(
[15:35:47] <keguar-ru> пиздец
[15:36:02] <gpfault> ещё из него ошибки иногда сыпятся
[15:48:29] <gpfault> MikleB: насчёт мозга - посмотри заголовочный файл Connection.h
структуры там определены. Также определены функции
int GetAllEvents(std::vector<RoverEvent>& evs);
bool PutMessage(const RoverCmd& c);
больше для мозга ничегоне нужно.
мозг должен реализовывать на основе этого хедера елинственную функцию
void ManageRover();
к тому времени, как напишется первая предварительная компилябельная версия мозга я допишу их до конца их реализацию (это уже почти) и вывод структур на экран.
[15:49:53] <MikleB> так не ясно как писать моск
[15:50:00] <MikleB> пора думать как писать моск!
[15:50:29] <gpfault> это да...
[15:50:34] <Fly> Может задать функцию веса?
[15:51:28] <keguar-ru> там неясен характер движений ровера
[15:51:43] <Fly> Типа марсианцы и кратеры имеют отталкивают от себя марсоход. Камни отталкивают марсоход чуть меньше, а начальная станция притягивает марсоход.
[15:52:17] <keguar-ru> ровер ведь не по всякой траектории двигаться сможет
[15:52:20] <MikleB> марсиане убивают ровер
[15:52:43] <Fly> Миша, я про функцию веса говорю.
[15:53:13] <MikleB> это я так на всякий случай
[15:53:49] <Fly> Получаем результирующую силу, действующую на марсоход в данный момент времени и поворачиваем/учкоряем/замедляем его в соответствие с этой силой.
[15:54:07] <Fly> Правда в этом случае из сложных ситуаций он не выберется.
[15:54:10] <gpfault> да, но к этому притягиванию-отталкиванию нужно как-то ещё учесть глобальную структуру
[15:54:37] <gpfault> он может прийти в какой-то локальный мининимум, не являющийся домом
[15:54:46] <MikleB> надо еще какую то функцию распределения дл марсиан написать
[15:54:51] <Fly> Нам карта изначально всё равно не известна :)
[15:55:10] <keguar-ru> пока ровер катается, она становитсяф известна
[15:56:00] <MikleB> тем более даже если марсиан нет, то такая стратегия может ваще не привести к ханке
[15:56:19] <Fly> Почему?
[15:56:33] <MikleB> упрется в круг и будет долбится в него
[15:57:04] <Fly> Все объекты его ооталкивают.
[15:57:18] <MikleB> ну оттолкнут а он поять подкатит
[15:57:33] <MikleB> если центр круга между ним и базой
[15:57:43] <gpfault> он может застрять в локальном минимуме и будет там стоять, ждать пока его не оттолкнёт пришедший марсианин :)
[15:57:43] <MikleB> опять*
[15:57:57] <Fly> Ну да:)
[15:58:24] <keguar-ru> можно случайные колебания ввести
[15:58:27] <MikleB> а можно како нить генетический алгоритм написать
[15:59:20] <gpfault> но возможно среди движений следует выбирать только те, где направление движения параллельно градиенту весовой функции
[15:59:32] <Fly> Не факт
[15:59:43] <Fly> Тогда он точно застрянет
[15:59:56] <gpfault> да..
[16:01:07] <gpfault> наверное всё же стоит рассматривать это как лабиринт из треугольников, рассмотреть разные пути к дому и среди них выбирать по весовой функции
[16:01:17] <MikleB> может сперва решить как быть без марсаин(как говрил Вася)?
[16:01:43] <gpfault> а локальное поведение внутри одного треугольника определять по весовой функции
[16:02:05] <MikleB> так проблема в том что карта не известна
[16:02:39] <gpfault> ориентироваться на известную часть в каждый момент
[16:03:08] <MikleB> надо учитывать такие факторы что если есть два неизвестных прохода (один узкий а другой широкий, то лучше пойти в широкий (даже если это дольше) и т п
[16:04:28] <Fly> Можно так. На каждом шаге строить ломаную - путь домой. А марсоходу говорить двигаться как можно ближе к этой ломаной
[16:04:43] <MikleB> да
[16:04:53] <MikleB> тока как ломаную построить
[16:05:04] <keguar-ru> ну вы и напридумывали :-)
[16:05:52] <MikleB> и ваще цель не дойти до дома а полчить минимальное мат ожидание очков)
[16:06:35] <keguar-ru> поэтому в случае чего надо бросаться в кратер ))))
[16:06:36] <gpfault> да, если становится ясно что домой без шансов надо просто прятаться :)
[16:06:52] <Fly> Скажем так: Вокруг каждого объекта ставим N контрольных точек на расстоянии 0.6m от объекта каждые 10°. Далее по всем контрольным точкам деёкстру.
[16:07:28] <MikleB> ты че
[16:07:39] <Fly> А чё? :)
[16:07:40] <keguar-ru> хотя Вася прав - надо прятаться)
[16:07:44] <MikleB> легче по касательным
[16:07:53] <gpfault> тогда получится, что он обязательно будет ходить около объектов
[16:07:56] <Fly> Марсоход - не мат.точка
[16:07:57] <keguar-ru> почему-то попасть к марсианам лучше чем упасть в кратер
[16:08:03] <MikleB> мат точка
[16:08:06] <MikleB> там все круглое
[16:08:19] <MikleB> радиусы подправить и он матточка
[16:08:32] <keguar-ru> два камня могут очень близко стоять, и ровер туда может не пролезть
[16:09:01] <Fly> Можно контрольные точки ставить равномерно по всему полю, если они находятся не ближе чем 0.6m от близжайщего объекта.
[16:09:04] <MikleB> ну норм
[16:09:12] <MikleB> тогдва два камню будут пересек окр
[16:10:08] <gpfault> а не слишком много точек? Может вначале прикидывать приблизительную траекторию по центрам треугольников и серединам их сторон?
[16:10:29] <Fly> А если нету треугольников?
[16:10:42] <Fly> Или через середину проходить не выгодно - долго?
[16:11:03] <Fly> Это также как точки расставлять только вокруг объектов.
[16:11:20] <gpfault> да...
[16:11:56] <Fly> А размеры карты известны?
[16:11:57] <gpfault> тогда наверное действительно лучше только вокруг объектов.
[16:12:00] <MikleB> чем растановка точек лучше кастельных?
[16:12:23] <gpfault> размеры сообщают во время выполнения
[16:12:40] <Fly> Миша, дело в том, что тут не пошаговость, а реалтайм. Пока ты будешь строить касательные, марсоходу уже в кратек свалится.
[16:13:04] <MikleB> ну а точки то вокруг чем тут помогут?
[16:13:41] <Fly> По ним будем строить путь, к которому будем бесконечно приближаться.
[16:14:11] <MikleB> так путь можно и по касательным построить
[16:14:24] <MikleB> к которому будем приближаться*
[16:14:26] <Fly> Кстати, если точки равномерно распределены, то можно дейкстру за N log N писать.
[16:14:42] <MikleB> Это то само собой)
[16:14:46] <Fly> Касательные - это слишком близко :)
[16:15:03] <MikleB> ну касательные всмысле к окружностям с радиусами +eps
[16:15:43] <keguar-ru> может A*? ))
[16:15:46] <Fly> Тогда всё равно не совсем понятно, как ты при помощи касательных будешь камень огибать.
[16:16:20] <keguar-ru> правда его сглаживать надо будет.
[16:17:11] <MikleB> ну взвисмотси от ребар будем приьалять длину дуг
[16:17:16] <MikleB> ребер*
[16:17:23] <MikleB> прибавлять*
[16:17:42] <MikleB> так точнее и считать меньше
[16:25:19] <MikleB> а еще насчет маршрута к которому все время надо приближаться
[16:25:31] <MikleB> ясно что каждый раз его надо заного пересчитывать
[16:25:47] <MikleB> поэтому это тоже самой что идти по найденному маршруту
[16:26:12] <MikleB> any body hear?
[16:26:19] <keguar-ru> не каждый раз, а когда новые препятствия найдены, наверное
[16:26:26] <MikleB> нет
[16:26:36] <MikleB> то что препятсвия не найдены - тоже информация
[16:27:59] <keguar-ru> да, но если препятствия не найдены, то оптимальный путь не изменяется
[16:28:10] <keguar-ru> а ровер уже съехал с ломаной
[16:28:13] <MikleB> значит он не потимально строися
[16:28:18] <MikleB> не потимально*
[16:28:26] <Fly> Кстати его здорово корректируют марсианци, перемещаясь по полю.
[16:28:41] <MikleB> его все что тока можно коректирует
[16:28:52] <keguar-ru> с марсианами вообще мало что понятно.
[16:29:23] <keguar-ru> непонятно какого они размера, как двигаются, как на ровер реагируют, кучкуются ли итд
[16:29:47] <Fly> Там написано, что размера они 0.4 и двигаются аналогично.
[16:29:54] <MikleB> вобщем ели пока заиьб на марсиан, как учитывать те места которые не были увидины?
[16:30:10] <MikleB> тупа считать что там нифга нет препятсвий не правильно
[16:30:54] <Fly> По-моему правильно
[16:31:47] <MikleB> как тут картинки прислыать?
[16:32:18] <Fly> Через свн
[16:32:27] <keguar-ru> в условии не сказано как они двигаются, как реагируют на ровер и как кучкуются.
возможно они тупо бегут на ровер)
[16:32:46] <gpfault> или от него )))
[16:33:04] <Fly> Наверно тупо случайно перемещаются.
[16:34:42] <keguar-ru> и падают в кратеры... )
[16:35:05] <Fly> А они друг друга зохавать могут?
[16:36:02] <MikleB> нет
[16:36:16] <Fly> Жаль
[16:37:18] <keguar-ru> там кстати написано, что между триалами можно запоминать местность :)
[16:37:45] <Fly> Что за триалы?
[16:37:48] <MikleB> я картинку залил
[16:38:08] <keguar-ru> триал = 5 запусков на одной карте
[16:38:13] <MikleB> это круто
[16:38:27] <keguar-ru> между запусками прогу не перезапускают просто.
[16:39:41] <keguar-ru> initialization message is sent once per trial.
[16:39:47] <MikleB> я залил картинку где видно почему не выгодно тупо считать что там где ниче не известно нету препятсвий
[16:41:08] <Fly> Ты всё равно заранее к этому готов быть не можешь.
[16:41:20] <Fly> Препятствие могло быть и справа.
[16:41:55] <MikleB> зато я знаю что слева проход шире
[16:42:01] <keguar-ru> учитывая что там 5 запусков на однгой карте, можно сделать разведку :)
[16:42:20] <gpfault> ну а что ещё можно про то место сказать? можно оуенить плотность препятствий на известной местности и исхъодя из этого считать что там их присерно стольео же и в соотвествии с этим выбирать между "известно что нет препятствий" и "ничего не извстно"
[16:42:21] <MikleB> тоесть справа*
[16:42:26] <keguar-ru> результат триала расчитывается исходя из 3ех лучших попыток.
[16:43:13] <gpfault> точно? я такого не видел...
а среди них что делается?
[16:43:29] <MikleB> суммируется
[16:44:05] <MikleB> просто за то время которой выделют может карту толком и не разведять
[16:44:10] <MikleB> которое*
[16:44:51] <keguar-ru> это я к тому, что невыгодно тупо по одной траектории все 5 попыток ездить
[16:45:19] <MikleB> тракетория одна не будет хотябы по тому что монстры двигаются:)
[16:45:45] <keguar-ru> а кто сказал что они двигаются не одинаково?)
[16:45:58] <MikleB> ))
[16:46:04] <gpfault> а начальная позиция - разные вроде
[16:46:57] <Fly> Да там и характеристики марсохода размими могут быть.
[16:47:09] <keguar-ru> initialization message is sent once per trial.
[16:48:55] <keguar-ru> хотя это и не отменяет того что вы сказали
[16:49:46] <keguar-ru> хотя вот что еще написано.
[16:50:10] <keguar-ru> the exact characteristics are unspecified and may differ between trials
[16:50:50] <keguar-ru> могут ли различаться между запусками в одном триале - не пишут.
[16:52:28] <keguar-ru> each run of the trial uses the same map, although the rover's initial position and number&location of martians can vary from run to run
[16:54:47] <MikleB> это пофиг
[16:54:56] <MikleB> главное что карта одна
[16:55:39] <keguar-ru> это я на всякий случай: вдруг кто-то еще невнимательно читал условие )
[16:56:28] <MikleB> а еще можт быть что будет более длинный путь но на котром неизвестной территории меньше чем на более коротком
[16:57:46] <MikleB> может правда нескольо раз сделать несколько случайных растановок кратеров и камней и найти пути, и выбрать что то среднее)
[17:03:46] keguar-ru вышел(а) из комнаты
[17:04:01] keguar-ru вошёл(а) в комнату
[17:07:42] <MikleB> чето тихо..
[17:18:46] <Fly> В кратер прыгать совсем не выгодно. :)
[17:18:58] <Fly> Выгоднее дождаться таймлимита.
[17:19:13] <MikleB> ага
[17:23:21] <Fly> > In addition, the LiveCD includes libWine to support some Windows executables.
[17:23:30] <Fly> ^_^
[17:23:42] <Fly> Может под винду будем всё компилять?
[17:24:51] <gpfault> можно
[17:25:33] <gpfault> только вроде бы конкретно с 2005 студией wine не очень дружит :(
проверять надо
[17:28:48] <MikleB> когда над мозгом то думать будете?:)
[17:36:53] <Fly> Да мы только о нём и думаем
[17:39:05] <MikleB> тут одна комнада уже пазфайндинг вовсю пишет
[17:40:04] <Fly> Какая?
[17:41:30] <MikleB> с шарпом
[17:41:37] <MikleB> и другими вмкашниками
[17:45:35] <MikleB> мы отстаем!
[17:45:57] <gpfault> на тех картах что они предоставили, марсиане подходят близко, но не атакуют
[17:48:28] <MikleB> так мы пока и без марсиан ниче нормального не придумали
[18:22:29] <MikleB> помоему вы теренровку намного активнее писали)) (по крайней мере судя по чату)
[18:27:33] keguar-ru вышел(а) из комнаты
[18:27:46] keguar-ru вошёл(а) в комнату
[18:28:10] <MikleB> есть тут кто???
[18:28:20] <keguar-ru> Миша просил меня написать здесь что-нибудь :)
[18:29:21] <gpfault> есть. У них похоже сервер не зря сыпет сообщения об ошибке - он иногда почему-то после 3х ранов останавливается
[18:34:12] <gpfault> не, это я напутал
[18:34:42] <MikleB> так у них все норм?
[18:34:48] <gpfault> да
[18:34:53] <gpfault> я правильно понимаю что ранов на испытаниях всегда 5?
[18:35:14] <keguar-ru> вроде да
[18:35:52] <gpfault> вот-вот а вот на картах для сервера почему-то меньше, от этого я и на путал
[18:36:20] <keguar-ru> у них всегда по 5 будет
[18:41:45] MikleB вышел(а) из комнаты: Replaced by new connection
[18:41:45] MikleB вошёл(а) в комнату
[19:02:25] MikleB вышел(а) из комнаты
[19:09:13] <gpfault> обёртка для мозга + тестовый мозг, который просто шатается "в пьяном виде" готовы
[19:14:57] MikleB вошёл(а) в комнату
[19:15:33] <MikleB> а что теперь?
[19:22:22] <MikleB> может правда тупо с весами написать и все?
[19:22:58] <gpfault> возможно, вначале можно не учитвать глобальную структуру
[19:31:44] <MikleB> всмысле учитывать только то что сейчас видит, или только то что видел?
[19:32:30] <gpfault> учитывать-то всё, но анализировать только локальную структуру
[20:00:34] MikleB вышел(а) из комнаты
[20:25:59] <gpfault> насколько я понимаю, задача управления ровером в любом случае разбивается как минимумна 2:
1)непосредственно приняте решений (веса в в простейшем случае - они в любом случае всё равно будут использоваться для локального управления)
эта часть говорит "надо идти сюда"
2)программирование ровера с учётом его характеристик для достижения поставленной 1-й частью цели
[20:26:47] <gpfault> какие ещё есть идеи соображения?
[20:31:25] <Fly> Я думаю, что надо каждому писать свой вариант, а потом выберем лучший.
[20:31:37] <gpfault> можно и так
[20:34:32] <gpfault> хотя тут есть некоторая проблема - определение отношения "<" :)
вообще если у тебя на данный момент что-то есть (пусть и не доделанное), я бы глянул
[20:43:55] <keguar-ru> вы уверены что организаторы учитывают только одно решение для определения победителя?
[20:47:08] MikleB вошёл(а) в комнату
[20:55:36] <MikleB> каждый пишет свой вариант?
[20:55:58] <keguar-ru> Миша, скачай livecd
[20:56:07] <keguar-ru> и виртуальную машину
[20:58:01] <MikleB> это гиг скачавать?
[20:58:22] <keguar-ru> я не знаю как без симулятора писать.
[20:59:07] <keguar-ru> а симулятор в ливсиди.
[20:59:15] <MikleB> а откуда качать вирутальную машину?
[20:59:24] <MikleB> их наверно много разных бывает
[20:59:31] <MikleB> какая лучашая?
[20:59:49] <keguar-ru> у меня есть vmware6, 270 метров
[21:00:53] <keguar-ru> лучше на торрентах поискать.
[21:01:40] gpfault вышел(а) из комнаты
[21:04:47] gpfault вошёл(а) в комнату
[21:09:19] <MikleB> а что потом со всем этим добром делать?
[21:09:46] <keguar-ru> запустить там симулятор )
[21:10:01] <keguar-ru> у меня пока 50% скачалось
[21:11:16] <MikleB> а марсиане в тестре уже готовые?
[21:11:26] <MikleB> их туда запрогать можно?
[21:11:47] <keguar-ru> симулятор принимает на вход описание карты.
[21:12:00] <gpfault> нет, нельзя. Только такие какие уже есть
[21:13:10] <MikleB> ваще гемор это прогу писать
[21:13:22] <keguar-ru> там есть какие-то ограничения на минимальный размер препятствий?
[21:13:30] <MikleB> куча всякой гадости которая мешает
[21:14:27] <gpfault> вероятно, ограничений нет
[21:15:27] <keguar-ru> мне понравилась Мишина идея с дейкстрой по очертаниям объектов
[21:16:39] <keguar-ru> дейкстра за квадрат работает, верно,
[21:16:40] <keguar-ru> ?
[21:17:29] gpfault вышел(а) из комнаты
[21:17:51] <MikleB> лучше писать за mlogn
[21:17:56] <MikleB> с кучей
[21:18:09] <MikleB> но для начала за n^2 сойдет)
[21:18:19] <MikleB> тока там придется вершины размножать
[21:18:25] <keguar-ru> N = совокупная длина контуров всех препятствий
[21:18:40] <MikleB> n - количество препятсвий
[21:18:52] <MikleB> тоесть число вершин
[21:18:56] <MikleB> m число ребер
[21:19:20] <MikleB> но тут число вершин = числу препятсвий в квадрате)
[21:19:43] gpfault вошёл(а) в комнату
[21:19:45] <keguar-ru> нам же нужно учитывать размеры объектов
[21:20:04] <MikleB> * n - количество препятсвий - это я ошбся
[21:20:18] <MikleB> да
[21:20:27] <MikleB> для сложности это не важно
[21:21:39] <keguar-ru> что-то тогда многовато может быть вершин
[21:22:11] <keguar-ru> в графе
[21:22:19] <MikleB> ага
[21:24:31] <keguar-ru> Вася, а ты смотрел карты с их сайта?
[21:24:32] <MikleB> блин загрузка сдохла
[21:25:15] <gpfault> да, там 2 совсем простые и на одной разбросано дофига всего
[21:25:30] <keguar-ru> с какой плотностью?
[21:26:12] <keguar-ru> насколько там широкие щели между препятствиями?
[21:26:23] <MikleB> вооще в жмзнм там не равномерная плотнсоть)
[21:26:23] <gpfault> в 3-4 раза шире препятствий
[21:26:40] <keguar-ru> т.е. там можно страивать ралли? ))
[21:26:52] <gpfault> легко
[21:27:26] <keguar-ru> а сколько препятствия численно? каковы размеры карты?
[21:29:24] <gpfault> карта - 200-500, препятствия 0.1 - 20
[21:29:41] <keguar-ru> сколько их по колличеству на карте?
[21:29:52] <keguar-ru> на вскидку конечно )
[21:30:35] <gpfault> 200
[21:31:05] <keguar-ru> n^2 идет лесом :-)
[21:31:22] <keguar-ru> (200*100)^2 ...
[21:31:48] <gpfault> а 100 то откуда? нафига 100 частей?
[21:32:12] <keguar-ru> ну если радиус хотя бы 3 ед., то длина окружности уже 20
[21:32:29] <keguar-ru> учитывая что нужно некоторая точность, 1 точки на 1 ед. не достаточно.
[21:33:11] <gpfault> точность нафиг не нужна в начале.
[21:33:28] <gpfault> надо определить приблизительно лучшую траекторию
[21:34:26] <keguar-ru> хотя я ступил наверное.
нужно же делать траектории по касательным к препятствиям, так что 100 нафиг не нужно.
[21:34:38] <keguar-ru> Миша ты где)
[21:36:18] <MikleB> тут
[21:36:57] <keguar-ru> выскажи свое мнение))
[21:37:11] <MikleB> вы не учитываете что важно откуда ровер зашел на окружность
[21:39:52] <keguar-ru> не понимаю что ты хочешь сказать
[21:40:25] <MikleB> то что вершин число препятствий^2
[21:42:25] <MikleB> так что (200*200)^2 будет если простую дейкстру писать
[21:42:59] <MikleB> и она не учитывает движение марсиан
[21:46:26] <MikleB> помоему невозможно что нибудь нормальное написать
[21:47:11] <keguar-ru> понятно теперь
[21:47:20] <keguar-ru> у мну ливсиди уже запустился)
[21:48:39] <MikleB> ты его с их сайта скачал?
[21:48:45] <keguar-ru> да.
[21:48:53] <keguar-ru> но видимо не эксплорером)
[22:14:40] <keguar-ru> организаторы безмозглые идиоты
[22:16:08] <MikleB> ?
[22:16:48] <keguar-ru> они рисуют свою мегасимуляцию через OpenGL
[22:16:58] <keguar-ru> и поэтому это нихрена не работает в vmware
[22:18:14] <MikleB> и чтож делать?
[22:18:35] <MikleB> есть другая виртмашина где opengl работает?
[22:18:59] <keguar-ru> есть ли у организаторов мозги
[22:29:16] <keguar-ru> щас попробую записать ливсиди на cdrom и запустить на ПК
[22:30:04] <MikleB> а у тебя на пк линукс?
[22:30:12] <MikleB> чтож мне то делать тогда
[22:30:24] <keguar-ru> нет, линукс запускается с ливсиди
[22:35:03] <MikleB> а зачем тогда виртмашина?
[22:35:40] <keguar-ru> я думал что их творчество будет работать под виртмашиной, но этого не случилось
[22:38:37] gpfault вышел(а) из комнаты
[22:41:22] gpfault вошёл(а) в комнату
[23:20:32] <keguar-ru> ливсиди что-то с трудом стал рисовать, теперь можно попрогать)
[23:24:11] <gpfault> тогда немного о структуре того что там сейчас есть - все глобальные данные являются членами GlobalInfo gi;
[23:25:25] <gpfault> ещё туда надо будет добавить массив всех известных объектов
ejabberd/mod_muc logValid XHTML 1.0 Transitional Valid CSS!