スーパーに買い物で訪れると、野菜売り場などにピーマンやジャガイモなどが袋詰めされ
た状態で売られている風景を見る。でもよく考えると、一個一個の大きさや重さが異なった
ものたちをどの様に、そのメンバーで袋詰めされているんだろうと、ふと思う。
手掛かりは大きさには関係せず、それぞれの重さを何等かの方法で上手く組み合わせて
全体での総重量が同じになる仕組みがあるのだろう。
(tetsuさんからのコメントです。(平成30年7月6日付け)→現実世界ではこんな感じみたいです。)
上記の推測を実験するために、ピーマンの代わりに6個のサイコロを準備する。
(重さがランダムに1,2,3,4,5,6(g)であると見なす。)
そして、サイコロを振り、出た6個の目から適当なものを選んでその目の和を10にすること
を試みる。
さて、和を10にできる確率や如何に?
また、客には申し訳ないが、±1(g)までの誤差認可で袋詰め(即ち総重量9(g)、11(g)も市
場に出ることを許す。)を行う時の確率は?
#最初プログラムを組んで何とかしようとしていましたが、何でもよい組み合わせで10にす
ることを実行させる仕組みが作れず挫折し、ほんとに手作業での準備しかしていません。
もしプログラム的、もしくは計算式の構築が出来た方は、10個のサイコロで、出た目のい
くつかを合わせて30が出来る確率がいくつか教えて下さい。
(さすがにこれは手作業でやろうとは思いません。)
らすかるさんからのコメントです。(平成30年7月5日付け)
プログラムを作りましたが、もし、
6個のサイコロで「和が10」が作れる確率が、22837/23328 ≒ 0.978952
6個のサイコロで「和が9〜11」が作れる確率が、15533/15552 ≒ 0.998778
が合っていれば、10個のサイコロで「和が30」が作れる確率は、多分
50865583/60466176 ≒ 0.841224
になると思います。
GAI さんからのコメントです。(平成30年7月5日付け)
[調べ方]
6個のサイコロが作り出す数の組み合わせパターンを、6H6=11C6=11C5=462(通り)作り
出し([1,1,1,1,1,1],[1,1,1,1,1,2],・・・・・,[6,6,6,6,6,6])、実際に和を10にできるもののパターンに
チェックしカウントすると、421個確認。
(41個の数での組み合わせでは10が作れない。例[1,1,1,1,2,3],[1,3,4,4,4,4],[2,3,3,3,6,6]など)
したがって、10が構成できる確率 421/462(≒0.9112554)
また、「和が9〜11」は、上の41パターン中その組み合わせでの数で9または11を作れるも
のをチェックして、32個がOK!で、求める確率は、(421+32)/462=151/154(≒0.980519)
最初、重複順列 6^6=46656(通り)で調べていたんですが、調べる途中から混乱しだし、重
複組み合わせでいいのではないかと考え直し手作業になりました。
(順列で考えても10を構成する数のパターンは同じだからしかも一通りとは限らないし、サイ
コロは、462パターンは平等に起こしてくれると思えたからです。)
見返しをしてみて、逆に、「和が9〜11」とならないパターンを462(通り)の組み合わせから
探すと、
[1,1,1,1,1,1]、[1,1,1,1,1,2]、[1,1,1,1,1,3]、[1,1,1,1,2,2]、[1,1,6,6,6,6]、[1,6,6,6,6,6]、[2,6,6,6,6,6]
[4,4,4,4,4,4]、[6,6,6,6,6,6]
の9通りがあり、これから生み出される順列が総計は、
1+6+6+6!/(4!*2!)+6!/(4!*2!)+6+6+1+1=57
よって求める確率が、 (6^6-57)/6^6=15533/15552 となっている訳ですね。
従って、和を10にする確率を出すなら、だめになる41パターンから全部でいくつの順列が
生み出されるかを総計して、(6^6-総計)/6^6 の計算をしなくてはいけませんね。
やっと自分の間違いがわかりました。
GAI さんからのコメントです。(平成30年7月7日付け)
tetsuさん、ありがとうございます。日本人ってすごいですね。こんな発想を具現化できる道
具を作り出せるって素晴らしい!
苦労していたプログラムを他の言語へ変更してRubyを用いたら、らすかるさんの結果と同
じものを出せるコーディングが出来ました。ちなみに「サイコロ10個で和40」の確率を計算し
たら、 10964657/60466176(≒0.181335・・・) となり、これではいくら機械を用いても能率悪
くなりそうです。適切な重さの袋詰めと適当なばらつきがなければいけない感じですね。
らすかるさんからのコメントです。(平成30年7月7日付け)
現実には「サイコロ10個」のような少ないケースはないのでは?
(というか、そんなに少ない場合は人間がいいかげんやればいい)
「サイコロ20個で和40」ならば、0.999984…になりますので問題ないように思います。
DD++さんからのコメントです。(平成30年7月7日付け)
サイコロ10個の出目の合計の期待値は35なわけなので、そもそも全部詰めても40に届か
ない状況が大半を占めているような。
GAI さんからのコメントです。(平成30年7月7日付け)
せっかく作ったプログラムなので、「和が35」での確率を求めてみたら、
7893017/15116544(≒ 0.522144・・・)
となり、先ほどの値より向上しました。(当たり前か)
和がいくつの時それぞれ確率がどの様に変化していくのか見てみたいのですが、なにしろ
和の値にもよりますが、全パターンをどの様な組み合わせでも和を調べる調査をやるように
プログラムを組んでいるので、一つだけでもとても時間が掛かってしまいます。
時間節約のためのアイデアはあるのですが、それをプログラムで書くことができません。
例えば、20個のサイコロなら和の設定をいくつ位にしておけば確率を9割越えに出来るかな
ど知りたいです。(自分のプログラムでは何か月もかかりそうです。)
らすかるさんからのコメントです。(平成30年7月7日付け)
サイコロ20個で和が1〜70の場合の確率は以下のようになりましたので、「9割超え」は和
が1〜60の範囲となりますね。1〜6は単調増加、36〜70は単調減少ですが、7〜35は上がっ
たり下がったりの変わった動きになるようです。
(増減の繰り返しですが、偶数/奇数だけをみると単調でない動きをしています)
最大値は和が12のときのようですね。
20-1: 0.97391594669541 20-2: 0.99819562804107 20-3: 0.99967278038694 20-4: 0.99999260389173 20-5: 0.99999809006746 20-6: 0.99999999684402 20-7: 0.99999713381455 20-8: 0.99999996070733 20-9: 0.99999902667747 20-10: 0.99999999396825 20-11: 0.99999904001206 20-12: 0.99999999999728 20-13: 0.99999903714459 20-14: 0.99999999081758 20-15: 0.99999904631335 20-16: 0.99999999396690 20-17: 0.99999904029744 20-18: 0.99999999999513 20-19: 0.99999904001124 20-20: 0.99999999396847 20-21: 0.99999904631193 20-22: 0.99999999396552 20-23: 0.99999904029529 20-24: 0.99999999999549 20-25: 0.99999904029726 |
20-26: 0.99999999395214 20-27: 0.99999904624766 20-28: 0.99999999372105 20-29: 0.99999903944730 20-30: 0.99999999727025 20-31: 0.99999903213891 20-32: 0.99999997109756 20-33: 0.99999898581136 20-34: 0.99999984205346 20-35: 0.99999867656920 20-36: 0.99999916634212 20-37: 0.99999720531385 20-38: 0.99999610408373 20-39: 0.99999108552566 20-40: 0.99998423189515 20-41: 0.99996879070885 20-42: 0.99994363731165 20-43: 0.99989693022016 20-44: 0.99981989051085 20-45: 0.99968939953068 20-46: 0.99948051549626 20-47: 0.99914780861670 20-48: 0.99863638061728 20-49: 0.99786177993229 20-50: 0.99672005080563 |
20-51: 0.99506707024239 20-52: 0.99272887629075 20-53: 0.98948262024241 20-54: 0.98506978577570 20-55: 0.97918166291040 20-56: 0.97147888539193 20-57: 0.96158455316531 20-58: 0.94911243316561 20-59: 0.93366934904422 20-60: 0.91489190895663 20-61: 0.89245601914405 20-62: 0.86611814154617 20-63: 0.83572585907094 20-64: 0.80125559202196 20-65: 0.76281560356233 20-66: 0.72067096552795 20-67: 0.67523072995072 20-68: 0.62705369094822 20-69: 0.57681624077602 20-70: 0.52529823675367 |
らすかるさんからのコメントです。(平成30年7月8日付け)
プログラムが正しいことの確認の意味もあり、サイコロがn個(n≧12)のときに和12が作れ
る確率を手計算してみました。
和12が作れないためには、殆ど全て5(数個以外はすべて5)でなければならないのは明ら
かで、全部のパターンを洗い出すと、
(a) 全部5 (b) 1、残り5 (c) 1、3、残り5 (d) 1、4、残り5 (e) 1、4、4、残り5
(f) 3、残り5 (g) 3、3、残り5 (h) 3、3、3、残り5 (i) 3、6、残り5 (j) 4、残り5
(k) 4、4、残り5 (l) 4、4、6、残り5 (m) 4、6、残り5 (n) 6、残り5
の14パターンとなり、それぞれの場合の数は、
(a) 1通り (b)(f)(j)(n) n通り (c)(d)(i)(m) nP2通り (e)(l) nP3/2通り (g)(k)
nC2通り
(h) nC3通り
なので、和12が作れる確率は、
1-(1+n*4+nP2*4+nP3/2*2+nC2*2+nC3)/6^n= 1-(n+1)(7n^2+2n+6)/6^(n+1)
となります。実際、n=20のとき、1-21*(7*20^2+2*20+6)/6^21 = 0.9999999999972755557…
となり、前の結果と一致します。
和12の次に多い和24も、作れないのは「殆ど全て5」の場合のみ。以降多い順に、
和18は、「殆ど全て4」または「殆ど全て5」 、和30は、「殆ど全て4」のみ
和6は、「殆ど全て4」または「殆ど全て5」 、
和16は、「殆ど全て3」または「殆ど全て5」または「殆ど全て6」
などのようになりますね。
GAI さんからのコメントです。(平成30年7月8日付け)
10個のサイコロでのある和をモニターするだけでもあれだけの時間(2〜3時間)を要して
いたことを考えると、20個のサイコロでこれだけのパターンの確率をあの短時間で掲載され
ていることがいかに凄いことか!
効率よい検索の色々な技術をさぞ組み合わせないと、これだけのことは出来ないと想像さ
れます。
私はマニュアル本を読みながら、まさに見様見真似で積み木で組んでいる様ですのでこん
なものを見せられると、プログラムの技術も奥は深いものだと感慨を持ちます。
らすかるさんはプログラムの勉強は独学なんですか?それとも誰かの師とかがおられるん
でしょうか?
らすかるさんからのコメントです。(平成30年7月8日付け)
独学です。始めたのが40年前(パソコンが出る少し前)で、まわりにマイコンを知ってる人
はいませんでした。プログラム構造や検索などのロジックは、いつも全て自前です。
moonlight さんからのコメントです。(平成30年7月8日付け)
久しぶりに覗いたら面白い話が。で、遡って見てみたのだけど、野菜の袋詰めの場合、野
菜の重さの分布が一律ってのはちょっと現実から離れ過ぎているような...。
分布を現実的にするために、例えば、一つの野菜の重さは「サイコロ6個の目の和にする」
とかすれば、少しはリアルになるのではと思いました。