bnelearn.experiment.equilibria module

This module contains implementations of known Bayes-Nash equilibrium bid functions in several specific settings. Whenever possible, the bid functions are fully vectorized.

NOTE: This module contains a mix of direct implementations of bid functions, and factory methods that create and return the bid function as a callable object.

bnelearn.experiment.equilibria.bne1_kaplan_zhamir(u_lo: List, u_hi: List)[source]

BNE in asymmetric 2-player IPV first-price auctions, when both players have quasilinear-utilities and uniform priors, that do NOT share the same lower bound and are non overlapping.

This setting was analyzed by Kaplan and Zhamir (2014) and was found to have multiple pure BNE. (At least 3).

Reference: Equilibrium 1 of https://link.springer.com/article/10.1007/s40505-014-0049-1

NOTE: this implementation is hard-coded for the bounds used in the paper above, i.e. [0,5] and [6,7], but we do not perform any checks at runtime for performance reasons!

bnelearn.experiment.equilibria.bne2_kaplan_zhamir(valuation: Tensor, player_position: int, u_lo: List, u_hi: List)[source]

BNE in asymmetric 2-player IPV first-price auctions, when both players have quasilinear-utilities and uniform priors, that do NOT share the same lower bound and are nonoverlapping.

This setting was analyzed by Kaplan and Zhamir (2014) and was found to have multiple pure BNE. (At least 3).

Reference: Equilibrium 2 of https://link.springer.com/article/10.1007/s40505-014-0049-1

NOTE: this implementation is hard-coded for the bounds used in the paper above, i.e. [0,5] and [6,7], but we do not perform any checks at runtime for performance reasons!

bnelearn.experiment.equilibria.bne3_kaplan_zhamir(valuation: Tensor, player_position: int, u_lo: List, u_hi: List)[source]

BNE in asymmetric 2-player IPV first-price auctions, when both players have quasilinear-utilities and uniform priors, that do NOT share the same lower bound and are nonoverlapping.

This setting was analyzed by Kaplan and Zhamir (2014) and was found to have multiple pure BNE. (At least 3).

Reference: Equilibrium 3 of https://link.springer.com/article/10.1007/s40505-014-0049-1

NOTE: this implementation is hard-coded for the bounds used in the paper above, i.e. [0,5] and [6,7], but we do not perform any checks at runtime for performance reasons!

bnelearn.experiment.equilibria.bne_2p_affiliated_values(valuation: Tensor, player_position: int = 0) Tensor[source]

Symmetric BNE in the 2p affiliated values model.

Reference: Krishna (2009), Example 6.2

bnelearn.experiment.equilibria.bne_3p_mineral_rights(valuation: Tensor, player_position: int = 0) Tensor[source]

BNE in the 3-player ‘Mineral Rights’ setting.

Reference: Krishna (2009), Example 6.1

bnelearn.experiment.equilibria.bne_crowdsourcing_symmetric_uniform_cost(valuation: Tensor, v1: float = 0.5, **kwargs)[source]
bnelearn.experiment.equilibria.bne_crowdsourcing_symmetric_uniform_value(valuation: Tensor, v1: float = 1, v2=0, N: int = 0, player_position=0, **kwargs)[source]
bnelearn.experiment.equilibria.bne_fpsb_ipv_asymmetric_uniform_overlapping_priors_risk_neutral(valuation: Tensor, player_position: int, u_lo: List, u_hi: List) Tensor[source]

BNE in asymmetric 2-player IPV first-price auctions, when both players have quasilinear-utilities and uniform valuation priors that share the same lower lower bound, but may differ in the upper bound.

Reference: https://link.springer.com/article/10.1007/BF01271133

bnelearn.experiment.equilibria.bne_fpsb_ipv_symmetric_generic_prior_risk_neutral(valuation: Union[Tensor, ndarray, float], n_players: int, prior_cdf: Callable, **kwargs) Tensor[source]
BNE in symmetric IPV first-price sealed bid auctions with

generic prior value distributions and quasi-linear utilities.

Reference: Krishna (2009), Chapter 2, Proof of Proposition 2.2.

bnelearn.experiment.equilibria.bne_fpsb_ipv_symmetric_uniform_prior(valuation: Tensor, n: int, r: float, u_lo, u_hi, **kwargs) Tensor[source]

BNE in the special case of symmetric FPSB IPV auctions where priors are symmetric uniform.

Compared to the generic case above, we also know this BNE for risk-averse agents.

Reference:

In terms of implementation, note that this equlibrium is fully vectorized.

bnelearn.experiment.equilibria.bne_splitaward_2x2_1_factory(experiment_config, payoff_dominant: bool = True)[source]

Factory method returning the BNE pooling equilibrium in the split-award auction with 2 players and 2 lots (as in Anton and Yao, 1992).

Actually, this is a continuum of BNEs of which this function returns the upper bound (payoff dominant BNE) and the one at the lower bound.

Returns:

optimal_bid (callable): The equilibrium bid function.

bnelearn.experiment.equilibria.bne_splitaward_2x2_2_factory(experiment_config)[source]

Factory method returning the BNE WTA equilibrium in the split-award auction with 2 players and 2 lots (as in Anton and Yao Proposition 4, 1992).

Returns:

optimal_bid (callable): The equilibrium bid function.

bnelearn.experiment.equilibria.bne_symmetric_all_pay_uniform_prior(valuation: Tensor, n_player: int, **kwargs) Tensor[source]
bnelearn.experiment.equilibria.multiunit_bne_factory(setting, payment_rule) Callable[source]

Factory method that returns the known BNE strategy function for the standard multi-unit auctions (split-award is NOT one of the) as callable if available and None otherwise.

bnelearn.experiment.equilibria.truthful_bid(valuation: Tensor, **kwargs) Tensor[source]

Truthful bidding function: A BNE in any VCG auction.