Source code for pyqlearning.annealingmodel.distancecomputable.cost_as_distance

# -*- coding: utf-8 -*-
from pyqlearning.annealingmodel.distance_computable import DistanceComputable
from pyqlearning.annealingmodel.cost_functionable import CostFunctionable
import numpy as np


[docs]class CostAsDistance(DistanceComputable): ''' Compute cost as distance. ''' # Memo of parameters. __memo_dict = {} def __init__(self, params_arr, cost_functionable): ''' Init. Args: params_arr: The parameters. cost_functionable: is-a `CostFunctionable`. ''' self.__params_arr = params_arr if isinstance(cost_functionable, CostFunctionable): self.__cost_functionable = cost_functionable else: raise TypeError
[docs] def compute(self, x, y): ''' Compute distance. Args: x: Data point. y: Data point. Returns: Distance. ''' if x in self.__memo_dict: x_v = self.__memo_dict[x] else: x_v = self.__cost_functionable.compute(self.__params_arr[x, :]) self.__memo_dict.setdefault(x, x_v) if y in self.__memo_dict: y_v = self.__memo_dict[y] else: y_v = self.__cost_functionable.compute(self.__params_arr[y, :]) self.__memo_dict.setdefault(y, y_v) return abs(x_v - y_v)