さいころ賭博

 投稿者:GAIメール  投稿日:2008年12月 7日(日)20時46分54秒
  <パターンⅠ>
4つのさいころがあり
A={2,3,3,9,10,11}、B={0,1,7,8,8,8}、C={5,5,6,6,6,6}、D={4,4,4,4,12,12}
の目が各面に印字されているとします。
あなたと私はこの中からそれぞれ一つのさいころを選んでさいころを振ります。
出た目が大きいほうが相手から千円を受け取ることができます。
でも少なくとも100回は勝負することにします。(選んださいころは変えない。)
さて貴方はどのさいころを選びますか?


<パターンⅡ>
同じく4つのさいころが
X={5,5,6,6,7,7}、Y={1,2,3,9,10,11}、Z={0,1,7,8,8,9}、W={3,4,4,5,11,12}
の目でできています。
同じく勝負しますが(これも100回は戦う条件つき)同じ目が出ればアイコでやり直しをします。
さてあなたが選ぶさいころはどれ?
 

Re: さいころ賭博

 投稿者:荒田浩二  投稿日:2008年12月 8日(月)09時22分26秒
  > No.148[元記事へ]

GAIさんへのお返事です。

10万回の実験ではDとWがわずかに有利とでました。
期待値の1.324とは、1回に1000円かけると平均1324円戻ってくるという意味です。
下のプログラムでは対戦人数を2~4人に指定できます。
ただし全員違うサイコロを選択するとします。
3人、4人ではAとYが有利とでました。
理論値を求めるのもそれほど難しくはないと思いますが、どうでしょう?


DECLARE EXTERNAL SUB combination
LET k=100000 ! 対戦回数
LET p=2 ! パターン
LET n=4 ! サイコロの種類
LET f=6 ! サイコロの面数
INPUT PROMPT "対戦人数は? " : r
IF r<2 OR r>n THEN STOP
DIM code$(p,n),dice(p,n,f),d(r),win(r),sumwin(p,n),a(n),com(COMB(n,r),r)
MAT READ code$,dice
MAT a=ZER(n)
MAT sumwin=ZER
LET total=(COMB(n,r)-COMB(n-1,r))*k
LET count=0 ! COMB(n,r)
CALL combination(a,n,1,r,com,count)
FOR pp=1 TO p
   FOR i=1 TO count
      MAT win=ZER
      FOR j=1 TO k
         LET maxd=-1
         FOR ri=1 TO r
            LET d(ri)=dice(pp,com(i,ri),INT(f*RND)+1)
            IF d(ri)>maxd THEN
               LET maxd=d(ri)
               LET w=ri
            ELSEIF d(ri)=maxd THEN ! 引き分け
               LET w=0
            END IF
         NEXT ri
         IF w=0 THEN LET j=j-1 ELSE LET win(w)=win(w)+1
      NEXT j
      LET maxw=0
      FOR ri=1 TO r
         LET sumwin(pp,com(i,ri))=sumwin(pp,com(i,ri))+win(ri)
         PRINT code$(pp,com(i,ri));win(ri);"  ";
         IF win(ri)>maxw THEN
            LET w=ri
            LET maxw=win(ri)
         END IF
      NEXT ri
      PRINT "勝者 ";code$(pp,com(i,w));win(w);"勝";k-win(w);"敗";
      PRINT USING " 期待値 #.####":r*win(w)/k
   NEXT i
   PRINT "総合勝敗"
   FOR ni=1 TO n
      PRINT code$(pp,ni);sumwin(pp,ni);"勝";total-sumwin(pp,ni);"敗";
      PRINT USING " 期待値 #.####":r*sumwin(pp,ni)/total
   NEXT ni
   PRINT
NEXT pp
DATA A,B,C,D,X,Y,Z,W
DATA 2,3,3,9,10,11  ! A
DATA 0,1,7,8,8,8    ! B
DATA 5,5,6,6,6,6    ! C
DATA 4,4,4,4,12,12  ! D
DATA 5,5,6,6,7,7    ! X
DATA 1,2,3,9,10,11  ! Y
DATA 0,1,7,8,8,9    ! Z
DATA 3,4,4,5,11,12  ! W
END

REM 十進BASIC添付"\BASICw32\SAMPLE\COMBINAT.BAS"より
REM 1~nの集合からr個を選ぶ組合せを生成する。配列com(,)
EXTERNAL SUB combination(a(),n,k,r,com(,),count)
! k以降の数からr個を選択する
IF r=0 THEN
   LET count=count+1
   LET ri=1
   FOR i=1 TO n
      IF a(i)=1 THEN
         LET com(count,ri)=i
         LET ri=ri+1
      END IF
   NEXT i
ELSE
   FOR i=k TO n-r+1
      LET a(i)=1
      CALL combination(a,n,i+1,r-1,com,count)
      LET a(i)=0
   NEXT i
END IF
END SUB
 

Re: さいころ賭博

 投稿者:GAIメール  投稿日:2008年12月 8日(月)11時26分21秒
  > No.149[元記事へ]

荒田浩二さんへのお返事です。

10万回の勝負とはすごい。
2人でやる場合しか考慮していなかったので、3,4人でのプログラムまで構成されているのに驚きました。
自分で組んだプログラムに較べ、なんと効率よく組まれているかと感心いたしました。
さてここは賭博です。
当然胴元が有利になるような戦略を立てて下さい。
例の計算結果を眺め、期待値が高くなる組み合わせで作戦を練ります。
<ヒント>:二人で同時に選ぶように見せかけ、客が先にさいころを選ばせます。
 

戻る