diff --git a/Algorithm/Rating/Elo.php b/Algorithm/Rating/Elo.php index ae4b387dd..59dc9b1f7 100644 --- a/Algorithm/Rating/Elo.php +++ b/Algorithm/Rating/Elo.php @@ -88,9 +88,15 @@ final class Elo */ public function winProbability(int $elo1, int $elo2, bool $canDraw = false) : float { - return $canDraw - ? -1.0 // @todo implement - : 1 / (1 + \pow(10, ($elo2 - $elo1) / 400)); + $expectedWin = 1 / (1 + \pow(10, ($elo2 - $elo1) / 400)); + + if (!$canDraw) { + return $expectedWin; + } + + $draw = $this->drawProbability($elo1, $elo2); + + return (1.0 - $draw) * $expectedWin; } /** @@ -105,6 +111,12 @@ final class Elo */ public function drawProbability(int $elo1, int $elo2) : float { - return -1.0; // @todo implement + $diff = \abs($elo1 - $elo2); + + // Approximate draw probability: highest when ratings are equal, + // decreasing smoothly as the rating difference increases. + $maxDraw = 0.30; + + return $maxDraw * \exp(-($diff ** 2) / (2 * (200 ** 2))); } } diff --git a/Math/Stochastic/Distribution/GeometricDistribution.php b/Math/Stochastic/Distribution/GeometricDistribution.php index 624556be2..aeb7a9b08 100755 --- a/Math/Stochastic/Distribution/GeometricDistribution.php +++ b/Math/Stochastic/Distribution/GeometricDistribution.php @@ -27,6 +27,8 @@ final class GeometricDistribution /** * Constructor. * + * Example: dice roll + * * @since 1.0.0 * @codeCoverageIgnore */ @@ -34,6 +36,14 @@ final class GeometricDistribution { } + /** + * How often to roll to get a specific value with at least percent chance + */ + public static function getHowOften(float $p, float $percent) : float + { + return log(1.0 - $percent) / log(1 - $p); + } + /** * Get probability mass function. * diff --git a/Stdlib/Base/Heap.php b/Stdlib/Base/Heap.php index bee427726..e23fc2ebd 100755 --- a/Stdlib/Base/Heap.php +++ b/Stdlib/Base/Heap.php @@ -64,7 +64,7 @@ class Heap * * @since 1.0.0 */ - public function insort(HeapItemInterface $x, int $lo = 0) : void + public function insert(HeapItemInterface $x, int $lo = 0) : void { $hi = \count($this->nodes); diff --git a/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php b/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php index f83c6706d..f9e3c9c47 100755 --- a/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php +++ b/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php @@ -98,7 +98,7 @@ final class TesseractOcrTest extends \PHPUnit\Framework\TestCase * @group framework */ /* - @todo somehow this suddenly takes a long time. + this takes a long time. Might be because a php version update resulting in float 32->64bit changes? Fix it, it was working with php 8.0 public function testOcrWithThresholdingRotating() : void