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

Допиливание программы для схемы реакторов

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

  • Описание: программа должна уметь:
    ставить схему реакторов
  • Награда: не играю на проэкте
  • Оборудование: вещи из ОС, ае2, индастриал крафта 1.7.10
  • Требования к ПО: правильно расставлять схему,  и делать это быстро.
  • Связь: пишите в топик , либо в вк https://vk.com/dmitry_kravec
    исходник на уран схему:
    https://pastebin.com/q7GtMnXX
    исходник на мох схему:
    https://pastebin.com/z2grffw7

    схема уран:

    481050462_08-03-201901-29-32.png.6d06267f34375b84abda6f2938a75538.png

    схема мох:
    39673876_09-03-201904-23-31.png.63f4d0bc1abbfabfc0b8901a7b022caf.png

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


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

Требования к ПО: правильно расставлять схему,  и делать это быстро.

А в чём текущая проблема? Схема расставляется недостаточно правильно или недостаточно быстро?

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


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

А в чём текущая проблема? Схема расставляется недостаточно правильно или недостаточно быстро?

в 1 чанк влезает 4 реактора
1 приват =9 чанков
зона моего привата - 9 приватов ( сложна )

что = максимальной дальности прогрузки для реакторов 
итого:
9х9х4=324
324 реактора нужно заполнить схемами, что люто долго и крайне трудновыполнимо вручную
 

4 часа назад, demongts1998 сказал:

правильно расставлять схему,  и делать это быстро.

это основная задача: ускорить, настолько насколько это возможно

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


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

324 реактора нужно заполнить схемами

