Перейти к содержимому

Doob

Гуру
  • Публикации

    1 089
  • Зарегистрирован

  • Посещение

  • Победитель дней

    141

Сообщения, опубликованные пользователем Doob


  1. Ага, понятно. После каждого действия происходит корректировка или батчами?

    Тут чувак интересно рассказывает, что эффективней оценивать агента после серии действий, так лучше сходится результат на больших дистанциях.

    Если записать штук 500 запусков в разных условиях, с ветвлениями, хотя бы до 100 шагов, можно быстро получить статичную модель. Модель адаптировать, повесить в качестве ядра и подсоединить к твоей динамической, обучение пойдет много быстрее.

     

    Эффективность движения и выборки я привел в виде человеческой эвристики. Если роботу можно бежать в бесконечность, то их считать не надо.


  2. 1. Да. Но бур заряжать будет нечем и при разряде инструмента вернется на базу, искать зарядник и проверять сундук.

    2. Да. При износе кирки робот едет на базу и ищет в контейнере другую такую же, но с меньшим показателем износа.

    • Спасибо 1

  3. 7 часов назад, Krutoy сказал:

    "полезность" просто настроится всегда показывать 0.

    Я так и не понял, как ты оцениваешь действия робота? Как ты его обучаешь? Если он у тебя рандомно бегает без контроля, то после любого такого "обучения" он будет творить дичь. Я ведь приводил примеры, как заставить делать его необходимые действия.

     

     

    Задача: построить модель, которая будет добывать максимум блоков.


    Такую примитивную задачу можно было бы и захардкодить, т. к. можно представить все возможные ситуации и условия. Ну окей, можно обучить это в дерево решений, результат от нейросетки отличаться не будет, но это тоже не наш метод.


    Будем проектировать нейросеть. Для обучения надо определить условия и метрики, функция должна получать полное состояние мира и оценивать действия модели. Если модель дает результаты, отличающиеся от результатов функции оценки, то необходимо корректировать веса.

    Имеем следующие действия:
      move() - 4 штуки
      turn() - 2 шт.
      swing() - 3 шт.
      detect() - 3 шт.
    Для упрощения, объединим move и swing в одно действие, detect выкинем.
    На вход модели можно подать информацию с предыдущего шага. Состояние move отдельно от swing, turn можно было бы засовывать с специальный буфер, но модель любого типа может и сама научиться запоминать пройденные блоки.
    Следовательно, на вход надо подавать 14 бит информации в самом простом случае.


    Для обучения надо сформировать метрики эффективности:

    • Эффективность добычи [кол-во добытых блоков] / [кол-во действий]

    (swing+move это одно действие)
    Максимальная эффективность при прямолинейном движении = 100%
    Эффективность спирали из точки по этому графику стремится к 100%

    To1zgPn.png

    Это одномерный и двухмерный случай, для трехмерного начальная эффективность сильно зависит от точки старта, т. к. есть ограничения по вертикальной оси (есть подмножество спиралей, исходящих из двухмерного случая. В идеальной бесконечности по всем осям - объемная наматывающая спираль)

     

    • Эффективность движения/поворотов [кол-во шагов] / [кол-во повторных шагов]

    При любой лучшей эффективности добычи равна 100%.
    При 100% агент посещает один блок только единожды.
    Позволяет оценивать и штрафовать бесполезные циклы.

     

    • Эффективность обхода

    Очень сильно зависит от желаемого результата. Если надо, чтобы агент плотно выбирал блоки от стартовой точки, то можно взять такую формулу:
    ( [половина расстояния от текущего блока до стартовой точки] * [коэффициент притяжения] ) ^ [размерность] / [кол-во добытых блоков]
    Расстояние манхэтеннское. Коэффициентом можно регулировать степень свободы движения агента. Если его совсем выкинуть - агент всегда будет немного гулять туда-сюда, относительно фронта добычи.


  4. Значит, срабатывает в исключительных случаях, когда дрон не сдвигается на достаточное расстояние для ошибки при округлении. У меня получилось воспроизвести только два раза, оба раза лечилось перезагрузкой мира.

    11 час назад, BrightYC сказал:

    А в подсказке что напутано?

    Например, E не возвращает дрона домой.


  5. 16 часов назад, BrightYC сказал:

    Даже на расстоянии в 400 блоков точность отменная.

    Нет, если дрон и передатчик находятся на оси Z, то при команде на возвращение, дрон входит в бесконечный цикл пингования.

    Еще в подсказке некоторые пункты перепутаны.


  6. Если интерфейс масштабируется, то хватит простенького API, чтобы можно было послать на него состояние и расположение нейронов, отдельно команду роботу.

    Хотя, мне бы хватило визуализатора самого робота, а то в 2D поигрался и надоело. 3D мне проще в самом майне тестить.

    • Нравится 1

  7. Какая точность при наведении на игрока? Будет ли тупить, если игрок стоит строго на оси Z?

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


  8. 32 минуты назад, Krutoy сказал:

    Если у меня будет 1 нейрон на выходе, как я буду выбирать какое действие из 5 мне делать?

    Выходной нейрон - корректирующий, перерасчет весов будет происходить в зависимости от свойств данных.

    При ошибке, обратное распространение начнется не с нейронов, отвечающих за действие, а с корректирующего. Это значит, что веса на последнем слое будут адаптироваться к режиму обучения и корректировать выходы именно с теми коэффициентами, которые больше всего подходят.


  9. 27 минут назад, Krutoy сказал:

    А в остальные 4 чего писать?

     

    Ничего не писать, если надо упростить - объединяем все выходы в один нейрон. При ошибке, веса будут корректироваться на всех действиях. Тут даже можно на выходной нейрон давать не 0/1, а число в диапазоне, характеризующие "удачность" или "правильность" действия с точки зрения учителя.


  10. RL сводится к одной цели, блоки добыть не проблема многими способами.

    Если с RL замахнуться на создание муравейника, придется долго и упорно страдать с ветвлениями.

    Вон как с CTF приходится извращаться, чтобы добыть скор больше, чем у хуманов. 


  11. Ну я и предлагаю добавить условий. Робот был на этом блоке - пинаем его. Не смог сломать блок или переместиться, пинаем сильнее. Сделал много шагов от точки старта - пинаем пропорционально расстоянию, с учетом первого условия.

     

    Пока про будущее разговора не идет, еще с рубкой блоков не разобрались.

    Допустим, робот научился пожирать землю вокруг, что дальше? Надо расширять функционал.

    А чтобы расширить функционал, надо расширить сеть. Обученную сеть расширять это довольно странно и больно, к тому же - сколько времени роботу под хвост.

    Поэтому сначала определяют функционал, условия выполнения, затем подбирают архитектуру сети (или какой-нибудь random forest с svc, ибо не нейронками едиными жив ML)


  12. Это очень просто. Надо сохранять координаты блоков, в которых робот уже был, если действие приводит робота в тот же блок - производить перерасчет весов с ошибкой, полученной из количества заходов робота на этот блок, пропущенных через логистическую функцию.

    Обучающая программа будет служить генератором.


  13. Программа должна решать какую-то задачу, для этого надо ее составить.

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


  14. @Krutoy, ты немного не с того начал. LSTM это конечно, интересно, но не подходит для текущей задачи.

    Я гонял роботов прямо в майне, для навигации использовал геолайзер, в качестве "нейросети" служит карта потенциальных полей (potential field method), которая накладывается на карту просканированной территории.

     

    Получается что-то вроде этого:

     

    Шахтер.

    Для того, чтобы вознаграждать робота, надо точно знать, где есть нужный блок.

    Например, даем аттракторы на блоки с плотностью около 3, отталкивание на блоки воздуха с силой, зависящей от объема ближайших соседей. Ну и дополнительное отталкивание на пройденный путь, с сокращением на каждый шаг, чтобы не получить ловушки локального минимума.

    Робот бегает за блоками, за каждый успешно сожженный блок, получает прибавку к коэффициенту доступных шагов и сканов.

    Но этот алгоритм слишком примитивен, робот просто бегает без всякой пользы для игрока.

     

    Чтобы решить задачу, надо ее сначала составить и формализовать.

    Муравейник с разными профессиями - довольно странное применение для нейросетей. В любом случае, надо будет писать подпрограммы, которые будут выполняться по команде нейросетки. Например, чтобы скрафтить и включить нового робота, придется весь алгоритм захардкодить.

     

    • Выбираем, что надо получить от робота.
    • Составляем задачу.
    • Разрабатываем решение.
    • Профит.

    А подкидывать кубики и пытаться получить от этого пользу - не наш метод.


  15. Самое слабое место это кирпичность для конечного пользователя. Если у меня размер привата ограничен, то я буду ставить адаптивную систему, любую часть которой я могу в любой момент поменять. А если это все будет строить робот, пусть даже ввод/вывод можно влепить в любом месте, мне не удобно разбирать и перестраивать дом, ради организации хранилища.


  16. Перенос одного стака занимает один тик, умножаем на количество транспозеров в самом длинном маршруте, умножаем на количество стаков - получаем максимальное время доставки.

    Сундуки вокруг транспозера можно располагать как угодно.

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


  17. В движке ArmA механика здравая, на сервере можно включить реальное время. Прилив и отлив работают как в реале - в зависимости от расположения светил. В связи с этим в DayZ есть такой хак - спрятать во время отлива припасы и оружие в определенном месте, потом после каждого возрождения приходить и брать лут для быстрого старта.

     

    Кстати, некоторые фокусы в магических модах зависят от майновского времени суток, поэтому такое растянутое время определенно добавляет сложности.


  18. На винде можно попробовать в MagicaVoxel рисовать.

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

    Если составить задачу для максимального количества транспозеров на одном сервере, перебором найти самую плотную и емкую упаковку, а полученную ячейку уже масштабировать.

    Выкинув из сервера все компоненты, кроме расширительных шин и модема, по идее, для установки будет доступно 60 транспозеров.


  19. C транспозерами все просто, проблема в сундуках. Я никак не могу решить множественное пересечение на двойном сундуке. Если бы можно было определить координаты всех сундуков, то сеть можно было бы использовать как трубы. А в текущей реализации есть только ввод/вывод через один сундук.


  20. @eu_tomat Плотность надо вычислять полным перебором, при максимальном количестве сундуков на транспозер.

    Тестовый полигон выглядит так

    Скрытый текст

    vvmqxxS.png

    Тут плотность в разных частях разная, в центре большая избыточность.

     

    @Appo можно, работать будет так же, но такая система немного сложнее в постройке.

    • В шоке 2
×
×
  • Создать...