Тестирование региональных множителей для основной сети

Карта мира

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

Две недели назад мы объявили об обновлениях географических бинов и о том, что это повлияет на тест региональных множителей — это время пришло. Используя данные прошлой недели, мы вычислили новые мультипликаторы для каждого региона:

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

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

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

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

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

Расчет множителей

При расчете множителей мы начали с необработанных чисел, сколько очков получил каждый узел в каждую эпоху без учета множителя. Мы хотим, чтобы все было честно, и мы хотим, чтобы каждый исполняющий узел был заинтересован в объединении с любым другим узлом. Итак, наша цель — убедиться, что полное участие принесет вам полные «очки» в сети.

Прежде чем мы продолжим, несколько определений:

  1. Mᵢ — множитель для всех узлов в Bin. я.
  2. Aᵢ – Скорректированное значение точки для Bin я.
  3. Pᵢ – Вероятность того, что хотя бы один узел из корзины я входит в команду, а узел из любого бина <я не включено.


Расчет основан на реальных сетевых данных. За последнюю неделю мы получили средние баллы, заработанные за операции cMix в эпоху на узел. Затем это было «нормализовано», чтобы получить скорректированное значение точки для корзины, известной как Aᵢ.

Цель этой системы состоит в том, чтобы создать такие множители, что в будущем все А будут равны 1.

Ячейки упорядочены от минимума до максимума по A. При подсчете очков множитель каждого узла является средним значением их множителя и самым высоким в команде (также самым низким i). 

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

Наша цель — убедиться, что множители и корректировки для всех узлов во всех командах также в среднем не превышают 1. Поскольку Mₙ — это множитель для n-го упорядоченного интервала, а Aₙ — нормализованное среднее значение для n-го упорядоченного интервала. Это можно легко решить:

Следующий множитель для ячейки 1 может быть рассчитан как вероятность того, что узел из ячейки 1 будет выбран с узлом из ячейки 0 (который использует множитель ячейки M0), и вероятность того, что узел из ячейки 1 не объединен с узлом из ячейки. 0 (который использует множитель команды M1):

Мы можем сделать тот же расчет для Bin 2:

Эти уравнения для любого Bin разрешимы и могут быть определены в терминах множителя. Для корзины 2 преобразования для расчета множителя:

Мы можем обобщить это, используя суммирование для любого командного множителя Bin n:

В дополнение к рекурсивному определению вероятности сложно определить правильно. Каждый выбор команды из 5 узлов состоит из случайного выбора без замены из общего количества узлов в сети. Такой выбор описывается гипергеометрическим распределением. Чаще всего это распределение применяется к простому случаю подсчета объектов (в нашем случае узлов) с бинарным признаком (например, в области консенсуса BFT: византийские/честные узлы). Однако в cMix мы разбили узлы на 12 бинов, что превращает задачу в многомерную, а это означает, что нам нужно вычислить многомерное гипергеометрическое распределение. К счастью, из-за того, как работают множители, когда мы выбираем узел, скажем, из корзины 2, нам все равно, принадлежит ли какой-либо другой узел в группе корзине с более высоким множителем. Это означает, что все вероятности, которые нам нужно вычислить, аналогичны: мы хотим иметь команду хотя бы с одним узлом из бина i без каких-либо узлов из всех бинов <i. We include a spreadsheet in our resources below which show how to do this in detail.

Ошибка

В этом решении есть некоторые ошибки из-за того, что расхождения в значениях A в значительной степени вызваны различиями в продолжительности раундов, которые влияют на вероятности выбора. Это решение, как описано в нашем моделировании, верно с точностью до 3%. Будущая работа может проанализировать причины вариаций точек, чтобы лучше смоделировать их и уменьшить эту ошибку.

Ресурсы:

Список бункеров:

 https://docs.google.com/spreadsheets/d/1z9kvEW7XXcHYxUSPpXkoA1Cv9trIbY4VkPzaWzJEN_I/edit#gid=2056956216

Алгоритм планирования: https://git.xx.network/xx_network/primitives/-/blob/dev/region/ordering.go

Расчет множителя:

https://docs.google.com/spreadsheets/d/1d2HcuCVorKDkUppBam-dk-_PJ8ukPp8ja18DyE_VYJQ/edit?usp=sharing

Скрипт Python для моделирования для подтверждения расчетов:

https://git.xx.network/-/snippets/3

Популярный