Skip to content

voiage.methods.perspective_tensor.NetBenefitTensor

Dense draw x strategy x perspective net-benefit tensor.

strategy_index([positional or keyword] self: None = None, [positional or keyword] strategy: str = None) -> int

Resolve a strategy label to its tensor position.

Parameters:

  • self
  • strategy str

Returns: int

perspective_index([positional or keyword] self: None = None, [positional or keyword] perspective: str = None) -> int

Resolve a perspective label to its tensor position.

Parameters:

  • self
  • perspective str

Returns: int

nmb([positional or keyword] self: None = None, [positional or keyword] perspective: str = None) -> NDArray[np.float64]

Return the draw-by-strategy benefits for one lens.

Parameters:

  • self
  • perspective str

Returns: NDArray[np.float64]

expected_net_benefit([positional or keyword] self: None = None, [positional or keyword] perspective: str = None) -> NDArray[np.float64]

Average each strategy’s net benefit over draws.

Parameters:

  • self
  • perspective str

Returns: NDArray[np.float64]

optimal_strategy_index([positional or keyword] self: None = None, [positional or keyword] perspective: str = None, [keyword-only] decision_rule: DecisionRule | str = DecisionRule.EXPECTED_VALUE, [keyword-only] tie_policy: TiePolicy | str = TiePolicy.FIRST, [keyword-only] atol: float = 1e-12) -> int | NDArray[np.int64]

Select an optimal strategy under the requested decision and tie rules.

Parameters:

  • self
  • perspective str
  • decision_rule DecisionRule | str (default: DecisionRule.EXPECTED_VALUE)
  • tie_policy TiePolicy | str (default: TiePolicy.FIRST)
  • atol float (default: 1e-12)

Returns: int | NDArray[np.int64]

discordance_probability([positional or keyword] self: None = None, [positional or keyword] perspective_a: str = None, [positional or keyword] perspective_b: str = None, [keyword-only] tie_policy: TiePolicy | str = TiePolicy.SPLIT, [keyword-only] atol: float = 1e-12) -> float

Estimate the probability of different optimal choices on paired draws.

Parameters:

  • self
  • perspective_a str
  • perspective_b str
  • tie_policy TiePolicy | str (default: TiePolicy.SPLIT)
  • atol float (default: 1e-12)

Returns: float

evop([positional or keyword] self: None = None, [keyword-only] choose_under: str = None, [keyword-only] evaluate_under: str = None, [keyword-only] decision_rule: DecisionRule | str = DecisionRule.EXPECTED_VALUE, [keyword-only] population: float | None = None, [keyword-only] keep_distribution: bool = False, [keyword-only] selection_tie_policy: TiePolicy | str = TiePolicy.FIRST, [keyword-only] atol: float = 1e-12) -> PerspectiveRegret

Evaluate directional regret with optional population scaling.

Parameters:

  • self
  • choose_under str
  • evaluate_under str
  • decision_rule DecisionRule | str (default: DecisionRule.EXPECTED_VALUE)
  • population float | None (default: None)
  • keep_distribution bool (default: False)
  • selection_tie_policy TiePolicy | str (default: TiePolicy.FIRST)
  • atol float (default: 1e-12)

Returns: PerspectiveRegret

regret_matrix([positional or keyword] self: None = None, [keyword-only] decision_rule: DecisionRule | str = DecisionRule.EXPECTED_VALUE, [keyword-only] population: float | None = None) -> list[dict[str, Any]]

Return directional regret records for ordered perspective pairs.

Parameters:

  • self
  • decision_rule DecisionRule | str (default: DecisionRule.EXPECTED_VALUE)
  • population float | None (default: None)

Returns: list[dict[str, Any]]

perspective_acceptability_frontier([positional or keyword] self: None = None, [keyword-only] tie_policy: TiePolicy | str = TiePolicy.SPLIT, [keyword-only] atol: float = 1e-12) -> list[PerspectiveAcceptabilityRow]

Compute draw-level optimality probabilities and expected-value ranks.

Parameters:

  • self
  • tie_policy TiePolicy | str (default: TiePolicy.SPLIT)
  • atol float (default: 1e-12)

Returns: list[PerspectiveAcceptabilityRow]

with_weighted_perspective([positional or keyword] self: None = None, [positional or keyword] name: str = None, [positional or keyword] weights: Mapping[str, float] = None, [keyword-only] normalize: bool = True, [keyword-only] allow_negative: bool = False) -> NetBenefitTensor

Append a weighted combination of existing perspectives.

Parameters:

  • self
  • name str
  • weights Mapping[str, float]
  • normalize bool (default: True)
  • allow_negative bool (default: False)

Returns: NetBenefitTensor

mcda_feature_records([positional or keyword] self: None = None, [keyword-only] reference_perspective: str = None, [keyword-only] target_perspectives: Iterable[str] | None = None, [keyword-only] population: float | None = None) -> list[dict[str, Any]]

Collect benefits, ranks, discordance and regret by lens and strategy.

Parameters:

  • self
  • reference_perspective str
  • target_perspectives Iterable[str] | None (default: None)
  • population float | None (default: None)

Returns: list[dict[str, Any]]

perspective_mixture_frontier([positional or keyword] self: None = None, [keyword-only] left_perspective: str = None, [keyword-only] right_perspective: str = None, [keyword-only] grid_size: int = 101, [keyword-only] tie_policy: TiePolicy | str = TiePolicy.SPLIT, [keyword-only] atol: float = 1e-12) -> list[PerspectiveMixtureFrontierRow]

Evaluate strategy performance on a regular two-perspective weight grid.

Parameters:

  • self
  • left_perspective str
  • right_perspective str
  • grid_size int (default: 101)
  • tie_policy TiePolicy | str (default: TiePolicy.SPLIT)
  • atol float (default: 1e-12)

Returns: list[PerspectiveMixtureFrontierRow]

exact_perspective_frontier([positional or keyword] self: None = None, [keyword-only] left_perspective: str = None, [keyword-only] right_perspective: str = None, [keyword-only] atol: float = 1e-12) -> list[PerspectiveFrontierSegment]

Return exact expected-value upper-envelope intervals over mixture weight.

Parameters:

  • self
  • left_perspective str
  • right_perspective str
  • atol float (default: 1e-12)

Returns: list[PerspectiveFrontierSegment]

exact_switch_points([positional or keyword] self: None = None, [keyword-only] left_perspective: str = None, [keyword-only] right_perspective: str = None, [keyword-only] atol: float = 1e-12) -> list[PerspectiveSwitchPoint]

Extract changes between adjacent exact frontier segments.

Parameters:

  • self
  • left_perspective str
  • right_perspective str
  • atol float (default: 1e-12)

Returns: list[PerspectiveSwitchPoint]