メインコンテンツまでスキップ

マッチメイキングリバランスを理解する

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

この記事では、Accelbyte Gaming Services(AGS)におけるマッチメイキングリバランスプロセスの概要を提供します。リバランスは、マッチメイキングがすでに一緒にマッチングされたプレイヤーをバランスの取れたチームに配置するプロセスです。競技ゲームでは、ゲームプレイが公平であり、チーム間で全体的なプレイヤー統計(MMR、キル数など)が類似していることを確認するために、リバランスプロセスが重要です。デフォルトでは、マッチメイキングルールセットで設定されていない場合、マッチメイキングサービスはrebalance設定を有効にします。リバランスプロセスは、チーム間のメンバー数と(ある場合)マッチメイキング属性を考慮します。例えば、MMRです。さらに、マッチメイキングは常にパーティを持つプレイヤーを同じチームに配置します。

現在、マッチメイキングには3種類のリバランス方法があります:

  • Permutation(順列)
  • Combination(組み合わせ)
  • Greedy(貪欲法)

Permutation

_permutation_方法は、マッチメイキングルールセットの緩い(ルーズな)チーム構成のバックフィルと新しいマッチを作成するために使用されます:

  • 最低1人のプレイヤーメンバーを持つセッションへのバックフィル提案。
  • min_numbermax_numberのアライアンスルール間で異なる値を持つマッチルールセットの新しいマッチ。または
  • player_min_numberplayer_max_numberのアライアンスルール間で異なる値を持つマッチルールセットの新しいマッチ。

マッチメイキングは、順列方法を使用してチーム内のパーティシーケンスのセットを生成します。各セットについて、各チームの最大能力を考慮しながら、パーティを各チームに「水平に」割り当てようとします。これは、パーティが最初のチームに割り当てられ、次に次のチームに順次割り当てられることを意味します。マッチメイキングは、パーティがチームに割り当てられる前に、メンバー数の差とマッチ属性の距離ができるだけ小さいことを確認します。このステップにより、チーム構成のセットが生成されます。

各チーム構成のセットは、以前の最良のチーム構成と比較されます。チーム間のメンバー数と(ある場合)マッチング属性(例:MMR)の差が最も小さいチームが最良のチーム構成として選択されます。最終的な最良のチーム構成がバランスの取れたマッチ結果として返されます。

Example

Ruleset:

{
"auto_backfill": true,
"alliance": {
"min_number": 1,
"max_number": 2,
"player_min_number": 1,
"player_max_number": 3
},
"matching_rule": [
{
"attribute": "mmr",
"criteria": "distance",
"reference": 100,
"max": 3000
}
]
}

1つのアクティブなバックフィル可能なセッション(セッション1)があり、1人のメンバー(Player A: Party 1、MMR 70)がいます。そして、以下の構成で3つのパーティがマッチメイキングリクエストを送信しています:

PlayerPartyMMR
Player BParty 260
Player CParty 310
Player DParty 440
Player EParty 440

マッチメイキングは、バックフィル提案を作成するために可能なチーム構成を生成し、比較します:

ResultPlayer/Party SequenceTeam CompositionMember Count DiffMMR Distance
1[{B},{C},{D,E}]team[1]:[{A},{C}] team[2]:[{B},{D,E}]16.66
2[{B},{D,E},{C}]team[1]:[{A},{D,E}] team[2]:[{B},{C}]115
3[{C},{B},{D,E}]team[1]:[{A},{D,E}] team[2]:[{C},{B}]115
4[{C},{D,E},{B}]team[1]:[{A},{D,E}] team[2]:[{C},{B}]115
5[{D,E},{C},{B}]team[1]:[{A},{C},{B}] team[2]:[{D,E}]16.66
6[{D,E},{B},{C}]team[1]:[{A},{B}, {C}] team[2]:[{D,E}]16.66

Result 6がマッチメイキングによって使用され、セッション1のバックフィル提案が作成されます。

Combination

_combination_方法は、マッチメイキングルールセットの厳格なチーム構成で新しいマッチを作成するためにのみ使用され、1つのマッチの合計プレイヤー数が12人未満の場合に使用されます:

  • min_numbermax_numberのアライアンスルール間で同じ値を持つマッチルールセットの新しいマッチ。かつ
  • player_min_numberplayer_max_numberのアライアンスルール間で同じ値を持つマッチルールセットの新しいマッチ。かつ
  • プレイヤーの合計数(チーム数 * プレイヤー数)< 12。

順列方法と同様に、マッチメイキングは組み合わせ方法を使用してチーム内のパーティシーケンスのセットを生成します。各セットについて、マッチメイキングはパーティを各チームに「垂直に」割り当てます。これは、パーティが最大能力に達するまで最初のチームに割り当てられ、その後次のチームに移動することを意味します。これにより、チーム構成のセットが生成されます。

各チーム構成のセットは、以前の最良のチーム構成と比較されます。アライアンス間のメンバー数と(ある場合)マッチング属性(例:MMR)の差が最も小さいチームが最良のチーム構成として選択されます。最終的な最良のチーム構成がバランスの取れたマッチ結果として返されます。

Example

Ruleset:

{
"alliance": {
"min_number": 2,
"max_number": 2,
"player_min_number": 3,
"player_max_number": 3
},
"matching_rule": [
{
"attribute": "mmr",
"criteria": "distance",
"reference": 100,
"max": 3000
}
]
}

