Перейти к публикации

Рекомендованные сообщения

lVIijDy.png

 

Представляю вам опять программу для робота, которая позволяет добывать руду, не лазая по пещерам. Робот, используя геолизер, может самостоятельно находить и добывать руду.

Реализованы еще не все возможности, поэтому прошу тестировать и сообщать мне о багах.

 

 

Требования:

  • Корпус компьютера (уровень II или III)
  • Апгрейд инвентарь (больше - лучше)
  • Апгрейд контроллер инвентаря
  • Жесткий диск
  • EEPROM с прошитым Lua BIOS
  • Геосканер
  • Память (уровень I или выше) 
  • Процессор (любой)
  • Апгрейд полета (I уровень)
  • Алмазная кирка или аналогичный инструмент.

 

Опционально:

  • Апгрейд верстак
  • Беспроводная сетевая карта
  • Апгрейд батарея
  • Апгрейд опыта
  • Апгрейд чанклоадер
  • Апгрейд генератор
  • Эндерсундук из мода EnderStorage

 

Установка:

  • Скачать и сохранить файл как init.lua
  • wget https://raw.githubusercontent.com/DOOBW/geominer/master/miner.lua init.lua
  • Закинуть этот файл в корень диска.
  • Добавить диск при сборке робота.
  • Установить робота на платформу из твердых блоков.
  • Дать роботу кирку.
  • Поставить возле робота контейнер и зарядник.
  • Нажать кнопку питания и наслаждаться процессом.
  • Like 6

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здорово) Круто получилось
На мой взгляд, нужны тесты на практике во всех условиях

Несколько вопросов:
Чем обусловлен длительный переход между чанками?
Как продумана система взаимодействия с труднодобываемыми блоками? (обсидианом/досками в шахтах) Копает или обходит?
Исключена ли возможность застрять роботу в пористой структуре бедрока? Так как при калибровки в новом чанке он опускается вниз до бедрока и, как мне кажется, из за неоднородности по высоте может опуститься ниже.
Оправдала ни схема, при которой робот отвязывается от привязки к чанкам?

Изменено пользователем Appo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Appo сказал:

я бы использовал алгоритм Дейкстры в такой задаче

А разве алгоритм Дейкстры предусматривает обход всех узлов?

  • Confused 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

краш в строке на 1.7.10

471   if item[slot].name == tool.name and item[slot].damage < tool.damage then

Видно часть ошибки:

(field '?')

 getAllStacks и getAllStacks().getAll() по-разному работают на разных версиях MC

На 1.7.10:

  • индексация  массива из getAllStacks().getAll()  начинается с 0, а не с 1.
  • getAllStacks().getAll()[slot] для пустого слота возвращает пустую таблицу, а не таблицу с «воздухом»
  • getAllStacks()[slot] для пустого слота возвращает nil, а не таблицу с «воздухом»

 

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, vx13 сказал:

getAllStacks и getAllStacks().getAll() по-разному работают на разных версиях MC

На 1.7.10:

  • индексация  массива из getAllStacks().getAll()  начинается с 0, а не с 1.
  • getAllStacks().getAll()[slot] для пустого слота возвращает пустую таблицу, а не таблицу с «воздухом»
  • getAllStacks()[slot] для пустого слота возвращает nil, а не таблицу с «воздухом»

Понял, исправлю.

 

Отвечаю по порядку.

3 часа назад, Appo сказал:

Чем обусловлен длительный переход между чанками?
Как продумана система взаимодействия с труднодобываемыми блоками? (обсидианом/досками в шахтах) Копает или обходит?
Исключена ли возможность застрять роботу в пористой структуре бедрока? Так как при калибровки в новом чанке он опускается вниз до бедрока и, как мне кажется, из за неоднородности по высоте может опуститься ниже.
Оправдала ни схема, при которой робот отвязывается от привязки к чанкам? И тогда уже потом добавлять ограничения по чанкам в N диапазоне, если есть необходимость.

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

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

По дефолту обсидиан вне области видимости, доски не проблема.

Площадь сканирования 16x16 блоков, бедрок хорошо обнаруживается, а если не обнаруживается, то робот не застрянет.

В программе можно настроить, сколько чанков добывать.

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В коде есть переменные, которые можно настроить.
chunks - сколько чанков нужно обработать
min и max - минимальная и максимальная твердость добываемых блоков
port - порт для взаимодействия с роботом (если установлена беспроводная карта)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×