Doob
Гуру-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Doob
-
Ну вы и страдальцы. Я ресы в основном добывал лазером - полянку 4x4 чанка выбить роботом, ручками собрать и отсортировать. Это самый быстрый способ из возможных. И самый дешевый - роботу нужен только каркас. Добавил воскрешение робота и возвращение на базу по вейкапу, проблема в том, что робот будет постоянно возвращаться на последние записанные координаты сундука, пока пользователь их руками не сотрет. Как сделать проще - пока не придумал, есть вариант пользовать какой-то предмет в качестве ключа зажигания или просто передергивать инвентарь, как делал BrightYC.
-
Кстати, да. Прошлая копалка была с бэкдором, чтобы я мог перехватить управление над всеми роботами и забрать их себе, но никто не жаловался. Насколько я помню, там убеганий в бесконечность не было, но с обновлением мода появился глюк сортировки, который никак не исправить. А тут с этим убеганием странно, @BrightYC постоянно на это жаловался, когда убрали отладочную инфу - все прошло. Надо будет проанализировать, где ошибка обработки блоков. Я использую устаревшую логику, после обновления мода до 1.7.2 она перестала работать, навесил костылей, вроде работает (но это не точно). Одну ошибку payonel исправил, чтобы найти другие - надо узнать, при каких условиях они появляются. Когда только начал писать дубокопа, я его гонял на стенде из 9 чанков, вырезанных из мира. Запускал кучу роботов, мониторил каждый шаг через X-ray. После описания основного каркаса и определения оптимального алгоритма добычи, я стал делать прогоны на пустом стенде с генерацией руд из дебаг-карты. Все это делается в одиночке с двумя модами - AE2 + IC^2 Каждый может собрать свою копалку, вот пример в блоге, где я за неделю неспешного тыканья в майне, запилил базовый функционал. Самая первая копалка, которую я написал, была жутко неудобная - приходилось спускаться на ту высоту, где больше вероятность встретить нужную руду, робот шел прямо и сканировал вертикальными слоями, после получения команды начинал добычу. Эффективность была так-себе, но лучше чем у Totoro. artem211 написал хороший комбайн, но им как-то никто не пользуется - эффективность очень маленькая, багов куча, функционал устарел. Во какую простыню накатал, лучше бы код писал, ленивая жопа.
-
Код открытый, везде комментарии. Кто играет - может до ума довести. Я бы и сам рад, но времени нет. Есть какая-то проблема с невидимыми неразрушимыми блоками. Но какой мод это делает и при каких условиях - не известно, т. к. я видел это всего два раза и на серверах, где вообще все багает.
-
Не сказал бы. Очевидные плюсы - независимость от сторонних библиотек, получение информации из первых рук, экономия памяти. Инъекция в процесс - хороший способ не мешать пользователю заниматься своими делами. Ограничения по типу main_loop как по мне - .очень сомнительная техника. Можно было бы оформить в виде демона, который будет использовать свою логику и буфер для конвертации сигналов, но так мне показалось проще. Для EEPROM можно сделать однострочник не меняя код, либо загрузить как библиотеку. Но в отдельном окружении все-таки безопасней.
-
Файловый менеджер. Часть #2 [хождение по папкам]
Doob прокомментировал Doob запись в блоге в some blog name
Мда. Почти полгода прошло, надо бы доделать. -
Обновление! Теперь интернет-модем это действительно библиотека. Добавлено автоподключение при разрыве связи, проверка состояния, ручное подключение к серверу. Переменные: imodem.server :строка - адрес IRC сервера, к которому надо подключится. imodem.port :число - порт сервера. imodem.channel :стpока - канал, в который надо зайти при подключении. Если задать nil, тогда общаться можно только через imodem.send(). Если задать канал после подключения, то можно сделать переподключение - imodem.connect(), либо послать сообщение на уровне IRC протокола - imodem.send_raw('JOIN #канал'). imodem.nick - ник бота, генерируется на основе адреса интернет-карты. Методы: imodem.isOnline() - возвращает, есть ли подключение к серверу. imodem.connect() - подключается к серверу. imodem.disconnect() - разрывает связь с сервером. imodem.send_raw(сообщение: стpока) - отправить сообщение на уровне протокола. imodem.broadcast(сообщение: стpока) - отправить сообщение в текущий канал. imodem.send(цель: строка, сообщение: стpока) - отправить приватное сообщение пользователю или в канал. Установка в OpenOS: wget https://raw.githubusercontent.com/DOOBW/internet_modem/master/imodem.lua /lib/imodem.lua Пример использования: local imodem = require('imodem') local event = require('event') imodem.connect() while not imodem.isOnline() do os.sleep() end imodem.broadcast('Hello IRC!') while true do local e = {event.pull('modem_message')} print(e[3]..': '..e[6]) end
-
Это совсем легаси метода. Вроде-бы перестала работать с версии 5.0. Почти всю информацию о процессе можно получить из debug. Имя файла и весь путь можно добыть через debug.getinfo(1).source Все дерево можно проследить по нечетным индексам for i = 1, math.huge, 2 do s = debug.getinfo(i) if s then print(s.source) else break end end
-
@BrightYC Нашел странный баг на 1.7.10, надо проверить фикс. Добавлен подсчет предметов после упаковки, теперь робот выгружает ресы не только при износе инструмента и подзарядке. Удивительно, но я пропустил самое главное.
-
В OpenOS такое сплошь да рядом, виртуальные устройства, API компонентов, все в виде файлов.
-
Самое простое, что могу предложить это на каждый улей повесить по компьютеру с транспозером и анализатором. Будет очень избыточно, но можно бесконечно расширять и распараллеливать процесс селекции. Можно анализировать руками, складывать в общее хранилище, откуда они будут забираться для селекции. А вообще, это все довольно быстро делается руками - размножаются нужные породы, пачками скрещиваются, сортируются и размножаются заново.
-
По одному LSTM на каждом слое, выдает почти идеальный результат. Заметил, что повороты оцениваются строже, чем это реализовано в механике мода.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
-
Да, нынче нормальное объяснение можно добыть только на ютубе. С текстом туго. Продраться через километровые растекания мыслю по древу не проблема, но найти саму статью - целая история. Под статичной я имею в виду предобученную на конкретных исторических данных, в данном случае можно выбрать любой тип, т. к. данные однообразные. Динамическая будет самим агентом, который при обучении накладывает результаты от статичной и постепенно, улучшаясь будет меньше зависеть от помошника. Это дает хороший пинок в начале обучения агентам, которым не с кем соревноваться.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
-
Ага, понятно. После каждого действия происходит корректировка или батчами? Тут чувак интересно рассказывает, что эффективней оценивать агента после серии действий, так лучше сходится результат на больших дистанциях. Если записать штук 500 запусков в разных условиях, с ветвлениями, хотя бы до 100 шагов, можно быстро получить статичную модель. Модель адаптировать, повесить в качестве ядра и подсоединить к твоей динамической, обучение пойдет много быстрее. Эффективность движения и выборки я привел в виде человеческой эвристики. Если роботу можно бежать в бесконечность, то их считать не надо.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
-
1. Да. Но бур заряжать будет нечем и при разряде инструмента вернется на базу, искать зарядник и проверять сундук. 2. Да. При износе кирки робот едет на базу и ищет в контейнере другую такую же, но с меньшим показателем износа.
-
Я так и не понял, как ты оцениваешь действия робота? Как ты его обучаешь? Если он у тебя рандомно бегает без контроля, то после любого такого "обучения" он будет творить дичь. Я ведь приводил примеры, как заставить делать его необходимые действия. Задача: построить модель, которая будет добывать максимум блоков. Такую примитивную задачу можно было бы и захардкодить, т. к. можно представить все возможные ситуации и условия. Ну окей, можно обучить это в дерево решений, результат от нейросетки отличаться не будет, но это тоже не наш метод. Будем проектировать нейросеть. Для обучения надо определить условия и метрики, функция должна получать полное состояние мира и оценивать действия модели. Если модель дает результаты, отличающиеся от результатов функции оценки, то необходимо корректировать веса. Имеем следующие действия: move() - 4 штуки turn() - 2 шт. swing() - 3 шт. detect() - 3 шт. Для упрощения, объединим move и swing в одно действие, detect выкинем. На вход модели можно подать информацию с предыдущего шага. Состояние move отдельно от swing, turn можно было бы засовывать с специальный буфер, но модель любого типа может и сама научиться запоминать пройденные блоки. Следовательно, на вход надо подавать 14 бит информации в самом простом случае. Для обучения надо сформировать метрики эффективности: Эффективность добычи [кол-во добытых блоков] / [кол-во действий] (swing+move это одно действие) Максимальная эффективность при прямолинейном движении = 100% Эффективность спирали из точки по этому графику стремится к 100% Это одномерный и двухмерный случай, для трехмерного начальная эффективность сильно зависит от точки старта, т. к. есть ограничения по вертикальной оси (есть подмножество спиралей, исходящих из двухмерного случая. В идеальной бесконечности по всем осям - объемная наматывающая спираль) Эффективность движения/поворотов [кол-во шагов] / [кол-во повторных шагов] При любой лучшей эффективности добычи равна 100%. При 100% агент посещает один блок только единожды. Позволяет оценивать и штрафовать бесполезные циклы. Эффективность обхода Очень сильно зависит от желаемого результата. Если надо, чтобы агент плотно выбирал блоки от стартовой точки, то можно взять такую формулу: ( [половина расстояния от текущего блока до стартовой точки] * [коэффициент притяжения] ) ^ [размерность] / [кол-во добытых блоков] Расстояние манхэтеннское. Коэффициентом можно регулировать степень свободы движения агента. Если его совсем выкинуть - агент всегда будет немного гулять туда-сюда, относительно фронта добычи.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
-
Значит, срабатывает в исключительных случаях, когда дрон не сдвигается на достаточное расстояние для ошибки при округлении. У меня получилось воспроизвести только два раза, оба раза лечилось перезагрузкой мира. Например, E не возвращает дрона домой.
- 52 ответа
-
- drone
- управление
-
(и ещё 1 )
Теги:
-
Нет, если дрон и передатчик находятся на оси Z, то при команде на возвращение, дрон входит в бесконечный цикл пингования. Еще в подсказке некоторые пункты перепутаны.
- 52 ответа
-
- drone
- управление
-
(и ещё 1 )
Теги:
-
Если интерфейс масштабируется, то хватит простенького API, чтобы можно было послать на него состояние и расположение нейронов, отдельно команду роботу. Хотя, мне бы хватило визуализатора самого робота, а то в 2D поигрался и надоело. 3D мне проще в самом майне тестить.
- 40 ответов
-
- 1
-
-
- самообучение
- робот
- (и ещё 2 )
-
Какая точность при наведении на игрока? Будет ли тупить, если игрок стоит строго на оси Z? Помню, надо было делать двойную проверку при триангуляции, либо добавлять еще точки для замера, чтобы дрон не пролетал мимо.
- 52 ответа
-
- drone
- управление
-
(и ещё 1 )
Теги:
-
Все легко настраивается, не вижу никаких проблем с получением нужных результатов.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
-
Точно так. Самый простой способ обучения.
- 40 ответов
-
- самообучение
- робот
- (и ещё 2 )
