codexpermanent-independent-choice-probability.py
permanent-independent-choice-probability.py
"""Original independent-choice probability inventory; PNG basename to CWD."""
from fractions import Fraction
from itertools import product
from pathlib import Path
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
import numpy as np
def main():
rows = [(Fraction(3, 4), Fraction(1, 4)),
(Fraction(1, 5), Fraction(4, 5))]
outcomes = list(product(range(2), repeat=2))
probabilities = [rows[0][i]*rows[1][j] for i, j in outcomes]
distinct = [i != j for i, j in outcomes]
assert sum(probabilities) == 1
assert sum(p for p, valid in zip(probabilities, distinct) if valid) == Fraction(13, 20)
fig, ax = plt.subplots(figsize=(7.6, 4.5), dpi=120)
fig.patch.set_facecolor("white")
values = [float(p) for p in probabilities]
colors = ["#28865b" if valid else "#999999" for valid in distinct]
xs = np.arange(4)
ax.bar(xs, values, color=colors, width=.63)
for i, probability in enumerate(probabilities):
ax.text(i, float(probability)+.018,
f"{probability} = {float(probability):.2f}",
ha="center", fontsize=11)
ax.set_xticks(xs, [str(tuple(x+1 for x in outcome)) for outcome in outcomes])
ax.set_ylim(0, .73)
ax.set_xlabel("Ordered choices (first person, second person)", fontsize=11)
ax.set_ylabel("Probability", fontsize=11)
ax.grid(axis="y", alpha=.17)
ax.set_axisbelow(True)
ax.spines[["top", "right"]].set_visible(False)
ax.legend(handles=[Patch(color="#28865b", label="Distinct: total 0.65"),
Patch(color="#999999", label="Same label: total 0.35")],
fontsize=11, frameon=False, loc="upper right")
fig.suptitle("The permanent adds the distinct-choice probabilities",
fontsize=14, y=.98)
ax.set_title("Independent choices: first (3/4, 1/4), second (1/5, 4/5)",
fontsize=11.5, pad=12)
fig.subplots_adjust(left=.1, right=.98, top=.78, bottom=.19)
fig.savefig(Path.cwd()/Path(__file__).with_suffix(".png").name,
facecolor="white", transparent=False)
plt.close(fig)
if __name__ == "__main__":
main()