🐔

トークンバケットアルゴリズムではない、MP アルゴリズムと呼べ

2023/11/14に公開

はじめに

通信量などを制御するため(トラフィックシェーピング)の良く知られたアルゴリズムの一つに、トークンバケットアルゴリズムと言うものがある。
元々トラフィックシェーピングのアルゴリズムではあるが、実際にはそれ以外の用途でも広く用いられているようである。
どなたが発明したのか知らないが、このアルゴリズムはトークンとバケツを用いて説明されることが多いと思う(何しろトークンバケットだし)が、そんな難しい(?)比喩を用いなくてももっと身近な例がある。
MPだ。

トークンとバケツ

トークンバケットアルゴリズムをトークンとバケツを用いて説明すると以下のようになる。

  • トークンは 1/r 秒おきにバケツに追加される。
  • バケツは最大 b 個のトークンを保持できる。バケツが満杯の場合、新たなトークンは捨てる。
  • n バイトのパケットが到着すると、バケツから n 個のトークンを削除し、そのパケットをネットワークに送り出す。
  • 空いているトークンが n 個未満の場合、そのパケットは送り出さず、トークンも削除しない。(この時のパケットは non-conformant 状態と言われるらしい)

この説明の難点は、トークンが 1/r 秒おきにバケツに溜まる理由も良く分からなければ、パケットを送信する時に n 個のトークンを消費する理由も良く分からない、と言う事だ。
つまり、何もかも良く分からない。

MP

トークンバケットアルゴリズムを MP を用いて説明すると以下のようになる

  • MP は INT 値に応じて 1/INT 秒毎に 1 ずつ回復する。(あたり前)
  • MP の最大値は MAXMP である。MP が最大値の場合、それ以上 MP は回復しない。(あたり前)
  • 魔法を行使する場合、その魔法に応じて必要な分 n だけ MP を消費する。(あたり前)
  • 現在の MP が n 未満の場合、その魔法は行使できない。(あたり前[1]

見て頂ければ分かる通り、どれも皆さんが普段魔法を行使する時に体験する当たり前のものだと思う(非魔法職の皆さんすみません)。
つまり、何もかもが分かりやすい。

結論

トークンバケットアルゴリズムなどと言わず、MP アルゴリズムと呼ぶようにしよう。

最後に

単なるネタなのであまり深く考えないように。

脚注
  1. ゆうじやレリオールのような賢者ではないと考えて欲しい ↩︎

Discussion