なんかアルゴリズムとか仰々しい名前を冠しているが、要するにただ最適化はできないので、それに近い良い配置法をこちらが考えてPCに実行させる、というそれだけのもの。
仮に最適解が求められたとしても、その配置データをまるごとウディタ側に持ってくるのも大変な上、なによりそんなに最適化してしまうとユーザー側の利益になってまうやん、という2つの理由から、そこそこのアルゴリズム、しかも実装しやすい簡単なものでよいだろう、という発想に至ったのである。
まず以下のように配置を優先する。
7個オッズアップ→7個ライン→7個リーチ→5個オッズアップ→5個ライン→…
途中で5個リーチ→4個オッズアップというなんかおかしい流れになるが、まあよしとする。
さてビンゴのパターンは7個ラインが2つ、5個ラインが4つ、4個ラインが8つ、3個ラインが10個ある。まずはn個ラインのm個目のビンゴとして、7つ組を返す関数を定義。
5個など7個に満たなければ、その5個以外は0を返すようにする。
こうしてできあがった、ある意味関数とも呼べるこの作用をfとしておく。
次に、現在までに入った球数から、すべてのmとnの組み合わせに対してfを作用させて、必要な各種ラインまでに何個必要であるのかを2+4+8+10個の変数に格納する。
そして配置可能なFREE個数とを比較して、以下のように処理を行う。
配置可能数<最低必要個数 しょうがないのでそれを採用する。
配置可能数=最低必要個数 この最低個数となるものをもってビンゴとなり処理終了
配置可能数>最低必要個数 最低個数分配置して、繰り返し上記の作業を行う。
もちろんこのやり方が最適解であるはずがないが、それでも現状の単純すぎる配置方法よりはなかなかに良いものになる…と期待している。
これに至っては、ペイアウト率をあらかじめたくさん試行させてだいたいの概算値をつかんでおく予定である。
本当はプログラムは大量計算と実際の演出をするウディタと別に分けたいが、なんか時間がもったいないので全部をウディタでさせることにする。
mathematicaとかはこういうのはifとかwhileやwhichやforなどでかなり楽に記述できる(単純とは言ってない)上に計算能力が非常に高いという利点はあるが…。
このプログラムを考えている間にもPO調整は進行中である。