Loading tests/test_play_based_risk.py 0 → 100644 +117 −0 Original line number Diff line number Diff line import numpy as np from matplotlib import pyplot as plt def smooth_logit(x, midpoint=7.5, k=1.5): return 1 / (1 + np.exp(-k * (x - midpoint))) def test_play_based_risk_single_location(): # sigmoid functions temp_midpoint, temp_k = 80, 0.1 perm_midpoint, perm_k = 250, 0.01 thick_midpoint, thick_k = 50, 0.01 ntg_midpoint, ntg_k = 0.5, 10 temp_range = (0, 200) perm_range = (0, 500) thick_range = (0, 500) ntg_range = (0, 1) n_samples = 1000 temperature = np.random.normal(100, 5, n_samples) permeability = np.random.normal(300, 50, n_samples) thickness = np.random.normal(200, 20, n_samples) ntg = np.random.normal(0.8, 0.1, n_samples) # chance of success factors temperature_cos = smooth_logit(temperature, midpoint=temp_midpoint, k=temp_k) permeability_cos = smooth_logit(permeability, midpoint=perm_midpoint, k=perm_k) thickness_cos = smooth_logit(thickness, midpoint=thick_midpoint, k=thick_k) ntg_cos = smooth_logit(ntg, midpoint=ntg_midpoint, k=ntg_k) # combined chance of success combined_cos = temperature_cos * permeability_cos * thickness_cos * ntg_cos # plot Alles fig, axd = plt.subplot_mosaic( [ ["temp", "temp_sig", "temp_cos", "combined"], ["perm", "perm_sig", "perm_cos", "combined"], ["thick", "thick_sig", "thick_cos", "combined"], ["ntg", "ntg_sig", "ntg_cos", "combined"], ], figsize=(30, 10), constrained_layout=True, ) # temperature axd["temp"].set_title("Temperature samples [C]") axd["temp"].hist(temperature, bins=20) axd["temp_sig"].set_title("Temperature Sigmoid") axd["temp_sig"].plot( np.linspace(temp_range[0], temp_range[1]), smooth_logit( np.linspace(temp_range[0], temp_range[1]), midpoint=temp_midpoint, k=temp_k ), ) axd["temp_cos"].set_title("Temperature COS") axd["temp_cos"].hist(temperature_cos, bins=20) # thickness axd["thick"].set_title("thick samples [m]") axd["thick"].hist(thickness, bins=20) axd["thick_sig"].set_title("Thickness Sigmoid") axd["thick_sig"].plot( np.linspace(thick_range[0], thick_range[1]), smooth_logit( np.linspace(thick_range[0], thick_range[1]), midpoint=thick_midpoint, k=thick_k, ), ) axd["thick_cos"].set_title("Thickness COS") axd["thick_cos"].hist(thickness_cos, bins=20) # permeability axd["perm"].set_title("permeability samples [mD]") axd["perm"].hist(permeability, bins=20) axd["perm_sig"].set_title("Permeability Sigmoid") axd["perm_sig"].plot( np.linspace(perm_range[0], perm_range[1]), smooth_logit( np.linspace(perm_range[0], perm_range[1]), midpoint=perm_midpoint, k=perm_k ), ) axd["perm_cos"].set_title("Permeability COS") axd["perm_cos"].hist(permeability_cos, bins=20) # ntg axd["ntg"].set_title("ntg samples [0-1]") axd["ntg"].hist(ntg, bins=20) axd["ntg_sig"].set_title("ntg Sigmoid") axd["ntg_sig"].plot( np.linspace(ntg_range[0], ntg_range[1]), smooth_logit( np.linspace(ntg_range[0], ntg_range[1]), midpoint=ntg_midpoint, k=ntg_k ), ) axd["ntg_cos"].set_title("ntg COS") axd["ntg_cos"].hist(ntg_cos, bins=20) # combined cos axd["combined"].set_title("Combined COS") axd["combined"].hist(combined_cos, bins=20) plt.show() Loading
tests/test_play_based_risk.py 0 → 100644 +117 −0 Original line number Diff line number Diff line import numpy as np from matplotlib import pyplot as plt def smooth_logit(x, midpoint=7.5, k=1.5): return 1 / (1 + np.exp(-k * (x - midpoint))) def test_play_based_risk_single_location(): # sigmoid functions temp_midpoint, temp_k = 80, 0.1 perm_midpoint, perm_k = 250, 0.01 thick_midpoint, thick_k = 50, 0.01 ntg_midpoint, ntg_k = 0.5, 10 temp_range = (0, 200) perm_range = (0, 500) thick_range = (0, 500) ntg_range = (0, 1) n_samples = 1000 temperature = np.random.normal(100, 5, n_samples) permeability = np.random.normal(300, 50, n_samples) thickness = np.random.normal(200, 20, n_samples) ntg = np.random.normal(0.8, 0.1, n_samples) # chance of success factors temperature_cos = smooth_logit(temperature, midpoint=temp_midpoint, k=temp_k) permeability_cos = smooth_logit(permeability, midpoint=perm_midpoint, k=perm_k) thickness_cos = smooth_logit(thickness, midpoint=thick_midpoint, k=thick_k) ntg_cos = smooth_logit(ntg, midpoint=ntg_midpoint, k=ntg_k) # combined chance of success combined_cos = temperature_cos * permeability_cos * thickness_cos * ntg_cos # plot Alles fig, axd = plt.subplot_mosaic( [ ["temp", "temp_sig", "temp_cos", "combined"], ["perm", "perm_sig", "perm_cos", "combined"], ["thick", "thick_sig", "thick_cos", "combined"], ["ntg", "ntg_sig", "ntg_cos", "combined"], ], figsize=(30, 10), constrained_layout=True, ) # temperature axd["temp"].set_title("Temperature samples [C]") axd["temp"].hist(temperature, bins=20) axd["temp_sig"].set_title("Temperature Sigmoid") axd["temp_sig"].plot( np.linspace(temp_range[0], temp_range[1]), smooth_logit( np.linspace(temp_range[0], temp_range[1]), midpoint=temp_midpoint, k=temp_k ), ) axd["temp_cos"].set_title("Temperature COS") axd["temp_cos"].hist(temperature_cos, bins=20) # thickness axd["thick"].set_title("thick samples [m]") axd["thick"].hist(thickness, bins=20) axd["thick_sig"].set_title("Thickness Sigmoid") axd["thick_sig"].plot( np.linspace(thick_range[0], thick_range[1]), smooth_logit( np.linspace(thick_range[0], thick_range[1]), midpoint=thick_midpoint, k=thick_k, ), ) axd["thick_cos"].set_title("Thickness COS") axd["thick_cos"].hist(thickness_cos, bins=20) # permeability axd["perm"].set_title("permeability samples [mD]") axd["perm"].hist(permeability, bins=20) axd["perm_sig"].set_title("Permeability Sigmoid") axd["perm_sig"].plot( np.linspace(perm_range[0], perm_range[1]), smooth_logit( np.linspace(perm_range[0], perm_range[1]), midpoint=perm_midpoint, k=perm_k ), ) axd["perm_cos"].set_title("Permeability COS") axd["perm_cos"].hist(permeability_cos, bins=20) # ntg axd["ntg"].set_title("ntg samples [0-1]") axd["ntg"].hist(ntg, bins=20) axd["ntg_sig"].set_title("ntg Sigmoid") axd["ntg_sig"].plot( np.linspace(ntg_range[0], ntg_range[1]), smooth_logit( np.linspace(ntg_range[0], ntg_range[1]), midpoint=ntg_midpoint, k=ntg_k ), ) axd["ntg_cos"].set_title("ntg COS") axd["ntg_cos"].hist(ntg_cos, bins=20) # combined cos axd["combined"].set_title("Combined COS") axd["combined"].hist(combined_cos, bins=20) plt.show()