3

カジノ (C) には、1 人のプレイヤーと 1 人のディーラーのみが関与するゲームがあるとします。ゲームは m+n 枚のカードで行われ、m 枚は勝ちのカード、'n' 枚は負けたカードとしてマークされます。

ゲームに関するルール/情報:

  1. プレーヤーは、すべての段階で、勝ったカードの数「m」と負けたカードの数「n」を知っています。
  2. プレイヤーは「X」の金額でプレイを開始し、すべてのカードが引き出されるまでプレイします。
  3. ディーラーは非常に頭が良く、プレーヤーがテーブルに置いた賭けに基づいて、勝ちのカードまたは負けたカードを引く力を持っています。
  4. ドローごとにいずれかのカテゴリのカードの数が減ります。つまり、勝ったカードが引かれた場合、勝ったカードの数は「m-1」になり、その逆も同様です。
  5. プレーヤーは「0」の金額を賭けることもできます。
  6. プレーヤーが「W」の金額を賭け、勝利カードが引かれた場合。プレーヤーは見返りに 2W を受け取り、それ以外の場合は賭け金を失います

    質問 : プレーヤーが利益を最大化するために従うべきアルゴリズムまたは戦略を導き出します。

いくつかの例 :

テストケース - 1:

Lets say m=0, n=1

プレイヤーは、ディーラーが何を賭けても負けるしかないことを知っているので、「0」の金額を賭けます。したがって、彼が作成できる最大値は X です。

テストケース - 2:

m=1, n=0

プレーヤーは、ディーラーが唯一のカード、つまり勝ったカードを引く以外に選択肢がないことを知っているので、彼はすべて、つまり「X」を賭けて「2X」を取り戻します。したがって、彼は 2 倍の金額でカジノから退出します。

テストケース - 3:

m=1, n=1 : 

プレーヤーが「W」の金額を賭けたとしましょう - ディーラーが勝ったカードを引いたとしましょう: したがって、正味額 = X+W および m->0 および n->1 : したがって、この場合の最大額 X+W - ディーラーが負けたカードを引いた場合:したがって、正味の残額 = XW および m->1 および n->0 : したがって、この場合の最大額 2(XW)

プレーヤーは、2(XW)=X+W => W=X/3 の場合にのみ、利益を最大化するために「W」を選択します。

したがって、この場合、プレーヤーがウォークアウトできる最大量 = 4X/3

4

1 に答える 1

1

これがF#からの解決策です

提案: 必要でない限り、シンボリック プログラミングを行わないでください。この場合、X = 1 と仮定します。

let stake = Array2D.zeroCreate 100 100
let bankroll =  Array2D.zeroCreate 100 100

for i in 1 .. 99 do
    stake.[0, i] <- 0.0
    bankroll.[0, i] <- 1.0

for i in 1 .. 99 do
    stake.[i, 0] <- 1.0
    bankroll.[i, 0] <- 2.0

stake.[0, 0] <- 0.0
bankroll.[0, 0] <- 1.0

let rec solve i j =
    if bankroll.[i, j] <> 0.0 then (stake.[i, j], bankroll.[i, j])
    else
       let a = snd (solve (i - 1) j)
       let b = snd (solve i (j - 1))
       let x = (b - a) / (a + b)  // solve (1 + x)a = (1 - x)b
       let y = (x + 1.0) * a
       stake.[i, j] <- x
       bankroll.[i, j] <- y
       (x, y)

solve 10 10 // = (0.06182352702, 1.333333333)

勝ったカードの数と負けたカードの数が等しい限り、プレイヤーが獲得できる最大の利益は常に 4X/3 です。

于 2012-12-16T13:28:02.867 に答える