цитата из правил, чтобы поближе к первоисточнику:
«стратегии на один тик выделяется не более 20 секунд реального времени. Но в сумме на всю игру процессу стратегии выделяется
20×<длительность_игры_в_тиках>+ 20000»
это означает, что действительно можно потратить 20 сек на один или несколько тиков/ но среднее время на один тик при длительности игр в 18000 тиков около 20 мс
Хороший движок/ изучил его за соревнования и даже научился состояние мира копировать/ но без дампа оперативной памяти/ этот секрет наверное из рук в руки передавали. И дух соревнований был конечно и приятно было участвовать. Три подхода испробовал и в топ попал на ифах которые сделал дня за три до конца/ но равные условия важны/ хотя конечно с++ и питон в симуляции как самолет и черепаха )
Это больше про суть соревнований, когда все в равном состоянии/ а так кто-то из 1000 участников конкурса научился копировать память движка и далее симуляция/ это уже не про соревнования тема/ а про то как я дырку в заборе нашел/ а вы не смогли… Что интересно организаторы выложили исходники движка на Си на сервер соревнований/ хотя другие языки были без расширения просто бибилиотеки поддержки. А так молодцы ребята/ но действительно питонисты, джависты и остальные в проигрышном состоянии. Но это вопрос больше к организаторам/ если конкурс то лучше более равный для участников. А касательно машинного обучения/ три вида машин/ шесть карт/ 18 вариантов начального состояния/ для мини конкурса многовато. Сама статья и подход через генетику к решению безусловно хороши!
еще пару строк, есть тема Рабочие Генотипы, те которые эволюционируют в алгоритме и Исследовательские Генотипы, те которые просто новый набор случайных значений, вливая новую кровь можно нащупать новое решение. Иначе генетический алгоритм будем сходится к одному решению. Это как по полю ходить нашел цветочек и думаешь самый красивый, а если еще побегать можно еще интересные цветы найти, это упрощенно.
Спасибо за вопросы! у меня иногда возникает подозрение, что люди открывают статью и сразу закрывают ) все понятно без вопросов/ а вопросов-то ждешь.
В картинке есть волшебное слово «и тд» это и есть штрафы за остальные варианты, в том числе за гибель, в исходниках есть. Кстати, если кто запустит exe мне биткоинов прибавит, шутка.
Про воскрешение и большое значение фитнесс функции: был вариант прогонять несколько игр с каждым ботов, агрегируя его фитнесс за несколько игр. Тогда одиночная неудача бота, не так страшна. Либо не удалять его с арены, типа бессмертный, а только штрафовать его фитнесс. Все эти варианты это пару строк в коде поменять. Но выбрал с выходом со сцены. Большое значение фитнесс чисто эстетически, когда все в положительном поле, проще зрительно. На сортировку не влияет, фитнесс в программе float переменная, можно вешать в граммах. Большое когда по 50 игр играли до смены поколений и в минус не хотел уходить.
В начале был «правильный генетический алгоритм» с выбором родителей по методу «колеса рулетки», но после перевода кода полностью на GPU, образовалась химера, вроде работает но не так красиво в части сходимости.
Для отдельных операций на отдельных сетях нужен будет арбитраж, например рядом еда, бот который еда, стенка и два больших бота. Здесь более менее понятно, что нужна одна нейронка. Хуже дело обстоит если бот делится, непонятно становится кем нейронка управляет? там тоже арбитраж нужен в части принятия решения.
А про эмуляцию мира и другие моменты как раз третья статья.
По поводу пересказа наверное верное слово, хотелось выбрать нестандартный стиль общения, не более того. Но местами путался сам: где автор, а где от первого лица. Одним словом Мы, я и читатель)
На третий пункт проще ответить, третья часть статьи как раз об этом. Как все пришлось переносить на GPU, нейросеть, генетический алгоритм и конечно сам алгоритм игрового процесса. Но начинал честно с c# потом с++ и CUDA, просто в c# к ней прямого доступа нет. Есть сторонние библиотеки но проще уж перейти на с++, хотя до этого ни Куду, ни плюсы не использовал.
Второй пункт, здесь поле для полемики, проще ответить: лучше один раз увидеть ) Но думаю, что в любом случае не так прямолинейно скармливать и потом корректировать. А может так и надо делать. Вопросы: корректировать каждый Тик когда сеть ошиблась? Что будет примерами для обучения, одно движение или траектория? Если кто знает как это устроить, готов услышать.
Вопрос немного вперед моего повествования, там третья часть намечается. Но если коротко, то в данной статье упоминалась фитнесс функция. Вот она и влияет на селекцию.
Not bad, безусловно лучше чем Not good, спасибо.
Если ответ про задачку о лишнем нейроне, то неверная интерпретация.
С форматированием текста пока тяжело получается, здесь Вы правы.
Все зависит от задачи, в природы нейросеть решат всю совокупность задач, но там и границы широки: от простейших организмов с нейросетью до суперкомпьютеров )
Надо вспомнить про граничные условия соревнований в части ресурсов: одно процессорное ядро и памяти 200 мб и ограничение времени на Тик.
Тема обучения встает еще, но это следующая статья. А так конечно здорово бы было, загрузил в нейросеть все параметры, а она тебе «отойди от компьютера и не мешайся»
Про картинки, это Keynote под планшетом с пером. Выбрал его, так как нужно было делать слайды для выступления. А так рисовать со школы люблю.
Из полярных в декартовы переводить на память я не умел, хотя вроде образование позволяло. Поэтому и упомянул.
Нейронка, это вторая часть статьи надеюсь скоро будет. Да, данные только с сенсоров на текущем тике, опять же пробовал много всего, доп входы на параметры бота, параметры среды и тд. Обратная связь есть, так как в названии звучит слово рекуррентная нейросеть. Постараюсь там сравнить как раз в другими подходами к управлению ботом, если это интересно. Хотя это наверное третья часть статьи, в видео на этом останавливался подробнее.
Отвечаю по порядку вопросов:
1. DIYorDIE Meetup
2. Бот действительно не избегает «вирусов», практика соревнования показала что «наезд» на вирус скорее помогает боту. При росте массы бота падает его скорость, соответственно боты состоящие из нескольких частей быстрее движутся и их «активная» площадь (площадь позволяющая собирать еду) получается эффективней одного большого, но медленного круга.
3. Этот вопрос скорее отсылка ко второй части статьи, но если коротко, то многое здесь результат экспериментов, пробовал разные варианты, в том числе и с отрицательными значениями. Частично это зависит от функции активации нейронов.
4. Сейчас не использую Eject и Split, но идея их использовать есть, в данном проекте надо переписать серверную часть, но это опять ко второй статье. Основная мысль в том, что когда бот делится, возникает вопрос кто кем будет управлять, так как команда отдается всем частям одна. Один бот=одна нейронка уже не работает принцип. Эту проблему решил не лучшим образом, есть куда двигаться в этом вопросе, это уже скорее всего область группового принятия решения, у меня там лидер без демократии.
Первым успехом на этом пути было создание робота Шейки (вибрирующий) в Станфордском научно-исследовательском институте приблизительно в 1970 г. Хотя временами Шейки вел себя как самый настоящий робот, главное его значение заключалось в воплощении мысленного эксперимента. Его создатели, относившиеся к первому поколению исследователей в области искусственного интеллекта, прежде всего стремились построить машины, «способные логически мыслить». Их интересы были сосредоточены главным образом на применении логических методов решения задач к проблемам реального мира. Управление и зрение рассматривались как функции системы, и эти работы в основном были поручены инженерам и студентам-старшекурсникам. Шейки крайне редко передвигался самостоятельно, и его зрительная система, рассчитанная на восприятие «блочного мира», состоявшего только из голых стен и нескольких крупных призматических предметов с гладкой поверхностью, была запрограммирована неэффективно и действовала крайне медленно: более часа уходило на то, чтобы в простейшей обстановке обнаружить блок или наклонную плоскость. Самым впечатляющим действием Шейки, которое он мог выполнять только поэтапно, было «сталкивание блока»; он проделывал это, если обнаруживал блок, установленный на возвышении. Такая процедура выполнялась за несколько последовательных шагов. Сначала робот находил клиновидный предмет, который мог служить наклонной плоскостью, затем пододвигал его к возвышению с блоком, взбирался по наклонной плоскости на возвышение и сталкивал с него блок.
вот думаю может к 3D приделать часть идей/ просто до этого нейронку тренировал шевелить связи )
«стратегии на один тик выделяется не более 20 секунд реального времени. Но в сумме на всю игру процессу стратегии выделяется
20×<длительность_игры_в_тиках>+ 20000»
это означает, что действительно можно потратить 20 сек на один или несколько тиков/ но среднее время на один тик при длительности игр в 18000 тиков около 20 мс
В картинке есть волшебное слово «и тд» это и есть штрафы за остальные варианты, в том числе за гибель, в исходниках есть. Кстати, если кто запустит exe мне биткоинов прибавит, шутка.
Про воскрешение и большое значение фитнесс функции: был вариант прогонять несколько игр с каждым ботов, агрегируя его фитнесс за несколько игр. Тогда одиночная неудача бота, не так страшна. Либо не удалять его с арены, типа бессмертный, а только штрафовать его фитнесс. Все эти варианты это пару строк в коде поменять. Но выбрал с выходом со сцены. Большое значение фитнесс чисто эстетически, когда все в положительном поле, проще зрительно. На сортировку не влияет, фитнесс в программе float переменная, можно вешать в граммах. Большое когда по 50 игр играли до смены поколений и в минус не хотел уходить.
В начале был «правильный генетический алгоритм» с выбором родителей по методу «колеса рулетки», но после перевода кода полностью на GPU, образовалась химера, вроде работает но не так красиво в части сходимости.
А про эмуляцию мира и другие моменты как раз третья статья.
На третий пункт проще ответить, третья часть статьи как раз об этом. Как все пришлось переносить на GPU, нейросеть, генетический алгоритм и конечно сам алгоритм игрового процесса. Но начинал честно с c# потом с++ и CUDA, просто в c# к ней прямого доступа нет. Есть сторонние библиотеки но проще уж перейти на с++, хотя до этого ни Куду, ни плюсы не использовал.
Второй пункт, здесь поле для полемики, проще ответить: лучше один раз увидеть ) Но думаю, что в любом случае не так прямолинейно скармливать и потом корректировать. А может так и надо делать. Вопросы: корректировать каждый Тик когда сеть ошиблась? Что будет примерами для обучения, одно движение или траектория? Если кто знает как это устроить, готов услышать.
Если ответ про задачку о лишнем нейроне, то неверная интерпретация.
С форматированием текста пока тяжело получается, здесь Вы правы.
Надо вспомнить про граничные условия соревнований в части ресурсов: одно процессорное ядро и памяти 200 мб и ограничение времени на Тик.
Тема обучения встает еще, но это следующая статья. А так конечно здорово бы было, загрузил в нейросеть все параметры, а она тебе «отойди от компьютера и не мешайся»
Из полярных в декартовы переводить на память я не умел, хотя вроде образование позволяло. Поэтому и упомянул.
Нейронка, это вторая часть статьи надеюсь скоро будет. Да, данные только с сенсоров на текущем тике, опять же пробовал много всего, доп входы на параметры бота, параметры среды и тд. Обратная связь есть, так как в названии звучит слово рекуррентная нейросеть. Постараюсь там сравнить как раз в другими подходами к управлению ботом, если это интересно. Хотя это наверное третья часть статьи, в видео на этом останавливался подробнее.
1. DIYorDIE Meetup
2. Бот действительно не избегает «вирусов», практика соревнования показала что «наезд» на вирус скорее помогает боту. При росте массы бота падает его скорость, соответственно боты состоящие из нескольких частей быстрее движутся и их «активная» площадь (площадь позволяющая собирать еду) получается эффективней одного большого, но медленного круга.
3. Этот вопрос скорее отсылка ко второй части статьи, но если коротко, то многое здесь результат экспериментов, пробовал разные варианты, в том числе и с отрицательными значениями. Частично это зависит от функции активации нейронов.
4. Сейчас не использую Eject и Split, но идея их использовать есть, в данном проекте надо переписать серверную часть, но это опять ко второй статье. Основная мысль в том, что когда бот делится, возникает вопрос кто кем будет управлять, так как команда отдается всем частям одна. Один бот=одна нейронка уже не работает принцип. Эту проблему решил не лучшим образом, есть куда двигаться в этом вопросе, это уже скорее всего область группового принятия решения, у меня там лидер без демократии.