自作のMIPソルバで数値型を選択可能にしていたら、Rationalだと期待した最適解が得られるけど、Doubleだとその解がが出てこないという報告があった。
https://github.com/msakai/toysolver/issues/5
確認してみると、ゴモリーの混合整数カットを追加して、分枝した後の双対単体法の適用時に、ある非負変数が-5.551115123125783e-17という微小な負の値で、実行不能と判定されてしまっていた。
こういうことはあるだろうとは思ってたけど、実際に遭遇するのは初めてで、ちょっとへぇと思った。
ちゃんと対応するには、普通のMIPソルバがやっているように、各種のtoleranceのパラメータを用意して、その範囲内の違反などは許容する必要があるのだけれど、アルゴリズム学習用に書いただけのコードに対して、そういう本格的な機能を加えてコードを複雑にするのもなぁ、という気もする。
それに、それ以前に改訂単体法でない普通の単体法を使っていたり、スケーリングをしていなかったりという時点で、浮動小数点数を使った場合の数値安定性は酷いだろうし……