From 256d3d094f42ae0040f0ad62c2aadae1250f74f8 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 11 Aug 2021 06:17:39 -0500 Subject: [PATCH] AlvLouWeh2017: Remove sample argument --- miplearn/features/extractor.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/miplearn/features/extractor.py b/miplearn/features/extractor.py index 155c153..872767d 100644 --- a/miplearn/features/extractor.py +++ b/miplearn/features/extractor.py @@ -3,7 +3,7 @@ # Released under the modified BSD license. See COPYING.md for more details. from math import log, isfinite -from typing import TYPE_CHECKING, List, Tuple +from typing import TYPE_CHECKING, List, Tuple, Optional import numpy as np @@ -74,7 +74,9 @@ class FeaturesExtractor: np.hstack( [ vars_features_user, - self._extract_var_features_AlvLouWeh2017(sample), + self._extract_var_features_AlvLouWeh2017( + obj_coeffs=variables.obj_coeffs, + ), variables.lower_bounds.reshape(-1, 1), variables.obj_coeffs.reshape(-1, 1), variables.upper_bounds.reshape(-1, 1), @@ -111,7 +113,12 @@ class FeaturesExtractor: lp_var_features_list = [] for f in [ sample.get_array("static_var_features"), - self._extract_var_features_AlvLouWeh2017(sample), + self._extract_var_features_AlvLouWeh2017( + obj_coeffs=sample.get_array("static_var_obj_coeffs"), + obj_sa_up=variables.sa_obj_up, + obj_sa_down=variables.sa_obj_down, + values=variables.values, + ), ]: if f is not None: lp_var_features_list.append(f) @@ -310,12 +317,14 @@ class FeaturesExtractor: # Alvarez, A. M., Louveaux, Q., & Wehenkel, L. (2017). A machine learning-based # approximation of strong branching. INFORMS Journal on Computing, 29(1), 185-195. - def _extract_var_features_AlvLouWeh2017(self, sample: Sample) -> np.ndarray: - obj_coeffs = sample.get_array("static_var_obj_coeffs") - obj_sa_down = sample.get_array("lp_var_sa_obj_down") - obj_sa_up = sample.get_array("lp_var_sa_obj_up") - values = sample.get_array("lp_var_values") - + # noinspection PyPep8Naming + def _extract_var_features_AlvLouWeh2017( + self, + obj_coeffs: Optional[np.ndarray] = None, + obj_sa_down: Optional[np.ndarray] = None, + obj_sa_up: Optional[np.ndarray] = None, + values: Optional[np.ndarray] = None, + ) -> np.ndarray: assert obj_coeffs is not None obj_coeffs = obj_coeffs.astype(float) _fix_infinity(obj_coeffs)