mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 09:28:51 -06:00
Rename features.constraints to constraints_old
This commit is contained in:
@@ -78,7 +78,7 @@ class StaticLazyConstraintsComponent(Component):
|
|||||||
assert solver.internal_solver is not None
|
assert solver.internal_solver is not None
|
||||||
assert sample.after_load is not None
|
assert sample.after_load is not None
|
||||||
assert sample.after_load.instance is not None
|
assert sample.after_load.instance is not None
|
||||||
assert sample.after_load.constraints is not None
|
assert sample.after_load.constraints_old is not None
|
||||||
|
|
||||||
logger.info("Predicting violated (static) lazy constraints...")
|
logger.info("Predicting violated (static) lazy constraints...")
|
||||||
if sample.after_load.instance.lazy_constraint_count == 0:
|
if sample.after_load.instance.lazy_constraint_count == 0:
|
||||||
@@ -86,7 +86,7 @@ class StaticLazyConstraintsComponent(Component):
|
|||||||
self.enforced_cids = set(self.sample_predict(sample))
|
self.enforced_cids = set(self.sample_predict(sample))
|
||||||
logger.info("Moving lazy constraints to the pool...")
|
logger.info("Moving lazy constraints to the pool...")
|
||||||
self.pool = {}
|
self.pool = {}
|
||||||
for (cid, cdict) in sample.after_load.constraints.items():
|
for (cid, cdict) in sample.after_load.constraints_old.items():
|
||||||
if cdict.lazy and cid not in self.enforced_cids:
|
if cdict.lazy and cid not in self.enforced_cids:
|
||||||
self.pool[cid] = cdict
|
self.pool[cid] = cdict
|
||||||
solver.internal_solver.remove_constraint(cid)
|
solver.internal_solver.remove_constraint(cid)
|
||||||
@@ -194,8 +194,8 @@ class StaticLazyConstraintsComponent(Component):
|
|||||||
y: Dict[Hashable, List[List[float]]] = {}
|
y: Dict[Hashable, List[List[float]]] = {}
|
||||||
cids: Dict[Hashable, List[str]] = {}
|
cids: Dict[Hashable, List[str]] = {}
|
||||||
assert sample.after_load is not None
|
assert sample.after_load is not None
|
||||||
assert sample.after_load.constraints is not None
|
assert sample.after_load.constraints_old is not None
|
||||||
for (cid, constr) in sample.after_load.constraints.items():
|
for (cid, constr) in sample.after_load.constraints_old.items():
|
||||||
# Initialize categories
|
# Initialize categories
|
||||||
if not constr.lazy:
|
if not constr.lazy:
|
||||||
continue
|
continue
|
||||||
@@ -213,9 +213,9 @@ class StaticLazyConstraintsComponent(Component):
|
|||||||
sf = sample.after_lp
|
sf = sample.after_lp
|
||||||
assert sf.instance is not None
|
assert sf.instance is not None
|
||||||
features = list(sf.instance.to_list())
|
features = list(sf.instance.to_list())
|
||||||
assert sf.constraints is not None
|
assert sf.constraints_old is not None
|
||||||
assert sf.constraints[cid] is not None
|
assert sf.constraints_old[cid] is not None
|
||||||
features.extend(sf.constraints[cid].to_list())
|
features.extend(sf.constraints_old[cid].to_list())
|
||||||
x[category].append(features)
|
x[category].append(features)
|
||||||
cids[category].append(cid)
|
cids[category].append(cid)
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ class Constraint:
|
|||||||
class Features:
|
class Features:
|
||||||
instance: Optional[InstanceFeatures] = None
|
instance: Optional[InstanceFeatures] = None
|
||||||
variables: Optional[VariableFeatures] = None
|
variables: Optional[VariableFeatures] = None
|
||||||
constraints: Optional[Dict[str, Constraint]] = None
|
constraints_old: Optional[Dict[str, Constraint]] = None
|
||||||
lp_solve: Optional["LPSolveStats"] = None
|
lp_solve: Optional["LPSolveStats"] = None
|
||||||
mip_solve: Optional["MIPSolveStats"] = None
|
mip_solve: Optional["MIPSolveStats"] = None
|
||||||
extra: Optional[Dict] = None
|
extra: Optional[Dict] = None
|
||||||
@@ -147,7 +147,7 @@ class FeaturesExtractor:
|
|||||||
with_static=with_static,
|
with_static=with_static,
|
||||||
with_sa=self.with_sa,
|
with_sa=self.with_sa,
|
||||||
)
|
)
|
||||||
features.constraints = solver.get_constraints(
|
features.constraints_old = solver.get_constraints(
|
||||||
with_static=with_static,
|
with_static=with_static,
|
||||||
)
|
)
|
||||||
if with_static:
|
if with_static:
|
||||||
@@ -201,9 +201,9 @@ class FeaturesExtractor:
|
|||||||
instance: "Instance",
|
instance: "Instance",
|
||||||
features: Features,
|
features: Features,
|
||||||
) -> None:
|
) -> None:
|
||||||
assert features.constraints is not None
|
assert features.constraints_old is not None
|
||||||
has_static_lazy = instance.has_static_lazy_constraints()
|
has_static_lazy = instance.has_static_lazy_constraints()
|
||||||
for (cid, constr) in features.constraints.items():
|
for (cid, constr) in features.constraints_old.items():
|
||||||
user_features = None
|
user_features = None
|
||||||
category = instance.get_constraint_category(cid)
|
category = instance.get_constraint_category(cid)
|
||||||
if category is not None:
|
if category is not None:
|
||||||
@@ -232,7 +232,7 @@ class FeaturesExtractor:
|
|||||||
instance: "Instance",
|
instance: "Instance",
|
||||||
features: Features,
|
features: Features,
|
||||||
) -> None:
|
) -> None:
|
||||||
assert features.constraints is not None
|
assert features.constraints_old is not None
|
||||||
user_features = instance.get_instance_features()
|
user_features = instance.get_instance_features()
|
||||||
if isinstance(user_features, np.ndarray):
|
if isinstance(user_features, np.ndarray):
|
||||||
user_features = user_features.tolist()
|
user_features = user_features.tolist()
|
||||||
@@ -246,7 +246,7 @@ class FeaturesExtractor:
|
|||||||
f"Found {type(v).__name__} instead."
|
f"Found {type(v).__name__} instead."
|
||||||
)
|
)
|
||||||
lazy_count = 0
|
lazy_count = 0
|
||||||
for (cid, cdict) in features.constraints.items():
|
for (cid, cdict) in features.constraints_old.items():
|
||||||
if cdict.lazy:
|
if cdict.lazy:
|
||||||
lazy_count += 1
|
lazy_count += 1
|
||||||
features.instance = InstanceFeatures(
|
features.instance = InstanceFeatures(
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ def sample() -> Sample:
|
|||||||
instance=InstanceFeatures(
|
instance=InstanceFeatures(
|
||||||
lazy_constraint_count=4,
|
lazy_constraint_count=4,
|
||||||
),
|
),
|
||||||
constraints={
|
constraints_old={
|
||||||
"c1": Constraint(category="type-a", lazy=True),
|
"c1": Constraint(category="type-a", lazy=True),
|
||||||
"c2": Constraint(category="type-a", lazy=True),
|
"c2": Constraint(category="type-a", lazy=True),
|
||||||
"c3": Constraint(category="type-a", lazy=True),
|
"c3": Constraint(category="type-a", lazy=True),
|
||||||
@@ -42,7 +42,7 @@ def sample() -> Sample:
|
|||||||
),
|
),
|
||||||
after_lp=Features(
|
after_lp=Features(
|
||||||
instance=InstanceFeatures(),
|
instance=InstanceFeatures(),
|
||||||
constraints={
|
constraints_old={
|
||||||
"c1": Constraint(),
|
"c1": Constraint(),
|
||||||
"c2": Constraint(),
|
"c2": Constraint(),
|
||||||
"c3": Constraint(),
|
"c3": Constraint(),
|
||||||
@@ -57,16 +57,16 @@ def sample() -> Sample:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
sample.after_lp.instance.to_list = Mock(return_value=[5.0]) # type: ignore
|
sample.after_lp.instance.to_list = Mock(return_value=[5.0]) # type: ignore
|
||||||
sample.after_lp.constraints["c1"].to_list = Mock( # type: ignore
|
sample.after_lp.constraints_old["c1"].to_list = Mock( # type: ignore
|
||||||
return_value=[1.0, 1.0]
|
return_value=[1.0, 1.0]
|
||||||
)
|
)
|
||||||
sample.after_lp.constraints["c2"].to_list = Mock( # type: ignore
|
sample.after_lp.constraints_old["c2"].to_list = Mock( # type: ignore
|
||||||
return_value=[1.0, 2.0]
|
return_value=[1.0, 2.0]
|
||||||
)
|
)
|
||||||
sample.after_lp.constraints["c3"].to_list = Mock( # type: ignore
|
sample.after_lp.constraints_old["c3"].to_list = Mock( # type: ignore
|
||||||
return_value=[1.0, 3.0]
|
return_value=[1.0, 3.0]
|
||||||
)
|
)
|
||||||
sample.after_lp.constraints["c4"].to_list = Mock( # type: ignore
|
sample.after_lp.constraints_old["c4"].to_list = Mock( # type: ignore
|
||||||
return_value=[1.0, 4.0, 0.0]
|
return_value=[1.0, 4.0, 0.0]
|
||||||
)
|
)
|
||||||
return sample
|
return sample
|
||||||
@@ -115,7 +115,7 @@ def test_usage_with_solver(instance: Instance) -> None:
|
|||||||
stats: LearningSolveStats = {}
|
stats: LearningSolveStats = {}
|
||||||
sample = instance.samples[0]
|
sample = instance.samples[0]
|
||||||
assert sample.after_load is not None
|
assert sample.after_load is not None
|
||||||
assert sample.after_load.constraints is not None
|
assert sample.after_load.constraints_old is not None
|
||||||
assert sample.after_mip is not None
|
assert sample.after_mip is not None
|
||||||
assert sample.after_mip.extra is not None
|
assert sample.after_mip.extra is not None
|
||||||
del sample.after_mip.extra["lazy_enforced"]
|
del sample.after_mip.extra["lazy_enforced"]
|
||||||
@@ -143,7 +143,7 @@ def test_usage_with_solver(instance: Instance) -> None:
|
|||||||
|
|
||||||
# Should ask internal solver to verify if constraints in the pool are
|
# Should ask internal solver to verify if constraints in the pool are
|
||||||
# satisfied and add the ones that are not
|
# satisfied and add the ones that are not
|
||||||
c3 = sample.after_load.constraints["c3"]
|
c3 = sample.after_load.constraints_old["c3"]
|
||||||
internal.is_constraint_satisfied.assert_called_once_with(c3, tol=1.0)
|
internal.is_constraint_satisfied.assert_called_once_with(c3, tol=1.0)
|
||||||
internal.is_constraint_satisfied.reset_mock()
|
internal.is_constraint_satisfied.reset_mock()
|
||||||
internal.add_constraint.assert_called_once_with(c3, name="c3")
|
internal.add_constraint.assert_called_once_with(c3, name="c3")
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ def test_knapsack() -> None:
|
|||||||
|
|
||||||
features = FeaturesExtractor().extract(instance, solver)
|
features = FeaturesExtractor().extract(instance, solver)
|
||||||
assert features.variables is not None
|
assert features.variables is not None
|
||||||
assert features.constraints is not None
|
assert features.constraints_old is not None
|
||||||
assert features.instance is not None
|
assert features.instance is not None
|
||||||
|
|
||||||
assert_equals(
|
assert_equals(
|
||||||
@@ -65,7 +65,7 @@ def test_knapsack() -> None:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
assert_equals(
|
assert_equals(
|
||||||
_round_constraints(features.constraints),
|
_round_constraints(features.constraints_old),
|
||||||
{
|
{
|
||||||
"eq_capacity": Constraint(
|
"eq_capacity": Constraint(
|
||||||
basis_status="N",
|
basis_status="N",
|
||||||
|
|||||||
Reference in New Issue
Block a user