お釣りシミュレーションの方法

お釣り最適化のページに示した通り、常に最適な支払いを行っている場合には、各時点で財布の中に入っている硬貨の枚数や、支払いに必要な硬貨の枚数などといった値は、比較的簡単な計算で求めることができます。

しかし現実には、常に最適なお釣りのもらい方をするのは難しいでしょうし、他の指標を考えた場合にはお釣り最適化のページで示している方法が必ずしもベストだとは言えません。

そこで「お釣りシミュレーション」を行うことによって、どのような支払い方が良いのかについてもう少し詳しく調べてみました。

シミュレーションの枠組みは非常に単純で、次のようになっています。

  1. 財布の中の硬貨枚数を初期化
  2. 商品の値段を決める
  3. どの硬貨を何枚払うかを決める
  4. お金を支払い、お釣りを受け取る
  5. 2に戻る

この2-4までを100万回繰り返し、そのときの平均お釣り枚数などを集計しました。

シミュレーションの目的は、3での支払い方の違いによって、平均お釣り枚数や、財布の中の硬貨枚数がどのように変わるのかを見ることです。

支払い方法としては、以下の4種類を試しました。

  • 財布の中の硬貨枚数を最少にする
  • お釣として受け取る硬貨枚数を最少にする
  • 支払う金額を最少にする
  • 支払う硬貨枚数とお釣りとして受け取る硬貨枚数の和を最少にする

それぞれの場合について100万回の支払いをシミュレートし、財布の中の硬貨枚数、受け渡し硬貨枚数などについて集計した結果を示します。

財布の中の硬貨枚数を最少にした結果
財布の中の硬貨枚数を最少にした結果2

お釣り硬貨枚数を最少にした結果
お釣り硬貨枚数を最少にした結果2

支払い金額を最少にした結果
支払い金額を最少にした結果2

受け渡し硬貨枚数を最少にした結果
受け渡し硬貨枚数を最少にした結果2