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
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)
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)