Source code for negmas.preferences.crisp.random_ufun

from __future__ import annotations
from random import random
from typing import TYPE_CHECKING

from ..crisp_ufun import UtilityFunction
from ..mixins import StationaryMixin

if TYPE_CHECKING:
    from negmas.outcomes import Outcome

__all__ = ["RandomUtilityFunction"]


[docs] class RandomUtilityFunction(StationaryMixin, UtilityFunction): """A random utility function for a discrete outcome space""" def __init__(self, rng: tuple[float, float] = (0.0, 1.0), *args, **kwargs): super().__init__(*args, **kwargs) self._cache: dict[Outcome | None, float] = dict() self._scale = rng[1] - rng[0] self._offset = rng[0]
[docs] def eval(self, offer: Outcome | None) -> float: v = self._cache.get(offer, None) if v is None: v = self._offset + self._scale * random() self._cache[offer] = v return v