Remove obsolete methods

This commit is contained in:
2021-04-13 09:42:25 -05:00
parent c26b852c67
commit c4a6665825
22 changed files with 93 additions and 499 deletions

View File

@@ -7,7 +7,7 @@ from typing import Any, List, TYPE_CHECKING, Tuple, Dict, Hashable, Optional
import numpy as np
from overrides import EnforceOverrides
from miplearn.features import TrainingSample, Features, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
from miplearn.types import LearningSolveStats
@@ -39,21 +39,6 @@ class Component(EnforceOverrides):
"""
return
def after_solve_lp_old(
self,
solver: "LearningSolver",
instance: Instance,
model: Any,
stats: LearningSolveStats,
features: Features,
training_data: TrainingSample,
) -> None:
"""
Method called by LearningSolver after the root LP relaxation is solved.
See before_solve_lp for a description of the parameters.
"""
return
def after_solve_mip(
self,
solver: "LearningSolver",
@@ -68,21 +53,6 @@ class Component(EnforceOverrides):
"""
return
def after_solve_mip_old(
self,
solver: "LearningSolver",
instance: Instance,
model: Any,
stats: LearningSolveStats,
features: Features,
training_data: TrainingSample,
) -> None:
"""
Method called by LearningSolver after the MIP is solved.
See before_solve_lp for a description of the parameters.
"""
return
def before_solve_lp(
self,
solver: "LearningSolver",
@@ -115,43 +85,6 @@ class Component(EnforceOverrides):
"""
return
def before_solve_lp_old(
self,
solver: "LearningSolver",
instance: Instance,
model: Any,
stats: LearningSolveStats,
features: Features,
training_data: TrainingSample,
) -> None:
"""
Method called by LearningSolver before the root LP relaxation is solved.
Parameters
----------
solver: LearningSolver
The solver calling this method.
instance: Instance
The instance being solved.
model
The concrete optimization model being solved.
stats: LearningSolveStats
A dictionary containing statistics about the solution process, such as
number of nodes explored and running time. Components are free to add
their own statistics here. For example, PrimalSolutionComponent adds
statistics regarding the number of predicted variables. All statistics in
this dictionary are exported to the benchmark CSV file.
features: miplearn.features.Features
Features describing the model.
training_data: TrainingSample
A dictionary containing data that may be useful for training machine
learning models and accelerating the solution process. Components are
free to add their own training data here. For example,
PrimalSolutionComponent adds the current primal solution. The data must
be pickable.
"""
return
def before_solve_mip(
self,
solver: "LearningSolver",
@@ -166,30 +99,6 @@ class Component(EnforceOverrides):
"""
return
def before_solve_mip_old(
self,
solver: "LearningSolver",
instance: Instance,
model: Any,
stats: LearningSolveStats,
features: Features,
training_data: TrainingSample,
) -> None:
"""
Method called by LearningSolver before the MIP is solved.
See before_solve_lp for a description of the parameters.
"""
return
def evaluate_old(self, instances: List[Instance]) -> List:
ev = []
for instance in instances:
instance.load()
for sample in instance.training_data:
ev += [self.sample_evaluate_old(instance, sample)]
instance.free()
return ev
def fit(
self,
training_instances: List[Instance],
@@ -200,16 +109,6 @@ class Component(EnforceOverrides):
y[cat] = np.array(y[cat])
self.fit_xy(x, y)
def fit_old(
self,
training_instances: List[Instance],
) -> None:
x, y = self.xy_instances_old(training_instances)
for cat in x.keys():
x[cat] = np.array(x[cat])
y[cat] = np.array(y[cat])
self.fit_xy(x, y)
def fit_xy(
self,
x: Dict[Hashable, np.ndarray],
@@ -259,13 +158,6 @@ class Component(EnforceOverrides):
) -> None:
return
def sample_evaluate_old(
self,
instance: Instance,
sample: TrainingSample,
) -> Dict[Hashable, Dict[str, float]]:
return {}
def sample_evaluate(
self,
instance: Optional[Instance],
@@ -285,18 +177,6 @@ class Component(EnforceOverrides):
"""
pass
def sample_xy_old(
self,
instance: Instance,
sample: TrainingSample,
) -> Tuple[Dict, Dict]:
"""
Returns a pair of x and y dictionaries containing, respectively, the matrices
of ML features and the labels for the sample. If the training sample does not
include label information, returns (x, {}).
"""
pass
def user_cut_cb(
self,
solver: "LearningSolver",
@@ -323,25 +203,3 @@ class Component(EnforceOverrides):
y_combined[cat] += y_sample[cat]
instance.free()
return x_combined, y_combined
def xy_instances_old(
self,
instances: List[Instance],
) -> Tuple[Dict, Dict]:
x_combined: Dict = {}
y_combined: Dict = {}
for instance in instances:
instance.load()
for sample in instance.training_data:
xy = self.sample_xy_old(instance, sample)
if xy is None:
continue
x_sample, y_sample = xy
for cat in x_sample.keys():
if cat not in x_combined:
x_combined[cat] = []
y_combined[cat] = []
x_combined[cat] += x_sample[cat]
y_combined[cat] += y_sample[cat]
instance.free()
return x_combined, y_combined

View File

@@ -12,7 +12,7 @@ from miplearn.classifiers import Classifier
from miplearn.classifiers.threshold import Threshold
from miplearn.components import classifier_evaluation_dict
from miplearn.components.component import Component
from miplearn.features import TrainingSample, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
logger = logging.getLogger(__name__)
@@ -37,44 +37,6 @@ class DynamicConstraintsComponent(Component):
self.known_cids: List[str] = []
self.attr = attr
def sample_xy_with_cids_old(
self,
instance: Instance,
sample: TrainingSample,
) -> Tuple[
Dict[Hashable, List[List[float]]],
Dict[Hashable, List[List[bool]]],
Dict[Hashable, List[str]],
]:
x: Dict[Hashable, List[List[float]]] = {}
y: Dict[Hashable, List[List[bool]]] = {}
cids: Dict[Hashable, List[str]] = {}
for cid in self.known_cids:
category = instance.get_constraint_category(cid)
if category is None:
continue
if category not in x:
x[category] = []
y[category] = []
cids[category] = []
assert instance.features.instance is not None
assert instance.features.instance.user_features is not None
cfeatures = instance.get_constraint_features(cid)
assert cfeatures is not None
assert isinstance(cfeatures, list)
for ci in cfeatures:
assert isinstance(ci, float)
f = list(instance.features.instance.user_features)
f += cfeatures
x[category] += [f]
cids[category] += [cid]
if getattr(sample, self.attr) is not None:
if cid in getattr(sample, self.attr):
y[category] += [[False, True]]
else:
y[category] += [[True, False]]
return x, y, cids
def sample_xy_with_cids(
self,
instance: Optional[Instance],
@@ -122,15 +84,6 @@ class DynamicConstraintsComponent(Component):
y[category] += [[True, False]]
return x, y, cids
@overrides
def sample_xy_old(
self,
instance: Instance,
sample: TrainingSample,
) -> Tuple[Dict, Dict]:
x, y, _ = self.sample_xy_with_cids_old(instance, sample)
return x, y
@overrides
def sample_xy(
self,
@@ -140,29 +93,6 @@ class DynamicConstraintsComponent(Component):
x, y, _ = self.sample_xy_with_cids(instance, sample)
return x, y
def sample_predict_old(
self,
instance: Instance,
sample: TrainingSample,
) -> List[Hashable]:
pred: List[Hashable] = []
if len(self.known_cids) == 0:
logger.info("Classifiers not fitted. Skipping.")
return pred
x, _, cids = self.sample_xy_with_cids_old(instance, sample)
for category in x.keys():
assert category in self.classifiers
assert category in self.thresholds
clf = self.classifiers[category]
thr = self.thresholds[category]
nx = np.array(x[category])
proba = clf.predict_proba(nx)
t = thr.predict(nx)
for i in range(proba.shape[0]):
if proba[i][1] > t[1]:
pred += [cids[category][i]]
return pred
def sample_predict(
self,
instance: Instance,
@@ -186,20 +116,6 @@ class DynamicConstraintsComponent(Component):
pred += [cids[category][i]]
return pred
@overrides
def fit_old(self, training_instances: List[Instance]) -> None:
collected_cids = set()
for instance in training_instances:
instance.load()
for sample in instance.training_data:
if getattr(sample, self.attr) is None:
continue
collected_cids |= getattr(sample, self.attr)
instance.free()
self.known_cids.clear()
self.known_cids.extend(sorted(collected_cids))
super().fit_old(training_instances)
@overrides
def fit(self, training_instances: List[Instance]) -> None:
collected_cids = set()

View File

@@ -8,13 +8,13 @@ from typing import Dict, List, TYPE_CHECKING, Hashable, Tuple, Any, Optional, Se
import numpy as np
from overrides import overrides
from miplearn.instance.base import Instance
from miplearn.classifiers import Classifier
from miplearn.classifiers.counting import CountingClassifier
from miplearn.classifiers.threshold import MinProbabilityThreshold, Threshold
from miplearn.components.component import Component
from miplearn.components.dynamic_common import DynamicConstraintsComponent
from miplearn.features import TrainingSample, Features, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
from miplearn.types import LearningSolveStats
logger = logging.getLogger(__name__)

View File

@@ -3,18 +3,18 @@
# Released under the modified BSD license. See COPYING.md for more details.
import logging
from typing import Any, TYPE_CHECKING, Hashable, Set, Tuple, Dict, List, Optional
from typing import Any, TYPE_CHECKING, Hashable, Set, Tuple, Dict, List
import numpy as np
from overrides import overrides
from miplearn.instance.base import Instance
from miplearn.classifiers import Classifier
from miplearn.classifiers.counting import CountingClassifier
from miplearn.classifiers.threshold import Threshold, MinProbabilityThreshold
from miplearn.components.component import Component
from miplearn.components.dynamic_common import DynamicConstraintsComponent
from miplearn.features import Features, TrainingSample, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
from miplearn.types import LearningSolveStats
logger = logging.getLogger(__name__)

View File

@@ -12,7 +12,7 @@ from sklearn.linear_model import LinearRegression
from miplearn.classifiers import Regressor
from miplearn.classifiers.sklearn import ScikitLearnRegressor
from miplearn.components.component import Component
from miplearn.features import TrainingSample, Features, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
from miplearn.types import LearningSolveStats

View File

@@ -21,7 +21,7 @@ from miplearn.classifiers.adaptive import AdaptiveClassifier
from miplearn.classifiers.threshold import MinPrecisionThreshold, Threshold
from miplearn.components import classifier_evaluation_dict
from miplearn.components.component import Component
from miplearn.features import TrainingSample, Features, Sample
from miplearn.features import Sample
from miplearn.instance.base import Instance
from miplearn.types import (
LearningSolveStats,

View File

@@ -8,12 +8,12 @@ from typing import Dict, Tuple, List, Hashable, Any, TYPE_CHECKING, Set, Optiona
import numpy as np
from overrides import overrides
from miplearn.instance.base import Instance
from miplearn.classifiers import Classifier
from miplearn.classifiers.counting import CountingClassifier
from miplearn.classifiers.threshold import MinProbabilityThreshold, Threshold
from miplearn.components.component import Component
from miplearn.features import TrainingSample, Features, Constraint, Sample
from miplearn.features import Constraint, Sample
from miplearn.instance.base import Instance
from miplearn.types import LearningSolveStats
logger = logging.getLogger(__name__)