重み付けされたサッカーくじの自動生成・・・
前ページでは、 サッカーくじの選択を完全にランダムに決めていましたが、 チーム
の勝敗表などを考慮した重みづけをプログラムに導入してみます。また、予想通り
試合の勝敗が決まっても配当金の額はあまり大きくならず、番狂わせが起きたとき
に高額になります。 従って、確率が高い選択だけでなく、意図的に確率が低いもの
も出力するようにします。 まずは、前ページのプログラムをGOTO文を使わない形
に書き換えてみます。BASIC以外の言語でプログラムを作るときの参考にしてくだ
さい。
課題(その1)
NUMBERS−3やNUMBERS−4にも対応できるように、上記のプログラムを
修正してください。
それでは、重み付けされたサッカーくじのプログラムを考えましょう。乱数を使って、
くじを自動生成する部分は上のプログラムと同じです。 この部分にさらに重み付け
の為の関数部を加えます。 ここでは、勝敗表の順位を重み付け関数に反映させま
す。以下の式の第三項が重み付けの為の関数部です。
N=3*RND−1.5+1.2*(TA(I)−TB(I))/18
TA(I)はチーム(ホーム)の順位であり、TB(I)はチーム(ビジター)の順位です。 も
し、この項がなければ、Nの値は−1.5から1.5までの間の値をランダムに取りま
す。−0.5未満を1、−0.5以上0.5未満を0、そして、0.5以上を2とすれば、重
み付けを考慮しない場合のくじの選択になります。 三つの数字の発生確率は同じ
になります。 ホームのチームの順位がビジターのチームの順位より高ければ、 第
三項は負の値となり、Nの値を負の方向にシフトさせます。つまり、1が出る確率が
高まります。 1.2 はシフトの大きさを調節する為の係数と考えてください。 全体の
プログラムは以下のようになります。
課題(その2)
Jリーグやイングランドのプレミアリーグなどの試合結果を統計的に分析して、重
み付け関数部の式を最適化してください。