Beispiel #1
0
    def slice_equally(self, cutter: Agent, amount: int) -> List['CakeSlice']:
        """
        Slices this slice into several parts equal in value according to the cutter.

        :param cutter: cutter of the slices, determines the value for each slice
        :param amount: amount of parts to slice into
        :return: list containing `amount` slices, each equal in value according to
            `cutter`.

        >>> s = CakeSlice(0, 1)
        >>> a = PiecewiseConstantAgent([1, 3, 11], "agent")
        >>> s.slice_equally(a, 2)
        [(0,0.5), (0.5,1)]
        >>> s = CakeSlice(0, 1)
        >>> a = PiecewiseConstantAgent([1, 3, 11], "agent")
        >>> s.slice_equally(a, 4)
        [(0,0.25), (0.25,0.5), (0.5,0.75), (0.75,1)]
        """

        slices = []
        slice_value = cutter.eval(self.start, self.end) / amount
        last_start = self._start

        for i in range(amount - 1):
            end = cutter.mark(last_start, slice_value)
            slices.append(self._create_slice_part(last_start, end))
            last_start = end

        slices.append(self._create_slice_part(last_start, self.end))

        return slices
Beispiel #2
0
    def value_according_to(self, agent: Agent) -> float:
        """
        Gets the value assigned to this cake, according the an agent. This value
        represents how much an agent is interested in this slice.

        >>> a = PiecewiseConstantAgent([33, 3, 0.1], "agent")
        >>> s = CakeSlice(0, a.cake_length())
        >>> s.value_according_to(a) == a.cake_value()
        True
        >>> a = PiecewiseConstantAgent([33, 33, 11], "agent")
        >>> s = CakeSlice(0, a.cake_length())
        >>> s.value_according_to(a) == a.cake_value()
        True
        """
        return agent.eval(self.start, self.end)
Beispiel #3
0
    def slice_to_value(self, cutter: Agent, value: float) -> List['CakeSlice']:
        """
        Slice this such that each part will equal a given value.
        :param cutter: cutter of the cake, based on whom the cake parts are
            evaluated.
        :param value: value for one part to equal
        :return: a list containing the new slices

        >>> a = PiecewiseConstantAgent([11, 33, 11], "agent")
        >>> s = CakeSlice(0, a.cake_length())
        >>> len(s.slice_to_value(a, a.cake_value() / 10))
        10
        >>> a = PiecewiseConstantAgent([55, 3, 11], "agent")
        >>> s = CakeSlice(0, a.cake_length())
        >>> len(s.slice_to_value(a, a.cake_value() / 2))
        2
        >>> a = PiecewiseConstantAgent([1, 3, 11], "agent")
        >>> s = CakeSlice(0, 1)
        >>> s.slice_to_value(a, a.eval(0, 1) / 2)
        [(0,0.5), (0.5,1)]
        """
        amount = int(cutter.eval(self.start, self.end) / value)
        return self.slice_equally(cutter, amount)