Source code for desdeo.core.ResultFactory

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# Copyright (c) 2016  Vesa Ojalehto

from abc import ABC
from typing import List, Tuple

import numpy as np


[docs]class ResultFactory(ABC): """ Abstract base class for result factories """
[docs]class BoundsFactory(ResultFactory):
[docs] def __init__(self, optimization_method): self.optimization_method = optimization_method
[docs] def result(self, prev_point, upper=False): Phr = [] for fi, fr in enumerate(prev_point): self.optimization_method.optimization_problem.obj_bounds = list(prev_point) self.optimization_method.optimization_problem.obj_bounds[fi] = None _, bound = self.optimization_method.search(upper) if bound is None: Phr.append(prev_point[fi]) else: Phr.append(bound[fi]) return Phr
[docs]class IterationPointFactory(ResultFactory):
[docs] def __init__(self, optimization_method): self.optimization_method = optimization_method
[docs] def result(self, preferences, prev_point) -> Tuple[np.ndarray, List[float]]: self.optimization_method.optimization_problem.set_preferences( preferences, prev_point ) # self.optimization_method.optimization_problem.weights = preferences.weights() # self.optimization_method.optimization_problem.reference = preferences.reference_point() self.last_solution = self.optimization_method.search() return self.last_solution