When an opponent action is observed, the Opponent Modeler obtains the threshold hand value needed for the observed action and bases the weight adjustment on that value. The Opponent Modeler maintains statistics for each opponent between games. These statistics are used to calculate the frequency of folding, calling and raising of each opponent per round and number of bets to call. From these frequencies, the Opponent Modeler deduces the average () and variance () of the threshold needed for the observed action. The threshold can be obtained either from default action frequencies (generic opponent modeling) or from the opponent's observed action frequencies (specific opponent modeling).
During the reweighting process, the reweight factors (
are assigned based on the distance between the hand value (income rate
for the preflop and EHS for the postflop rounds) and .
income rates used in the preflop are not a percentile hand valuing system
like EHS, the
obtained needs to be converted from a percentile value to
a value on the income rate scale.
To achieve this,
is used to index into a sorted array (sample the nearest
point) of the
= 1326 (all two-card hands) income rate values.
For example, based on observed frequencies, the Opponent Modeler deduces that an opponent needs a median EHS () of 0.6 to call a bet on the flop, with a lower bound of 0.4 and an upper bound of 0.8 ( ). In this case, all hands with an EHS greater than 0.8 are given reweighting factors of 1.0. Any hand with a value less than 0.4 is assigned a reweighting factor of 0.01, and a linear interpolation is performed for values between 0.4 and 0.8.
To avoid eliminating legal subcases completely, no weight is allowed to go below 0.01. In Loki-1, the Opponent Modeler only performs one reweighting per model per round. A copy of the weight table is stored at the beginning of each round and used in the reweighting process each time a new action is witnessed that requires a higher threshold. For example, assume an opponent calls a bet, and the reweight process uses to adjust the weight table. If, later in the betting round, that opponent raises, the reweighting will be done with the higher value of over the stored copy of the weight table.