день технологий Microsoft, 17 апреля на ВМК

procenkotanya

источник: http://microsoft.cs.msu.ru (эта страничка ещё будет обновляться)
пока что там есть только предварительная программа:

как и год назад, будет AI Battle -- имхо довольно интересное соревнование (запрогать ИИ для боевых машинок)

vall

а где хавчик?

procenkotanya

На страничке http://microsoft.cs.msu.ru появилась новая версия плана и архив для желающих поучаствовать в AI Battle.

zorin29

В архиве для AI Battle лежит программа GameStarter, которая слетает по null reference exception. По крайней мере, у меня. Кому-то удалось запустить?

procenkotanya

Есть подозрение, что она требует установленного Managed DirectX, но я это ещё не проверил.

tashka

+1 все время вылетает

evgen5555

А ссылку на прогу можно?

timefim

+1

evgen5555

Просит Microsoft.DirectX

procenkotanya

Действительно, нужно установить Managed DirectX. Правда товарищу с GeForce'ом каким-то стареньким (типа MX 400) это помогло, а у меня какой-то другой Exception вылетает (Intel 852GM). Хотя, версии Managed DX у нас наверно разные

zorin29

Спасибо за ответы. Вот пытаюсь разобраться... Нехорошая среда не дает процессу писать в лог-файл, в консоль, короче - никуда. Как отлаживаться - большой вопрос. Правда, Trace не пробовал, но подозреваю, что и он запрещен...
А их Sample-ы дико глючат, только после исправления 3 багов стали работать как описано в их же комментариях

Dasar

Делаешь свой exe-шник, в него загружаешь как dll и запускаешь ms-exe-шник.
далее между своим exe-шником и своим sample-ом делаешь общую static-переменную, в которую и пишешь отладочные сообщения.

procenkotanya

AI Battle отложили. Завтра состоится только анонс этого состязания )

zorin29

Может, хоть к состязанию появится нормальный SDK. А то я 3 часа потратил на то, чтобы догадаться, что по команде GetObjectsInRadius координаты получаются относительно корабля.
А уж скорость ракеты вычислить не смог вовсе

bleyman

AI Battle отложили. Завтра состоится только анонс этого состязания )
Хехе.
Чо ж это Сергей Борисович всё пытается на тредах систему построить? Ещё в прошлый раз было абсолютно понятно, что отстой жуткий.

procenkotanya

А как правильно?

evgen5555

callback?

vall

дискретное время и ходы по очереди через каллбаки наверно.

bleyman

Искуственный Интеллект поддерживает интерфейсную функцию ShipOrders GetNewOrders(WorldState worldState). Или без возвращаемого значения - пусть сам вызывает функции SetMySpeed и SetMyDirection у WorldState.
Эмулятор считает время, затраченное на вызовы этих методов у различных Искуственных Интелектов, интерполирует состояние мира по Виртуальному Времени и применяет полученные команды. Ещё отдельный тред работает вотчдогом. Ещё иногда отдельно рисуется результат. Но при этом всё однотредовое.
Пример работы.
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 мс
...

procenkotanya

Спасибо.
Отдельный тред вотчдогом -- чтобы прибивать те ИИ, которые слишком долго думают?
Насчёт того что всё это одним тредом -- как ты предлагаешь вотчдог реализовать?

Dasar

> Но при этом всё однотредовое.
и в чем маза этого?
сейчас наоборот как раз полезнее делать многотредовые программы.

Helga87

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

vall

тут просто ai думают по-разному и интенсивно общаются - фигово это дело распараллелится.

Dasar

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

bleyman

Отдельный тред вотчдогом -- чтобы прибивать те ИИ, которые слишком долго думают?
Насчёт того что всё это одним тредом -- как ты предлагаешь вотчдог реализовать?
Да, единственный отдельный тред - вотчдог.

bleyman

кстати оригинальная идея (с отдельными тредами) - более интересная, чем твоя.
в первом случае, при принятии решений мы имеем дело с меняющимся миром - что правильно
в твоем случае - мир получается застывший, что намного дальше от реальности.
Видишь ли, на самом деле там было три треда, один из которых - графика и "физика". Причём, насколько я помню, сделать его более высокоприоритетным создателям не удалось. Результат затмевал солнце. Я был удивлён, что оно вообще хоть как-то работало.
Виндовая многозадачность, к сожалению, не предназначена для справедливого разделения времени между реалтаймными задачами.
Если хочется недетерминированности - лучше её вводить ручками, в точно ограниченных дозах.

bleyman

в первом случае, при принятии решений мы имеем дело с меняющимся миром - что правильно
А, понял, что ты хотел сказать.
Можно инвертнуть систему: любой вызов метода мира (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.
(да, я понимаю, нелегко читать эти логи
ну и так далее. Что-то вроде хитроумной рекурсии получается, не пойму, как такое написать даже.
И программировать самолётики станет несколько сложнее (всё-таки удобно, когда получение всех параметров мира - атомарно).

bleyman

не пойму, как такое написать даже.
Ха, по-моему, никак. Разве что расковырять мсил и заменить все вызовы на джампы с ручной манипуляцией стеком.

aleks058

Дайте ссылку на страницу на сайте, где про все написано. Никак найти сам не могу.

aleks058

Выложили SDK.
У меня координаты всех объектов почему-то нули.
Ни у кого такой проблемы не возникало?

ЗЫ. Кто-нибудь вообще собирается участвовать?

procenkotanya

Я собираюсь, только предпоследняя версия у меня не работала )

aleks058

Предпоследняя версия SDK?

У меня почему-то у всех объектов, которые находятся через
GetObjectsInRadius, все координаты нули (в предпоследней версии была такая же проблема).

ЗЫ. Остался .Net 1.1. Уж не могли под второй переделать. И как в 2003 студии можно было прогать.

tima56

+1. Тоже все нули.
Ты кстати как вычислил, что все нули? Т.е. ты как-то их вывести умудрился? А то я C# в первый раз вижу, и смог понять, что там все нули, только опытным путем (крутил константы и запускал. По поведению определял).

aleks058


добавил форму в проект.
На форму кинул текстбокс.
При вызове метода Run создавал эту форму, а затем писал логи в текстбокс (в частности, координаты получаемых объектов).

Кстати. В рефлекторе смотрел код сервера и клиента. Они выводят сообщения в консоль.
Декомпилил север и клиент и перекомпиливал, чтобы они были консольными проложениями, но почему-то в консоль ничего не выводилось. Кто может сказать, почему?

ЗЫ. Вообще, подход к организации нулёвый. Видно, что энтузиазма нет ни у кого из организаторов.

Helga87

Надо будет на следующий год в организаторы энтузиастом пойти.
 
Кстати. В рефлекторе смотрел код сервера и клиента. Они выводят сообщения в консоль.
Декомпилил север и клиент и перекомпиливал, чтобы они были консольными проложениями, но почему-то в консоль ничего не выводилось. Кто может сказать, почему?
  

Потому что ты что-то сломал

aleks058

Ниче вроде не ломал. Перекомпилил с другим параметром компилера - и все.
Прога работает, а в консоль ниче не выводит.

bleyman

Декомпилил север
Дада, мы с Невским в прошлом году тоже декомпилили сервер =) Иначе в этих глюках ващеее не разобраться.
По теме - мб они в дебаг выводят? Или где-нибудь по пути вывод с консоли в файл перенаправляют?
Оставить комментарий
Имя или ник:
Комментарий: