mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 01:18:52 -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 sample.after_load 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...")
|
||||
if sample.after_load.instance.lazy_constraint_count == 0:
|
||||
@@ -86,7 +86,7 @@ class StaticLazyConstraintsComponent(Component):
|
||||
self.enforced_cids = set(self.sample_predict(sample))
|
||||
logger.info("Moving lazy constraints to the 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:
|
||||
self.pool[cid] = cdict
|
||||
solver.internal_solver.remove_constraint(cid)
|
||||
@@ -194,8 +194,8 @@ class StaticLazyConstraintsComponent(Component):
|
||||
y: Dict[Hashable, List[List[float]]] = {}
|
||||
cids: Dict[Hashable, List[str]] = {}
|
||||
assert sample.after_load is not None
|
||||
assert sample.after_load.constraints is not None
|
||||
for (cid, constr) in sample.after_load.constraints.items():
|
||||
assert sample.after_load.constraints_old is not None
|
||||
for (cid, constr) in sample.after_load.constraints_old.items():
|
||||
# Initialize categories
|
||||
if not constr.lazy:
|
||||
continue
|
||||
@@ -213,9 +213,9 @@ class StaticLazyConstraintsComponent(Component):
|
||||
sf = sample.after_lp
|
||||
assert sf.instance is not None
|
||||
features = list(sf.instance.to_list())
|
||||
assert sf.constraints is not None
|
||||
assert sf.constraints[cid] is not None
|
||||
features.extend(sf.constraints[cid].to_list())
|
||||
assert sf.constraints_old is not None
|
||||
assert sf.constraints_old[cid] is not None
|
||||
features.extend(sf.constraints_old[cid].to_list())
|
||||
x[category].append(features)
|
||||
cids[category].append(cid)
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@ class Constraint:
|
||||
class Features:
|
||||
instance: Optional[InstanceFeatures] = None
|
||||
variables: Optional[VariableFeatures] = None
|
||||
constraints: Optional[Dict[str, Constraint]] = None
|
||||
constraints_old: Optional[Dict[str, Constraint]] = None
|
||||
lp_solve: Optional["LPSolveStats"] = None
|
||||
mip_solve: Optional["MIPSolveStats"] = None
|
||||
extra: Optional[Dict] = None
|
||||
@@ -147,7 +147,7 @@ class FeaturesExtractor:
|
||||
with_static=with_static,
|
||||
with_sa=self.with_sa,
|
||||
)
|
||||
features.constraints = solver.get_constraints(
|
||||
features.constraints_old = solver.get_constraints(
|
||||
with_static=with_static,
|
||||
)
|
||||
if with_static:
|
||||
@@ -201,9 +201,9 @@ class FeaturesExtractor:
|
||||
instance: "Instance",
|
||||
features: Features,
|
||||
) -> None:
|
||||
assert features.constraints is not None
|
||||
assert features.constraints_old is not None
|
||||
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
|
||||
category = instance.get_constraint_category(cid)
|
||||
if category is not None:
|
||||
@@ -232,7 +232,7 @@ class FeaturesExtractor:
|
||||
instance: "Instance",
|
||||
features: Features,
|
||||
) -> None:
|
||||
assert features.constraints is not None
|
||||
assert features.constraints_old is not None
|
||||
user_features = instance.get_instance_features()
|
||||
if isinstance(user_features, np.ndarray):
|
||||
user_features = user_features.tolist()
|
||||
@@ -246,7 +246,7 @@ class FeaturesExtractor:
|
||||
f"Found {type(v).__name__} instead."
|
||||
)
|
||||
lazy_count = 0
|
||||
for (cid, cdict) in features.constraints.items():
|
||||
for (cid, cdict) in features.constraints_old.items():
|
||||
if cdict.lazy:
|
||||
lazy_count += 1
|
||||
features.instance = InstanceFeatures(
|
||||
|
||||
@@ -32,7 +32,7 @@ def sample() -> Sample:
|
||||
instance=InstanceFeatures(
|
||||
lazy_constraint_count=4,
|
||||
),
|
||||
constraints={
|
||||
constraints_old={
|
||||
"c1": Constraint(category="type-a", lazy=True),
|
||||
"c2": Constraint(category="type-a", lazy=True),
|
||||
"c3": Constraint(category="type-a", lazy=True),
|
||||
@@ -42,7 +42,7 @@ def sample() -> Sample:
|
||||
),
|
||||
after_lp=Features(
|
||||
instance=InstanceFeatures(),
|
||||
constraints={
|
||||
constraints_old={
|
||||
"c1": Constraint(),
|
||||
"c2": 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.constraints["c1"].to_list = Mock( # type: ignore
|
||||
sample.after_lp.constraints_old["c1"].to_list = Mock( # type: ignore
|
||||
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]
|
||||
)
|
||||
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]
|
||||
)
|
||||
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 sample
|
||||
@@ -115,7 +115,7 @@ def test_usage_with_solver(instance: Instance) -> None:
|
||||
stats: LearningSolveStats = {}
|
||||
sample = instance.samples[0]
|
||||
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.extra is not None
|
||||
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
|
||||
# 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.reset_mock()
|
||||
internal.add_constraint.assert_called_once_with(c3, name="c3")
|
||||
|
||||
@@ -27,7 +27,7 @@ def test_knapsack() -> None:
|
||||
|
||||
features = FeaturesExtractor().extract(instance, solver)
|
||||
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_equals(
|
||||
@@ -65,7 +65,7 @@ def test_knapsack() -> None:
|
||||
),
|
||||
)
|
||||
assert_equals(
|
||||
_round_constraints(features.constraints),
|
||||
_round_constraints(features.constraints_old),
|
||||
{
|
||||
"eq_capacity": Constraint(
|
||||
basis_status="N",
|
||||
|
||||
Reference in New Issue
Block a user