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

Doob

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

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

  • Посещение

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

    141

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


  1. Все можно посчитать, для особо неверующих, можно даже сделать симуляцию.

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

    Если теория вероятностей и комбинаторика обошли вас стороной, то я попробую объяснить на пальцах.

     

    Для упрощения, возьмем вероятность получить урон за 100% и поместим две овцы в одну ячейку. Каждую минуту одна овца будет в среднем получать 0.5 урона. Время жизни овцы работы ячейки от 8 до 16 минут.

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

     

    Подбрасываем монетку и назначаем этому мысленному конструкту урон в 1 единицу здоровья. Если одна овца кончилась, то записываем сколько минут проработал генератор и начинаем заново. Можно запустить симуляцию и увидеть...

     

    ghlS9h8.png

    Ба! Кто это у нас? Похоже на Гамма-распределение или хи-кватратичное, но стоит помнить, что шум у нас равномерный.

     

    Код на питоне для наглядности.

     

    import matplotlib.pyplot as plt
    from random import random

    def gee(x1, x2):
        c = 1
        while True:
            if random() < 0.5:
                if random() < 0.5:
                    x1 -= 1
                else:
                    x2 -= 1
                if x1 == 0 or x2 == 0:
                    return c
            c += 1

    p = []
    for i in range(100000):
        p.append(gee(8, 8))

    print(min(p))

    plt.hist(p, bins = 50, histtype = 'stepfilled')
    plt.show()

     

     

    Можно покрутить жизнь овцы x1 независимо от x2 и увидеть, что конструкт действительно работает.

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

     

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

     

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

     

    Можно пойти дальше и установить вероятность получения урона как в конфиге - 0.001

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

    Вот результаты работы симуляции (первый столбец это количество жизней конструкта, второй - минимальное время работы генератора в минутах)

     

    1      1   
    1.5   1   
    2      4   
    2.5   14  
    3      65  
    3.5   89  
    4      216 
    4.5   251 
    5      421 
    5.5   628 
    6      726 
    6.5   906 
    7      1037
    7.5   1042
    8      1426
    8.5   1583
    9      2479
    9.5   2619
    10    2749

     

     

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

    Я пошел немного дальше и вывел формулу получения пика.

    T = x*1762-2337

    Где x - это среднее количество жизней в ячейке, а результат T - время до максимально вероятного окончания генерации.

     

    ICHpGbt.png

     

     

    Теперь вернемся к нашим баранам.

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

    одна из них погибнет за минимально возможные 8 минут, а остальные полностью сохранят здоровье. Да, это маловероятно, но всё же вероятно.

    Сильное заявление, проверять я его конечно не буду.

    Сначала мы подкидывали монетку и получали 0.5, в конфиге у нас 0.001, значит подкинем монетку с тысячью сторон и внимание, вопрос... какова вероятность, что монетка выпадет на одну грань из тысячи, восемь раз подряд?

     

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

    • Нравится 2

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

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

     


  3. Если дебага не работает, то комблоком можно сотворить что угодно. Ставим в скорборд задачу на крафт n процессоров и через testfor смотрим прогресс. В процессе можно подворовывать у игроков процессоры, чтобы жизнь хлебом не казалась.

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


  4. Ну предмет можно и вернуть. А события крафта и получения ачивок, вроде-бы можно отслеживать в скорборде.

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


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

     

    Вот я ванильной механикой забирал и выдавал ресы:

     

  6. Всем подряд роботов выдавать не стоит, они полетят на аукцион, я их всех скуплю и будет жуткий дисбаланс. Для равновесия надо выдать другим расам бур или что-то подобное.

     

    И киты сделать не такие жирные.

    И почему редстоун факела такие яркие?


  7. Математика позволяет оперировать вероятностями. Я тут посчитал и обнаружил, что животных, без дозаправки, можно оставлять примерно на 30 часов и ничего страшного не случится. Пик смертности приходится на ~12000 минут работы. А в первые 1000 минут, вероятность получить труп крайне мала.

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


  8. 2 часа назад, eu_tomat сказал:

    Овец можно плодить роботами.

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

     

    1 час назад, hohserg сказал:

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

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


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

    • Нравится 1

  10. В фильтр можно подать список любых параметров предмета, например {name='minecraft:stone', label='ololo'}, т. е. те же поля, что возвращает getItemsInNetwork

    Для экспорта надо получить фингерпринт предмета (кажется название + дамаг), затем получить его дамп из сети. И только потом, беря из дампа текущее количество, экспортировать предметы по фингерпринту, дробя требуемое количество на стаки.

    local function export(item, dmg, amount)
      local fingerprint = {id = item, dmg = dmg}
      local item_dump = interface.getItemDetail(fingerprint)
      local current, result, size = amount, 0
      if item_dump then
        item_dump = item_dump.basic()
        if item_dump.qty < amount then
          amount = item_dump.qty
        end
        for stack = 1, math.ceil(amount/item_dump.max_size) do
          size = interface.exportItem(fingerprint, SIDE, current).size
          current, result = current - size, result + size
        end
      end
    end

     

    По крайней мере, так было раньше.

    Мне больше нравится Refined Storage, там все работает из коробки, без лишних телодвижений.


  11. Было бы здорово если все было так просто. На одном сервере я прочитал исходники админского магазина и нашел их на пастбине.

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

    • В шоке 1

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

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


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

    Хотя в DeepMind давно победили платформеры, думаю одними гладиаторскими боями с выбором лучших не обойтись.

     

    И да, главное это не победа, а участие.

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