OMMX Python SDK 1.8.0#
個々の変更についてはGitHub Releaseを参照してください。
⚠️ SolverAdapter
の追加による破壊的変更が含まれています。
Summary#
ソルバー用の共通インターフェイスとして、新しく
SolverAdapter
基底クラスが追加されました base class to serve as a common interface for adapters to different solvers.ommx-python-mip-adapter
とommx-pyscipopt-adapter
は Adapter実装ガイドに基づいて、SolverAdapter
を使うように更新されました。⚠️ 破壊的変更です。このadapterを使用しているコードは更新が必要となります。
他のadapterは今後更新予定
Solver Adapter#
SolverAdapter
は各adapterのAPIの一貫性を高めるために追加された抽象基底クラスです。ommx-python-mip-adapter
とommx-pyscipopt-adapter
はSolverAdapter
を使うように修正されました。
新しいAdapterインターフェイスで簡単な解き方の例を見てみましょう。
from ommx.v1 import Instance, DecisionVariable
from ommx_python_mip_adapter import OMMXPythonMIPAdapter
p = [10, 13, 18, 32, 7, 15]
w = [11, 15, 20, 35, 10, 33]
x = [DecisionVariable.binary(i) for i in range(6)]
instance = Instance.from_components(
decision_variables=x,
objective=sum(p[i] * x[i] for i in range(6)),
constraints=[sum(w[i] * x[i] for i in range(6)) <= 47],
sense=Instance.MAXIMIZE,
)
solution = OMMXPythonMIPAdapter.solve(instance)
solution.objective
42.0
このリリースによって、OMMXPySCIPOptAdapter
クラスを使った場合でも上記と同じ書き方ができるようになりました。
以前のinstance_to_model()
を使ったコードを書き換える場合は, Adapterのインスタンスを作ってsolver_input
を利用できます。 ソルバーのパラメータ変更などして、手動でを最適化を行ってから、decode()
でOMMXのSolution
を取得できます。
adapter = OMMXPythonMIPAdapter(instance)
model = adapter.solver_input # OMMXPythonMIPAdapter場合、これは`mip.Model`です
# パラメータの変更
model.optimize()
solution = adapter.decode(model)
solution.objective
42.0