TNO Intern

Commit 8e98cd27 authored by Hen Brett's avatar Hen Brett 🐔
Browse files

creating a play based risk assessment test

parent d06fe5c8
Loading
Loading
Loading
Loading
Loading
+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()