COPTのライセンスが切れる前にデータ採取した結果を次に示します。下表は、現在開発中のSolverで、同一インスタンスに対して、両者の求解時間を比較したものです。厳密解証明完了までの時間です。Instance9とInstance15、それからinstance22以降は、簡単に求まらないので外しています。
CLPによる求解時間を1としたときの結果です。上の結果を正規化しました。
考察
市井のナーススケジューリング問題の規模は、大体4Weeks、Staff30名のインスタンス8程度以下になります。そうした規模のインスタンスでは、CLP(Simplex)が圧倒的です。つまり、通常のナーススケジューリング問題規模では、商用ソルバを必要としません。
Barrier Solverが効いてくるのは、上表黄色のインスタンスで、規模の大きなインスタンスになります。特に、Instance20以降では、指数関数的に規模が効いてきて、Simplexは、現実的ではなくなります。
従って、問題規模によってLpSolverを切り替えるのが実装としてReasonableです。規模の指標は、行数、列数とも考えられますが、Claude Codeのお勧めは、NNZでした。NNZは、OSIのIFでは、下式で、求められます。
int nnz = osi.getNumElements();
0 件のコメント:
コメントを投稿