[英]custom propagator via pyscipopt
我正在嘗試為 SCIP 編寫自定義值傳播器。 我有一些復雜的邏輯可以檢測到附加值,只要一個或多個固定(通過分支機制),這些值也可以固定。 我有下面的代碼顯然使一切都不可行(這是不正確的)。 我的問題:
class MyPropagator(scip.Prop):
def propexec(self, proptiming):
vars = self.model.getVars(transformed=False)
hit_some = False
node = self.model.getCurrentNode()
for var in vars:
if self.model.isFeasEQ(var.getLbLocal(), var.getUbLocal()): # is fixed in subtree?
impossible, wants_fix = self.check_constraints(var.name)
if impossible:
return {"result": scip.scip.PY_SCIP_RESULT.CUTOFF}
for key_var, value in wants_fix: # fix each of these in the subtree
self.model.chgVarLbNode(node, key_var, value)
self.model.chgVarUbNode(node, key_var, value)
hit_some = True
if hit_some:
return {"result": scip.scip.PY_SCIP_RESULT.REDUCEDDOM}
return {"result": scip.scip.PY_SCIP_RESULT.DIDNOTFIND}
chgVarLb
而不是chgVarLbNoode
。 它將自動將綁定更改正確地添加為當前節點的本地更改。getVars
很好,只要你使用轉換后的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.