以下の構成で5つのパーティがマッチメイキングリクエストを送信しています:

PlayerPartyMMR
Player AParty 170
Player BParty 260
Player CParty 260
Player DParty 340
Player EParty 440
Player FParty 510

マッチメイキングは、バックフィル提案を作成するために可能なチーム構成を生成し、比較します:

ResultPlayer/Party SequenceTeam CompositionMember Count DiffMMR Distance
1[{A},{B,C},{D},{E},{F}]team[1]:[{A},{B,C}] team[2]:[{D},{E},{F}]033.34
2[{A},{D},{E},{B,C},{F}]team[1]:[{A},{D},{E}] team[2]:[{B,C},{F}]06.66
3[{A},{D},{F},{B,C},{E}]team[1]:[{A},{D},{F}] team[2]:[{B,C},{E}]013.34
4[{A},{E},{F},{B,C},{D}]team[1]:[{A},{E},{F}] team[2]:[{B,C},{D}]013.34
5[{B,C},{D},{A},{E},{F}]team[1]:[{B,C},{D}] team[2]:[{A},{E},{F}]013.34
6[{B,C},{E},{A},{D},{F}]team[1]:[{B,C},{E}] team[2]:[{A},{D},{F}]013.34
7[{B,C},{F},{A},{D},{E}]team[1]:[{B,C},{F}] team[2]:[{A},{D},{E}]06.66
8[{D},{E},{F},{A},{B,C}]team[1]:[{D},{E},{F}] team[2]:[{A},{B,C}]033.34

Result 7は、新しいマッチ(ゲームセッション)を作成するために使用される組み合わせ結果です。

Greedy

_greedy_方法は、マッチメイキングルールセットの厳格なチーム構成で新しいマッチを作成するためにのみ使用され、1つのマッチの合計プレイヤー数が12人を超える場合に使用されます:

  • min_numbermax_numberのアライアンスルール間で同じ値を持つマッチルールセットの新しいマッチ。かつ
  • player_min_numberplayer_max_numberのアライアンスルール間で同じ値を持つマッチルールセットの新しいマッチ。かつ
  • プレイヤーの合計数(チーム数 * プレイヤー数)> 12。

マッチメイキングは、大量のプレイヤーのリバランスのために貪欲分割法を使用します。チーム構成を属性値の昇順でソートし(セッションが存在する場合)、パーティを合計属性値の降順でソートします。その後、最大値を持つパーティから順に、合計値が最も小さいチームに割り当てます。

Example

Ruleset:

{
"alliance": {
"min_number": 2,
"max_number": 2,
"player_min_number": 7,
"player_max_number": 7
},
"matching_rule": [
{
"attribute": "mmr",
"criteria": "distance",
"reference": 100,
"max": 3000
}
]
}

以下の構成で8つのパーティがマッチメイキングリクエストを送信しています:

PlayerPartyMMR
Player AParty 170
Player BParty 240
Player CParty 240
Player DParty 340
Player EParty 460
Player FParty 550
Player GParty 670
Player HParty 670
Player IParty 760
Player JParty 760
Player KParty 760
Player LParty 850
Player MParty 850
Player NParty 850

パーティは合計属性(MMR)値の降順でソートされます:

[ {I,J,K}:180, {L,M,N}:150, {G,H}:140, {B,C}:80, {A}:70, {E}:60, {F}:50, {D}:40 ]

各パーティは以下のステップでチームに割り当てられます:

StepSorted team compositionPartyAssign toTeam composition result
1team[1]:[]:0 team[2]:[]:0{I,J,K}team[1]team[1]:[{I,J,K}] team[2]:[]
2team[2]:[]:0 team[1]:[{I,J,K}]:180{L,M,N}team[2]team[1]:[{I,J,K}] team[2]:[{L,M,N}]
3team[2]:[{L,M,N}]:150 team[1]:[{I,J,K}]:180{G,B}team[2]team[1]:[{I,J,K}] team[2]:[{L,M,N},{G,H}]
4team[1]:[{I,J,K}]:180 team[2]:[{L,M,N},{G,H}]:290{B,C}team[1]team[1]:[{I,J,K},{B,C}] team[2]:[{L,M,N},{G,H}]
5team[1]:[{I,J,K},{B,C}]:260 team[2]:[{L,M,N},{G,H}]:290{A}team[1]team[1]:[{I,J,K},{B,C},{A}] team[2]:[{L,M,N},{G,H}]
6team[2]:[{L,M,N},{G,H}]:290team[1]:[{I,J,K},{B,C},{A}]:330{E}team[2]team[1]:[{I,J,K},{B,C},{A}] team[2]:[{L,M,N},{G,H},{E}]
7team[1]:[{I,J,K},{B,C},{A}]:330 team[2]:[{L,M,N},{G,H},{E}]:350{F}team[1]team[1]:[{I,J,K},{B,C},{A},{F}] team[2]:[{L,M,N},{G,H},{E}]
8team[2]:[{L,M,N},{G,H},{E}]:350 team[1]:[{I,J,K},{B,C},{A},{F}]:380{D}team[2]team[1]:[{I,J,K},{B,C},{A},{F}] team[2]:[{L,M,N},{G,H},{E},{D}]