SATソルバが鍵となります。しかし、長大のインスタンスにおいて、いきなり年間[1840,1872]時間では、探索範囲が膨大過ぎます。探索範囲をなるべく限定することを考えます。
Power On時、Target Rangeに至る経路は膨大です。そのままでSAT SOLVEすると爆発して求めることができません。
そこで、まずは、LpSolverで、LowerBoundまで求めます。LB≒UBの性質を利用してグラフをReductionします。Reductionしたグラフ上で、Day毎に[最小:最大]を算出して、上図のように探索範囲を限定してやろう、という算段です。最適化という作業は、選択と評価探索の言い換えです。OR世界では、Branch&Boundという最強の手法が存在しますが、残念ながら、今回の規模は大きすぎてそれでも時間がかかりすぎるために、この手法に至っています。
具体的には、次のアルゴリズムで、Day毎の[最小:最大]を確定させます。
動的計画法を単に用いただけでは、終端での最小・最大値しか担保されません。あらゆる中間ノードに踏み込こむことで、はじめて厳密なDay毎の累計最小・最大状態を得ることが出来ます。
0 件のコメント:
コメントを投稿