|
|
|
@ -153,11 +153,12 @@ class LearningSolver:
|
|
|
|
|
assert isinstance(self.internal_solver, InternalSolver)
|
|
|
|
|
self.internal_solver.set_instance(instance, model)
|
|
|
|
|
|
|
|
|
|
# Extract features
|
|
|
|
|
# Extract features (after-load)
|
|
|
|
|
# -------------------------------------------------------
|
|
|
|
|
if instance.features.instance is None:
|
|
|
|
|
logger.info("Extracting features...")
|
|
|
|
|
FeaturesExtractor(self.internal_solver).extract(instance)
|
|
|
|
|
logger.info("Extracting features (after-load)...")
|
|
|
|
|
features = FeaturesExtractor(self.internal_solver).extract(instance)
|
|
|
|
|
instance.features.__dict__ = features.__dict__
|
|
|
|
|
instance.features_after_load.append(features)
|
|
|
|
|
|
|
|
|
|
callback_args = (
|
|
|
|
|
self,
|
|
|
|
@ -186,6 +187,12 @@ class LearningSolver:
|
|
|
|
|
for component in self.components.values():
|
|
|
|
|
component.after_solve_lp(*callback_args)
|
|
|
|
|
|
|
|
|
|
# Extract features (after-lp)
|
|
|
|
|
# -------------------------------------------------------
|
|
|
|
|
logger.info("Extracting features (after-lp)...")
|
|
|
|
|
features = FeaturesExtractor(self.internal_solver).extract(instance)
|
|
|
|
|
instance.features_after_lp.append(features)
|
|
|
|
|
|
|
|
|
|
# Callback wrappers
|
|
|
|
|
# -------------------------------------------------------
|
|
|
|
|
def iteration_cb_wrapper() -> bool:
|
|
|
|
@ -242,6 +249,12 @@ class LearningSolver:
|
|
|
|
|
)
|
|
|
|
|
stats["Mode"] = self.mode
|
|
|
|
|
|
|
|
|
|
# Extract features (after-mip)
|
|
|
|
|
# -------------------------------------------------------
|
|
|
|
|
logger.info("Extracting features (after-mip)...")
|
|
|
|
|
features = FeaturesExtractor(self.internal_solver).extract(instance)
|
|
|
|
|
instance.features_after_mip.append(features)
|
|
|
|
|
|
|
|
|
|
# Add some information to training_sample
|
|
|
|
|
# -------------------------------------------------------
|
|
|
|
|
training_sample.lower_bound = stats["Lower bound"]
|
|
|
|
|