Source:
Local role:
Concrete PayoffFunction where each player’s utility depends only on their own strategy’s terminal perception — no cross-actor projection.
Big-picture role: Embodies the non-interference assumption: each actor’s outcomes are determined solely by their own choices, regardless of what opponents do. This holds when actors compete over shared resources or space without one actor directly distorting another’s perception — they coexist and compete, but do not manipulate each other’s informational world.
Inheritance:
PayoffFunction
Constructor:
IndependentPayoffFunction()— stateless, no arguments
Methods:
evaluate(profile, players, context) -> dict[str, UtilityFrame]- for each actor in
profile, builds aStrategyRankerfrom the player’sutility_functionand callsevaluate_strategy - raises
ValueErrorif the profile references an actor not present inplayers
- for each actor in
Important behavior:
- player evaluation is completely independent; opponent strategies do not influence a player’s terminal perception
- each call creates a new
StrategyRankerper player (lightweight: holds only a reference)
Example:
from ometeotl_core.game.normal_form import NormalFormGame, IndependentPayoffFunction
# Non-interference assumption: each player's outcome depends only on their own strategy
payoff_fn = IndependentPayoffFunction()
game = NormalFormGame.from_game_state(game_state, payoff_fn)
# The matrix now contains one PayoffVector per strategy profile combination
print(len(game.payoff_vectors))
See also:
