x(1,1,7)=1なら、2行目、2列目のセルには8が入るという意味である。数字が埋まっているインデックスと数値を以下で定義する。1列目のセルに5が入っていたら、以下とする。制約条件どの1行においても、同じ数字は1回だけしか使えない。どの1列においても、同じ数字は1回だけしか使えない。どの3x3においても、同じ数字は1回だけしか使えない。数字が埋まっている場所では、その数字を使う。計算機のクラスを作成しています。重要なポイントは以下です。計算機の抽象クラスには計算以外の機能を全て巻き取らせている。OR-Toolsの実装について計算能力以外で差が出ないように、出来るだけ定式化のコードを同じにしている。それぞれの計算機で求解する場所の前後で時間計測を行っている。全体の結果は上図(箱ひげ図)の通りです。平均で7倍前後程度の差が出ました。計算一回当たりの処理時間の代表値は以下の表の通りです。0.094また、10回のトライアルの詳細な計算時間は上図の通りです。問題ごとに傾向はあまり見られない為、純粋なライブラリの実力が出ていると考えられます。最後に数独の求解に関して、7倍程度の差が出るとは予想外でした。問題のスケールも含めて調べてみようかと思います。Appendix1(定式化)以下は定式化(数式)です。Appendix2(実装)以下はクラスの全文です。計算機の抽象クラスは以下です。self.__calc_time以下がPuLPの実装です。PuLPを用いた計算機です。問題種別次第で処理を変更する。