Добавлен Ambruziy
Добрый вечер форумчане!
Недавно вечером я сидел и, как обычно, потихоньку делал свой проект. Проект в моем представлении весьма достойный, но на деле пока практически нулевой. Задача была мной поставлена такая: сделать этакий Hero Defence, проработанный до мелочей, с отличной историей и прочим, и т.д. Не важно. Но вот захотелось мне сделать для волн нападающих достойный ИИ, как собственно и для волн, помогающих защитить что-либо.
До этого я много раз пытался, иногда вполне неплохо, делать такого рода ИИ. Но все, что было раньше - все должно меркнуть, перед новым ИИ. Читал кстати у нас на форума статейки, был даже вполне неплохой вариант (увы не вспомню как называлась карта и кто ее сотворил, было еще явно до 1.24 версии).
Суть в следующем. Нужно сделать не просто ИИ, который выбирал бы более приоритетные слабозащищенные и уязвимые цели, не просто пытался сбивать касты и держать в контроле ДД союзной команды, но и умело передвигаться по полю боя, заходить за спины, уходить от потенциально опасных противников и т.д.
Цель была понятна, сел изучать литературу. Изучал 2 дня (конечно, мало для такой темы, но начало положено) , сидел, корпел, пил кофе и вставлял спички в глаза. Признаться узнал, что все, что я делал под названием "ИИ" было не больше, чем игрушка ребенка.
Собственно и вопрос таков: есть ли у кого опыт создания хороших ИИ? Что вы для этого использовали? Использовали ли вы только Дерево принятия решений и FMS (конечные автоматы) или же возможно (ну а вдруг) кто-либо интегрировал в кодинг нейронные сети? Конечно, любому картостроителю хотелось бы, чтобы его "ребенок" обучался :) Возможно кто-то пользовался методом "Цепей Маркова"? (вот уж не знал, что их изучение в универе может пригодиться и тут)
Буду безгранично благодарен любому отписавшемуся здесь! Позже, если тема все же будет интересна, выложу примерный алгоритм того, что должно быть (в виде конечных автоматов).
Если когда-нибудь (уповаю) я доделаю свой проект, всех без исключения добавлю в благодарности
Всем спасибо и хороших выходных господа!
Суть в следующем. Нужно сделать не просто ИИ, который выбирал бы более приоритетные слабозащищенные и уязвимые цели, не просто пытался сбивать касты и держать в контроле ДД союзной команды, но и умело передвигаться по полю боя, заходить за спины, уходить от потенциально опасных противников и т.д.
Цель была понятна, сел изучать литературу. Изучал 2 дня (конечно, мало для такой темы, но начало положено) , сидел, корпел, пил кофе и вставлял спички в глаза. Признаться узнал, что все, что я делал под названием "ИИ" было не больше, чем игрушка ребенка.
Собственно и вопрос таков: есть ли у кого опыт создания хороших ИИ? Что вы для этого использовали? Использовали ли вы только Дерево принятия решений и FMS (конечные автоматы) или же возможно (ну а вдруг) кто-либо интегрировал в кодинг нейронные сети? Конечно, любому картостроителю хотелось бы, чтобы его "ребенок" обучался :) Возможно кто-то пользовался методом "Цепей Маркова"? (вот уж не знал, что их изучение в универе может пригодиться и тут)
Буду безгранично благодарен любому отписавшемуся здесь! Позже, если тема все же будет интересна, выложу примерный алгоритм того, что должно быть (в виде конечных автоматов).
Если когда-нибудь (уповаю) я доделаю свой проект, всех без исключения добавлю в благодарности
Всем спасибо и хороших выходных господа!
Принятый ответ
Сейчас как раз делал ИИ для демки. Циклы для подобного - полная жопа. Пытался детерминировать логику максимально, но всеравно выходили либо зацикливания (один тик я хочу пассать, один тик я бегу от гопников, а потом опять пассать), либо неправильные решения (вокруг куча гопников а я ссу). И тут я пришёл к гениальной мысли: сделать по теме синаптических весов из нейронных сетей. Саму нейросеть не реализовывать, но вот именно эту фишку взять. Т.с. берёшь входы и создаёшь весы выходов, составляя их по формулам из входов. Лучший вес выигрывает, задавая задачу на тик, а чтобы не было зацикливания - переопределение таска идёт лишь при определённых условиях (напр. поведение сильно изменилось, противник умер и т.д.). И дебажить можно легко! Вышло неплохо - всем рекомендую :3
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ZLOI_DED
Отредактирован ZLOI_DED
Т.е. для аттаки можно, к примеру, сделать так: кол-во монет за убийство / расстояние до врага.
Idle, Attack...
}
{
setTask();
executeTask();
}
{
float idleWeight = 0f;
float attackWeight = 0f;
if (enemies.size() > 0)
{
Enemy e = getNearestEnemy();
Vector2f diff = new Vector2f(Math.abs(e.getLocation().x-getLocation().x), Math.abs(e.getLocation().y-getLocation().y));
attackWeight = 1f / diff.length();
target = e;
}
if (currWeight == 0 ||
task == Task.Attack && (target == null || target.isDead() || currWeight-attackWeight>.1f))
if (maxWeight == attackWeight) {
task = Task.Attack;
} else {
task = Task.Idle;
}
}
currWeight = maxWeight;
{
switch (task)
{
case Attack:
if (target != null)
{
followAndAttack(target);
}
break;...
}
}
Как калибровать:
Посмотри про транспортную задачу.