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

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

lVIijDy.png

 

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

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

 

 

Требования:

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

 

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

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

 

Установка:

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

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


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

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

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

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

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


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

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

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

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


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

краш в строке на 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, а не таблицу с «воздухом»

 

 

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


Ссылка на сообщение
Поделиться на других сайтах
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 - порт для взаимодействия с роботом (если установлена беспроводная карта)

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

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

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


×