Впрочем, я лично использовать их дев-кит не стал — пользоваться им предлагают с применением Python, что меня тогда испугало: мало ли, вдруг оно плохо портируется на другие платформы или зашито в библиотеку так, что туда внутрь не залезешь и не подправишь (а я люблю лазить внутрь, да и задача специфическая). Сейчас я изучил его побольше и понял что проблем этих нет.
Был и другой способ — скачать специальную библиотеку для машинного обучения на C‑Sharp. Вот тут советуют большой список всего. Но мне показалось это решение слишком overpowered (короче, слишком много возможностей для моей задачи, мне столько сразу не нужно). К тому же, у Unity некоторые проблемы с импортом сторонних библиотек: если ваш проект изначально не настроен под использование.NET Framework выше версии 3.5, то и библиотеку вам нужно иметь версии 3.5. Не все библиотеки портированы под настолько старую версию (она вышла ещё в 2007-м), а самому их конвертировать проблематично.
Автор просто неправильно подошел к обучению ИИ. Если ИИ отказывался ездить на другой трассе, то, скорей всего, он тупо и не понимал, что от него требуется.
Иначе говоря, проблема в постановке цели для обучения ИИ, или цель поставлена некорректно. Если ботам важно было столкнуть других, не поворачивая, то все еще - проблема в постановки цели.
Цель обучения ИИ какая была? Чтобы он конкретную трассу прошел? Как прошел? Какие условия он должен выполнять, чтобы считалось, что он ее прошел? А что такое - пройти трассу? Приехать к какому-то чекпоинту? Как он должен реагировать на рядом проезжающего другого ИИ? В каком случае можно и нужно применять агрессию, а в каком - нет?
Самое первое, что бросается в глаза при прочтении текста - у тебя ИИ не хотел ехать к цели, а хотел завалить других таких же придурковатых. Почему так?
Я рекомендую изначально не просто бросаться тыкать ИИ и включать его в игру, а изучить идею ИИ. Большая часть проблемы создания ИИ - это постановка цели. Это первое, чему учит Andrew Ng на своем курсе Machine Learning.
Он в самом начале (если память не изменяет) рассказывает, как многие из-за не правильной постановки цели тратят бешеные деньги, а потом зовут его, и он за 5 минут решает проблему.
Вот здесь его курс. Ознакомься, пройди курс и еще раз напиши статью =)
А пока - это просто какое-то непонятное высказывание, что технология - гавно, потому что я им не умею пользоваться.
https://www.coursera.org/learn/machine-learning
Автор просто пытается использовать перцептрон, там где нужно использовать рекуррентные НС. Перцептрон не умеет работать с данными, которые динамически меняются во времени. Максимум чего можно добиться - один агент будет проходить трассу или даже разные трассы - тут уже зависит от того насколько большая обучающая выборка. В ситуации когда есть много агентов, которые конкурируют между собой в одном пространстве, нужно использовать другой подход к построению сети, когда есть целостная цель - пройти трассу и частные задачи - не врезаться в окружение, контролировать скорость, обгонять соперников если они рядом и т.д.
Перцептроном банально невозможно решить задачу, которую ставит перед собой автор.
Ну, скажем так, я вижу логику в действиях ботов. Я бы поступал примерно так же. Скорее складывается ощущение, что мощности нейросети не хватает на какие-то более осмысленные действия. Например, сбивать других кажется хорошим решением, но его определённо недостаточно. Как и ехать задом, когда это необходимо. Будто, нейросети хватает на обучение только одной конкретной тактике - и не больше.
В какой-то момент я просто понял, что мне скорее всего нужно что-то более мощное, чем простая сеть с двумя скрытыми слоями и генетический алгоритм. И очень много времени на вычисления. Но что конкретно - там нужно очень долго разбираться, у меня нет столько времени, да и эвристики справляются пока хорошо. В этом и мораль статьи, я не говорю, что сделал всё правильно.
А так, я уже описал в статье, какие цели были перед ботом: есть чекпоинт, к которой нужно двигаться. Причём, она в области видимости, не за стеной. Нужно это сделать как можно быстрее и с меньшей потерей здоровья, то есть тут я делал функцию результата. Всё остальное меня не интересовало. После того, как он достигал чекпоинта в определённом радиусе, информация о чекпоинте менялась на новую. Как реагировать на окружение, бот решал сам, я ему ничего не задавал.
Чисто интуитивно кажется, что автор ставил неправильные задачи ботам. Поощрять их надо было за что-то другое.
Цель вообще выглядит чрезмерно сложной. Это как сказать обезьяне "Долети до Луны" и за каждый успех награждать её вкуснейшим бананом. В этом случае сэкономится ОЧЕНЬ много бананов, но цель будет всё еще далека.
Можно попробовать посмотреть задом наперед. Предположим, уже есть бот/человек который супер прекрасно проходит все карты. Чем характеризуется его поведение? Чего простого он делает очень много раз?
Всё относительно банально - он часто едет на высокой скорости, он ЧАСТО, ОЧЕНЬ ЧАСТО сбрасывает скорость, он поворачивает.
Это очень грубо, но вот за количество и связки таких полезных дел как "притормозить + повернуть", "повернуть + ускориться" и надо попробовать награждать.
При такой грубой постановке задачи ИИ почти наверняка будет просто вихлять - тут нужно вводить бальную систему где награда будет за чистую и аккуратную езду по разным параметрам - от урона до скорости прохождения что тоже достаточно просто.
А мне кажется у тебя просто матмодель неверная. Машинное обучение — это же не просто пройтись по сетке в одну сторону, а потом в обратную.
я сам пытался написать нейронную сеть для ботов в FPS. В итоге плюнул. Тут одно из двух: либо ты пишешь нейронку, либо ты делаешь игру.
Ну я тоже так подумал и плюнул всё на это. Подождём, когда умные дяди с тоннами финансирования сделают всё за нас, их для этого и наняли.