MainNetの地域別倍率のテスト

世界地図

MainNetを前に、地域マルチプライヤの最終テストを実施し、期待通りの動作を確認しているところです

2週間前に、地理的ビンの更新と、それが地域別乗数のテストに反映されると発表しましたが、その時期がやってきました。先週のデータを使って、各地域の新しい乗数を計算した。

これらの乗数で、様々な地域のノードを実行する際の遅延要因を相殺する必要があります。  

これは不完全なシステムです。中東のようにノードが1つしかない地域は、その一般的なパフォーマンスを正しく表現できない結果を読み取ることになります。北アフリカのような他の地域は、ノードが全くないため、その値を推測する必要があります。

しかし、さらに大きな課題は、正しい倍率が、地域がいくつのノードを持つかの関数であることです。我々はネットワークを設計する際に、地域のすべてのノードがチーム内のどのノードよりも高い倍率を経験するようにした。これは、ノードのオペレータがラウンドに参加しないインセンティブが働くようなケースを絶対に起こさないようにするためである。その結果、ある地域の正しい倍率は、その地域のノード数の関数である。

つまり、ネットワークの成長・縮小に伴い、乗数も定期的に更新する必要があるのです。以下に見られるように、乗数に関する計算は比較的規則的なので、ある時点でオンチェーンに統合し、毎時自動的に計算することが可能かもしれません。 

この解決策では、倍率の扱い方を調整する必要もあります。元々、チーム内のすべてのノードは同じ倍率を継承していました。その結果、非常に奇妙な乗数になってしまったので、すべてのノードに自分の乗数とチーム内で最も高い乗数の平均を与えるようにアルゴリズムを調整します。

乗算器の計算

倍率を計算する際、私たちはまず、倍率を除いた各時代で各ノードが何点獲得したかという生の数字から始めました。私たちはすべてを公平にしたいので、各ノードのランナーが他のすべてのノードとチームを組む動機付けになるようにしたいのです。ですから、私たちの目標は、ネットワークにフルに参加することで「ポイント」をフルに獲得できるようにすることです。

その前に、いくつかの定義について。

  1. Mᵢ - Binのすべてのノードの乗数 i.
  2. A_1D62 - Binの調整済みポイント値。 i.
  3. Pᵒ - binから少なくとも1つのノードが存在する確率 i がチームに含まれ、任意のビン <i は含まれません。


計算の種は実際のネットワークデータです。先週1週間で、ノードあたりの1時代におけるcMix操作の平均獲得ポイントを得ました。これを「正規化」して、A_1D62と呼ばれるビンの調整済みポイント値を生成しました。

このシステムの目的は、将来のAsがすべて1になるようなMultiplierを作成することです。

ビンはAによって最小から最大の順に並べられる。ポイントを計算するとき、すべてのノードの乗数は、自分の乗数とチーム内で最も高い乗数(最も低いiでもある)の平均となる。 

平均値が最も低い領域であるBin 0が他を全て上書きするため、Bin 0の倍率は次のように計算できる。

我々の目標は、全チームの全ノードの乗数および調整値も、平均して最大の1になるようにすることである。Mₙはn番目の順序ビンの乗数、Aₙはn番目の順序ビンの正規化平均であるため。これは簡単に解くことができる。

ビン1の次の倍率は、ビン1からのノードがビン0からのノードと一緒に選択される確率(これはM0ビン倍率を使用)とビン1からのノードがビン0からのノードと組まれない確率(これはM1チーム倍率を使用)として計算されることができます。

Bin2についても同様の計算ができる。

これらの方程式は、どのBinに対しても解けるものであり、乗数で定義することができる。Bin 2の場合、乗数を計算するための変換は以下の通りです。

これを一般化して、任意のチーム倍率Bin nの総和を用いることができる。

再帰的な定義に加え、確率はトリッキーである。5つのノードからなるチームの各選択は、ネットワーク内のノードの総数から、置換なしでランダムに抽選されるものである。この種の選択は、超幾何分布で記述される。ほとんどの場合、この分布は二値的な特徴を持つオブジェクト(我々の場合はノード)を数える単純なケースに適用される(例えば、BFT合意領域では、bizantine/honestノード)。しかし、cMixでは、ノードを12のビンに分割しているため、問題は多次元になり、多変量超幾何分布の計算が必要になります。幸運なことに、乗数計算の性質上、例えばビン2からノードを選択する場合、チーム内の他のノードがより高い乗数を持つビンに属するかどうかは気になりません。これは、私たちが計算する必要があるすべての確率が似ていることを意味します。私たちは、すべてのビン<iからのノードがなく、ビンiから少なくとも1つのノードを持つチームを持ちたいと考えています。我々は、これを詳細に行う方法を示すスプレッドシートを以下のリソースに含んでいます。

エラー

この解は、ラウンドの所要時間のばらつきが選択確率に影響するため、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

ポピュラー