день технологий Microsoft, 17 апреля на ВМК
а где хавчик?
http://microsoft.cs.msu.ru появилась новая версия плана и архив для желающих поучаствовать в AI Battle.
На страничке
В архиве для AI Battle лежит программа GameStarter, которая слетает по null reference exception. По крайней мере, у меня. Кому-то удалось запустить?
Есть подозрение, что она требует установленного Managed DirectX, но я это ещё не проверил.
+1 все время вылетает
А ссылку на прогу можно?
+1
Просит Microsoft.DirectX
Действительно, нужно установить Managed DirectX. Правда товарищу с GeForce'ом каким-то стареньким (типа MX 400) это помогло, а у меня какой-то другой Exception вылетает (Intel 852GM). Хотя, версии Managed DX у нас наверно разные
А их Sample-ы дико глючат, только после исправления 3 багов стали работать как описано в их же комментариях
далее между своим exe-шником и своим sample-ом делаешь общую static-переменную, в которую и пишешь отладочные сообщения.
AI Battle отложили. Завтра состоится только анонс этого состязания )
А уж скорость ракеты вычислить не смог вовсе
AI Battle отложили. Завтра состоится только анонс этого состязания )Хехе.
Чо ж это Сергей Борисович всё пытается на тредах систему построить? Ещё в прошлый раз было абсолютно понятно, что отстой жуткий.
А как правильно?
callback?
дискретное время и ходы по очереди через каллбаки наверно.
Эмулятор считает время, затраченное на вызовы этих методов у различных Искуственных Интелектов, интерполирует состояние мира по Виртуальному Времени и применяет полученные команды. Ещё отдельный тред работает вотчдогом. Ещё иногда отдельно рисуется результат. Но при этом всё однотредовое.
Пример работы.
ai1.GetNewOrders(currentWorldState) | заняло 5 мс
ai2.GetNewOrders(currentWorldState) | заняло 7 мс
Интерполируем мир до 5 мс, применяем приказы аи1
ai1.GetNewOrders(currentWorldState) | заняло 4 мс
Интерполируем мир до 7 мс, применяем приказы аи2
ai2.GetNewOrders(currentWorldState) | заняло 13 мс
Интерполируем мир до 9 мс, применяем приказы аи1
ai1.GetNewOrders(currentWorldState) | заняло 5 мс
Интерполируем мир до 14 мс, применяем приказы аи1
ai1.GetNewOrders(currentWorldState) | заняло 8 мс
Интерполируем мир до 20 мс, применяем приказы аи2
ai2.GetNewOrders(currentWorldState) | заняло 5 мс
Интерполируем мир до 22 мс, применяем приказы аи1
ai1.GetNewOrders(currentWorldState) | заняло 5 мс
...
Отдельный тред вотчдогом -- чтобы прибивать те ИИ, которые слишком долго думают?
Насчёт того что всё это одним тредом -- как ты предлагаешь вотчдог реализовать?
и в чем маза этого?
сейчас наоборот как раз полезнее делать многотредовые программы.
А то, что за дела, полкамня простаивать будет.
тут просто ai думают по-разному и интенсивно общаются - фигово это дело распараллелится.
в первом случае, при принятии решений мы имеем дело с меняющимся миром - что правильно
в твоем случае - мир получается застывший, что намного дальше от реальности.
Отдельный тред вотчдогом -- чтобы прибивать те ИИ, которые слишком долго думают?Да, единственный отдельный тред - вотчдог.
Насчёт того что всё это одним тредом -- как ты предлагаешь вотчдог реализовать?
кстати оригинальная идея (с отдельными тредами) - более интересная, чем твоя.Видишь ли, на самом деле там было три треда, один из которых - графика и "физика". Причём, насколько я помню, сделать его более высокоприоритетным создателям не удалось. Результат затмевал солнце. Я был удивлён, что оно вообще хоть как-то работало.
в первом случае, при принятии решений мы имеем дело с меняющимся миром - что правильно
в твоем случае - мир получается застывший, что намного дальше от реальности.
Виндовая многозадачность, к сожалению, не предназначена для справедливого разделения времени между реалтаймными задачами.
Если хочется недетерминированности - лучше её вводить ручками, в точно ограниченных дозах.
в первом случае, при принятии решений мы имеем дело с меняющимся миром - что правильноА, понял, что ты хотел сказать.
Можно инвертнуть систему: любой вызов метода мира (SetSpeed, Radar етс) продвигает виртуальное время (и может передать управление другому аи, если нужно).
То есть у АИ есть единственный метод Start, в котором бесконечный цикл. Вся система работает как-то так ("реальное время(+разница)/виртуальное время текущего аи")
0ms/0ms: world -> ai1.Start
5ms(+5ms)/5ms: ai1 -> world.Radar
world -> ai2.Start
7мс(+2ms)/2ms: ai2 -> world.Radar
мир продвигает общее виртуальное время до 2мс, возвращает результат ai2
9ms(+2ms)/4ms: ai2 -> world.SetSpeed;
мир продвигает общее виртуальное время до 4мс, изменяет скорость plane2
11ms(+2ms)/6ms: ai2 -> world.SetDirection;
мир продвигает общее виртуальное время до 5мс, возвращает результат радара ai1 (и управление тоже)
15ms(+4ms)/9ms: ai1 -> world.SetSpeed;
мир продвигает общее виртуальное время до 6ms, применяет plane2.SetDirection, возвращает контроль ai2
25ms(+10ms)/16ms: ai2 -> world.Radar;
мир продвигает общее виртуальное время до 9ms, применяет ai1.SetSpeed, возвращает контроль ai1.
(да, я понимаю, нелегко читать эти логи
ну и так далее. Что-то вроде хитроумной рекурсии получается, не пойму, как такое написать даже.
И программировать самолётики станет несколько сложнее (всё-таки удобно, когда получение всех параметров мира - атомарно).
не пойму, как такое написать даже.Ха, по-моему, никак. Разве что расковырять мсил и заменить все вызовы на джампы с ручной манипуляцией стеком.
Дайте ссылку на страницу на сайте, где про все написано. Никак найти сам не могу.
У меня координаты всех объектов почему-то нули.
Ни у кого такой проблемы не возникало?
ЗЫ. Кто-нибудь вообще собирается участвовать?
Я собираюсь, только предпоследняя версия у меня не работала )
У меня почему-то у всех объектов, которые находятся через
GetObjectsInRadius, все координаты нули (в предпоследней версии была такая же проблема).
ЗЫ. Остался .Net 1.1. Уж не могли под второй переделать. И как в 2003 студии можно было прогать.
Ты кстати как вычислил, что все нули? Т.е. ты как-то их вывести умудрился? А то я C# в первый раз вижу, и смог понять, что там все нули, только опытным путем (крутил константы и запускал. По поведению определял).
добавил форму в проект.
На форму кинул текстбокс.
При вызове метода Run создавал эту форму, а затем писал логи в текстбокс (в частности, координаты получаемых объектов).
Кстати. В рефлекторе смотрел код сервера и клиента. Они выводят сообщения в консоль.
Декомпилил север и клиент и перекомпиливал, чтобы они были консольными проложениями, но почему-то в консоль ничего не выводилось. Кто может сказать, почему?
ЗЫ. Вообще, подход к организации нулёвый. Видно, что энтузиазма нет ни у кого из организаторов.
Кстати. В рефлекторе смотрел код сервера и клиента. Они выводят сообщения в консоль.
Декомпилил север и клиент и перекомпиливал, чтобы они были консольными проложениями, но почему-то в консоль ничего не выводилось. Кто может сказать, почему?
Потому что ты что-то сломал
Прога работает, а в консоль ниче не выводит.
Декомпилил северДада, мы с Невским в прошлом году тоже декомпилили сервер =) Иначе в этих глюках ващеее не разобраться.
По теме - мб они в дебаг выводят? Или где-нибудь по пути вывод с консоли в файл перенаправляют?
Оставить комментарий
procenkotanya
источник: http://microsoft.cs.msu.ru (эта страничка ещё будет обновляться)пока что там есть только предварительная программа:
как и год назад, будет AI Battle -- имхо довольно интересное соревнование (запрогать ИИ для боевых машинок)