жуть какая, а потом жалуются что сервак лагает (

 

по поводу улучшения проги

можно избавится от сотни операторов or используя цикл и таблицу с шаблонами, (возможно это немного поможет)

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

 

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

 

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


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

жуть какая, а потом жалуются что сервак лагает (

 

по поводу улучшения проги

можно избавится от сотни операторов or используя цикл и таблицу с шаблонами, (возможно это немного поможет)

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

 

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

 

опять же, проблема в том что я печенько в плане живописи кода, сможешь выручить, серафим?

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


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

сможешь выручить

я не фанат лагодромов, а именно для этого прога и сделана, так что без меня

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


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

я не фанат лагодромов

а лагов то и нету ._.
даже 16 тиков на серве из стандартных 20

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


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

а лагов то и нету ._.
даже 16 тиков на серве из стандартных 20

Дак 16 иза вас лагадромщиков. ТПС падает иза таких людей

 

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

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


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

Дак 16 иза вас лагадромщиков. ТПС падает иза таких людей

 

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

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


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

Поступила жалоба на оффтоп в этой теме. Да, оффтоп уже развился, но я не знаю, как с ним правильно поступить. Пусть пока остаётся как есть.

 

У автора темы очень специфические заказы. Их сложно обсуждать в отрыве от темы лагодромов. 16 TPS на сервере это ненормально. Каков вклад в лаги сервера со стороны автора темы, это вопрос дискуссионный, но обсуждение желательно вести с доказательствами и какими-нибудь методиками измерения. Надо выяснять, что именно там сильнее всего нагружает сервер.

 

Сообщество computercraft.ru не заинтересовано помогать строительству лагодромов. Чем больше лагодромов будет создано с помощью компьютеров, тем меньше будет шансов встретить OpenComputers и ComputerCraft на серверах Майнкрафта. Такая перспектива не радует.

 

Но сообщество заинтересовано помогать лагодромщикам в поиске схем, более эффективно расходующих ресурсы сервера. Если на производство какой-нибудь лепёшки можно затратить 2 действия вместо 10, то пусть лагодромщик выберет более экономный вариант. Тогда компьютерные моды будут меньше раздражать администраторов серверов.

 

Предлагаю сосредоточиться на оптимизации программ, если кому интересно. А судьбу 300 спартанцев реакторов пусть решает администрация сервера.

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


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

Надо выяснять, что именно там сильнее всего нагружает сервер.

Я знаю что. В основному реакторы и механизмы. Просто я знаю о каком он сервере говорит.
Там потому и ввели ограничение на реакторы ибо их ставили по 200 штук в чанк

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


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

Я знаю что. В основному реакторы и механизмы. Просто я знаю о каком он сервере говорит.
Там потому и ввели ограничение на реакторы ибо их ставили по 200 штук в чанк

Тогда у меня две группы вопросов к тебе, как информированному человеку:

  • Что побуждает игроков вашего сервера строить поле из 300+ реакторов? Зачем им столько энергии? Что они с ней делают?
  • Что мешает администрации сервера выполнить сет_нуль всех этих полей из реакторов?

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


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

@eu_tomat весь прикол в "интересности рецептов" (гринде, на самом деле) сборки серверной, к примеру 4 лярда юю на единицу материи + специфичный материал в качестве скрапа (пол незера, коротко говоря). И таких проектов не мало. К сожалению только парочку проектов знаю с реально хорошими рецептами.
Смысл всего этого типичный для игровой индустрии: удержание клиентов, и покупка внутриигровых плюшек. По этому же поводу и ресетнуть не могут - ибо растеряют базу клиентов.

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


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

По теме:

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

 

В программе есть дублирование robot.select(), которого несложно избежать. Но эта оптимизация не даст значительного прироста производительности. Остальные же, более жирные оптимизации возможны только на уровне всей системы из 324 реакторов.

 

Главный вопрос: эта куча реакторов строится за один раз или постепенно? Если за один раз, то зачем долго копить реакторы на складе, в то время как они могли бы уже работать? А если постепенно, то зачем этой схеме быстродействие? Неужели ресурсы на реакторы собираются так быстро?

 

Реакторы строятся руками или роботами? В случайном порядке по ситуации или по сетке? Какие коммуникации подведены к реакторам кроме кабелей, отводящих энергию?

 

Эти 9 приватов, каждый по 9 чанков являются смежными? Они позволяют построить единую площадку для реакторов? Или же приваты разбросаны по карте? Как осуществляется обмен ресурсами между приватами?

 

Каким образом предполагается использовать эту программу?

  • Игроком подойти к реактору, поставить к нему робота, закинуть в него компоненты и ждать, пока они выложатся в нужном порядке? А если какого-то компонента не хватит? Порядок будет нарушен, а программа даже не предупредит об этом. Без доработки программы такое использование не годится.
  • Или же это лишь часть другой программы, которая где-то загружает компоненты, подползает к реактору и заполняет его по шаблону? Тогда роботу вообще не надо знать, что находится у него в инвентаре. Ему достаточно знать соответствие слотов собственного инвентаря слотам реактора. Это позволит исключить лишние действия с контроллером инвентаря, который работает слишком медленно в сравнении с транспозером.

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


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

А если постепенно, то зачем этой схеме быстродействие? Неужели ресурсы на реакторы собираются так быстро?

да

 

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

Игроком подойти к реактору, поставить к нему робота, закинуть в него компоненты и ждать, пока они выложатся в нужном порядке? А если какого-то компонента не хватит? Порядок будет нарушен, а программа даже не предупредит об этом. Без доработки программы такое использование не годится.

вот и требуется это устранить, а как - не понимаю

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


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

В общем было мне скучно, решил посмотреть как запилить прогу на шаблонах

 

Чуда не случилось ¯\_(ツ)_/¯

робот не может выставлять схему в реакторе из 54 компонентов быстрее 0,33 секунды (также и здесь)

зато теперь можно выставлять разные схема для реактора одной прогой

также если компонента нет в инвентаре робота, прога ругается чего не хватает и ждёт пока его добавят

 

х.з. выкладывать или нет ?

в любом случае она быстрее работать не стала

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


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

робот не может выставлять схему в реакторе из 54 компонентов быстрее 0,33 секунды

Не понял. А за 0.33 секунды может что ли заполнить весь реактор? По моим прикидкам это число должно быть на два порядка больше. Если в инвентаре робота нет лишних компонент, то схему можно выложить за 32.4 сек:

  • 0.05 сек на считывание стака
  • 0.05 сек на выбор ячейки
  • 0.50 сек на перенос предмета в реактор
  • повторить 54 раза

33 секунды дают запас времени на анализ 12 лишних компонент, случайно оказавшихся в инвентаре робота.

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, eu_tomat сказал:
  • 0.05 сек на считывание стака

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

 

7 часов назад, serafim сказал:

0,33 секунды

Вероятно, это сделано транспозером? Вроде бы, транспозер, перемещающий предмет за один тик должен потратить минимум 54/20=2.7 сек

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


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

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

Что ты имеешь в виду, говоря "заранее"? При таком подходе появляется риск сказать, что робот "заранее" просканировал инвентарь, заранее установил компоненты в реактор и заранее выключился, вообще не потратив времени на выполнение поставленной задачи. И вообще, заранее умер, чтобы не погибнуть в будущем.

 

С точки зрения игрока робот может выполнять работу параллельно тому, как игрок закидывает компоненты в инвентарь робота. Учитывая, что в инвентаре игрока всего 36 слотов, ему придётся сделать две ходки. За это время робот может успеть выполнить часть работы. С этим можно согласиться. Если бы робот автоматически пополнял свой инвентарь все необходимым, то он бы мог знать эту информацию ещё до контакта с реактором. Но по условиям задачи эту работу выполняет игрок. Правда, выяснилось это не сразу.

 

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

 

Когда содержимое всех слотов уже известно, то при ожидании пополнения новых предметов нет смысла сканировать весь инвентарь. Для этого достаточно анализировать событие inventory_changed, оно сообщает номер изменившегося слота. Оно не реагирует на изменение количества предметов в слоте, но для этого существует быстрая операция robot.count(slot).

 

Но даже при умелом использовании inventory_changed на этапе старта программы о содержимом инвентаря робота ничего неизвестно.

 

Оптимальный алгоритм мне видится таким:

  • Грубо сканируем весь инвентарь с помощью robot.count(slot). Это позволит в дальнейшем не тратить время на работу с пустыми слотами.
  • В процессе работы следим за событием inventory_changed, на ходу корректируя список ещё необработанных слотов и убирая из списка освободившиеся слоты.
  • В произвольном порядке выполняем getStackInInternalSlot(slot) для непустых слотов, обнаруживая полезные для реактора компоненты.
  • При обнаружении слота с полезным компонентом выполняем robot.select() и dropIntoSlot().
  • Количество вызовов robot.select() можно незначительно сократить, отдавая приоритет в обработке текущему слоту, если, конечно, он не пуст.

Я мог упустить ещё какой-то момент, поэтому предлагайте свои оптимизации.

 

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

 

9 часов назад, serafim сказал:

выкладывать или нет ?

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

 

Я колебался, предложить ли схему на микроконтроллере, но, похоже, не надо. Автор заказа проигнорировал часть моих вопросов, и может оказаться, что микроконтроллер там вообще не уместен. Кроме того, транспозер быстрее работает в основном за счёт уменьшения задержек, искусственно добавленных для робота. Поэтому вряд ли стоит рекомендовать такое решение лагодромщикам.

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


Ссылка на сообщение
Поделиться на других сайтах
В 04.12.2020 в 10:47, eu_tomat сказал:

Что ты имеешь в виду, говоря "заранее"?

До того, как он поедет размещать схемы в реакторах.

  

В 04.12.2020 в 10:47, eu_tomat сказал:

При таком подходе появляется риск сказать, что робот "заранее" все сделает

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

Уменьшить числа в таблице быстрее, чем заново просканировать инвентарь. И это даст одинаковые результаты при условии, что на инвентарь робота не производится иного влияния кроме извлечения предметов самим роботом.

 

~~~

Т.к. количество реакторов ограничено - 81 - то не имеет смысла делать схему расстановки супер-быстрой. Достаточно сделать ее автономной и быстрее, чем ручное раскладывание. В конце концов, обсуждение задачи продолжается уже второй день. за 48-18 часов(с учетом еды и сна) можно было уже заполнить все реакторы, тратя на каждый реактор по ~20 минут. Однако это скучно и поэтому мы здесь собрались и обсуждаем эту задачу.

В 04.12.2020 в 10:47, eu_tomat сказал:

параллельно тому, как игрок закидывает компоненты в инвентарь робота.

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

Я не знаю, как интересно и как не интересно проводить время @demongts1998, но разве это не часть скучного гринда? Вроде бы это должен делать робот: кататься до стартового сундука и пополнять свой инвентарь. Или дрон, который бы заменил в этой скучной работе игрока

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

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


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

Присоединяйтесь к обсуждению

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

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

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

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

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

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


×
×
  • Создать...