Esempio n. 1
0
def risk_for_me_all(graph: DiGraph,
                    node_id,
                    iterations=70,
                    mu=0.2,
                    beta=0.6,
                    delay=2,
                    weight_transfer=False):
    risks = []
    for node_i in graph:
        node = graph.nodes[node_i]
        if node['id'] != node_id:
            set_initial_defaults(graph, node['id'])
            sn = SecNet(graph,
                        mu,
                        beta,
                        reconnection_policy=ReconnectionPolicy.RANDOM,
                        default_delay=delay,
                        weight_transfer=weight_transfer)
            sn.run(iterations)
            #sn.run(5)
            #for i in range(iterations):
            #   if(sn.defaulted_density[-1]>0):
            #      sn.run(1)
            # else:
            #    break
            risks.append(
                [node['id'], sn.graph.nodes[node_id]['first_defaulted_at']])
    for lis in risks:
        if (lis[1] == -1):
            lis[1] = 0
        else:
            lis[1] = 1. - lis[1] / 100.
    return risks
Esempio n. 2
0
def risk_for_me_one_strict(graph: DiGraph,
                           node_id_me,
                           node_id_other,
                           repetitions=20,
                           iterations=100,
                           mu=0.2,
                           beta=0.6,
                           delay=2,
                           weight_transfer=False):

    risks = []
    for i in range(repetitions):
        set_initial_defaults(graph, node_id_other)
        sn = SecNet(graph,
                    mu,
                    beta,
                    reconnection_policy=ReconnectionPolicy.RANDOM,
                    default_delay=delay,
                    weight_transfer=weight_transfer)
        sn.run(iterations)
        risk = sn.graph.nodes[node_id_me]['first_defaulted_at']
        if risk == -1:
            risk = 0
        else:
            risk = 1
        risks.append(risk)
    return np.mean(risks)
Esempio n. 3
0
def run_simulation(graph, mu, beta, policy, delay, weight_transfer,
                   max_iterations, show):
    g = graph.copy()

    if policy == 'RANDOM':
        sn = SecNet(g,
                    mu,
                    beta,
                    reconnection_policy=ReconnectionPolicy.RANDOM,
                    default_delay=delay,
                    weight_transfer=weight_transfer)
    elif policy == 'SOFT':
        sn = SecNet(g,
                    mu,
                    beta,
                    reconnection_policy=ReconnectionPolicy.SOFT,
                    default_delay=delay,
                    weight_transfer=weight_transfer)
    elif policy == 'NONE':
        sn = SecNet(graph,
                    mu,
                    beta,
                    reconnection_policy=ReconnectionPolicy.NONE,
                    default_delay=delay,
                    weight_transfer=weight_transfer)
    else:
        print('Policy not understood')
        return 0

    sn.run(max_iterations, variation_coeff=10e-5)
    if show:
        sn.plot()

    return check_cascade_size_recursive(sn.graph)
Esempio n. 4
0
def replicate_density(niter=100,
                      beta=0.6,
                      default_delay=2,
                      policy=ReconnectionPolicy.SOFT,
                      file_plot='images/Replicate_density/beta_0.4'):
    dens = []
    densities = []
    fig = figure()
    plot = fig.add_subplot(111)
    for i in range(niter):
        sn = SecNet(g,
                    mu=0.2,
                    beta=beta,
                    reconnection_policy=policy,
                    default_delay=default_delay,
                    weight_transfer=False)
        sn.run(400, variation_coeff=10e-5)
        plot.plot(sn.defaulted_density)
        dens.append(sn.defaulted_density[-1])
        sn.defaulted_density
        fig.suptitle(' Simulations function with n = %s' % niter)
        plt.xlabel('Iteratuinons')
        plt.ylabel('Density ')
    file = file_plot + str(policy) + str(beta) + str(default_delay) + '.png'
    fig.savefig(file)
    show()

    return (dens)
Esempio n. 5
0
def beta_plot(g: DiGraph,
              mu=0.1,
              iterations=75,
              file_plot='images/prob_by_sector',
              policy='SOFT',
              default_delay=4):
    betas = np.arange(0, 1, 0.02)

    density_probs = []

    for beta in betas:
        if policy == 'NONE':
            sn = SecNet(g, mu, beta,
                        reconnection_policy=ReconnectionPolicy.NONE,
                        default_delay=default_delay, weight_transfer=False)
        elif policy == 'RANDOM':
            sn = SecNet(g, mu, beta,
                        reconnection_policy=ReconnectionPolicy.RANDOM,
                        default_delay=default_delay, weight_transfer=False)
        elif policy == 'SOFT':
            sn = SecNet(g, mu, beta,
                        reconnection_policy=ReconnectionPolicy.SOFT,
                        default_delay=default_delay, weight_transfer=False)
        elif policy == 'STRONG':
            sn = SecNet(g, mu, beta,
                        reconnection_policy=ReconnectionPolicy.STRONG,
                        default_delay=default_delay, weight_transfer=False)
        else:
            return ('policy not found.')

        sn.run(iterations)
        # sn.graph to access the copied graph
        prob_by_sector = np.zeros(17)

        for sector in range(0, 17):
            nodes = sn.nodes_per_sector[sector]
            n = len(nodes)
            for node_id in nodes:
                node = sn.graph.nodes[node_id]
                prob_by_sector[sector] += node['defaulted']
            prob_by_sector[sector] = prob_by_sector[sector] / n

        density_probs.append(prob_by_sector)

    print(density_probs)

    probs_by_sector = construct_probs_by_sector(density_probs)
    print(probs_by_sector)
    plt.figure()
    for prob in probs_by_sector:
        plt.plot(betas, prob)
        plt.legend(loc='upper left')
    plt.title('Random sample with %s reconnection policy' % policy)
    plt.legend(loc='upper left')
    plt.xlabel('betas')
    plt.ylabel('density prob')
    file = file_plot + policy + str(default_delay) + '.png'
    plt.savefig(file)
    plt.show()
def run_density(graph: DiGraph, mu, beta, policy, delay, max_iterations):
    g = graph.copy()

    sn = SecNet(g, mu, beta, reconnection_policy=policy, default_delay=delay)

    sn.run(max_iterations)

    return sn.defaulted_density
Esempio n. 7
0
def sectorial_multi_beta(g: DiGraph, mu=0.1, beta_lapse=0.02, repetitions=5,
                         max_iterations=150, filename='results/density/prob_by_sector',
                         policy='SOFT', default_delay=4, num_sectors=17):
    betas = np.arange(0, 1, beta_lapse)
    if policy == 'NONE':
        recon_policy = ReconnectionPolicy.NONE

    elif policy == 'RANDOM':
        recon_policy = ReconnectionPolicy.RANDOM

    elif policy == 'SOFT':
        recon_policy = ReconnectionPolicy.SOFT

    elif policy == 'STRONG':
        recon_policy = ReconnectionPolicy.STRONG

    else:
        print('policy not found.')
        return 0

    density_probs = []

    for beta in betas:

        prob_by_sector_total = np.zeros(num_sectors)
        prob_by_sector = np.zeros((num_sectors, repetitions))

        for i in range(repetitions):
            sn = SecNet(g, mu, beta,
                        reconnection_policy=recon_policy,
                        default_delay=default_delay, weight_transfer=False)

            sn.run(max_iter=max_iterations, variation_coeff=10e-5)

            for sector in range(num_sectors):
                nodes = sn.nodes_per_sector[sector]
                n = len(nodes)
                for node_id in nodes:
                    node = sn.graph.nodes[node_id]
                    prob_by_sector[sector, i] += node['defaulted']

                prob_by_sector[sector, i] = prob_by_sector[sector, i] / n

        for j in range(num_sectors):
            prob_by_sector_total[j] = np.mean(prob_by_sector[j, :])

        density_probs.append(prob_by_sector_total)

        # print(density_probs)
    probs_by_sector = construct_probs_by_sector(density_probs)
    # print(probs_by_sector)
    filename = filename + policy + str(default_delay) + '.pickle'

    pickle.dump(probs_by_sector, open(filename, 'wb'))

    return probs_by_sector
def density_with_sigma(graph,mu=0.2,beta=0.6,policy=ReconnectionPolicy.SOFT,delay = 6,
                       repetitions=10,filename = 'BA/results/densitySOFT6.pikle'):
    
    densities = pd.DataFrame(columns=['Iteration','Density','delay'])
    for i in range(repetitions):
        sn = SecNet(graph, mu, beta, reconnection_policy=policy,default_delay=delay)
        sn.run(200)
        for j in range(200):
            densities.loc[200*i+j]=[j,sn.defaulted_density[j],delay]
            
    densities.to_pickle(filename)
    return densities
Esempio n. 9
0
def simulate(graph, mu, beta, recon_policy, default_delay, max_iterations, num_sectors):
    prob_by_sector = np.zeros(num_sectors)

    sn = SecNet(graph, mu, beta,
                reconnection_policy=recon_policy,
                default_delay=default_delay, weight_transfer=False)

    sn.run(max_iter=max_iterations, variation_coeff=10e-5)

    for sector in range(num_sectors):
        nodes = sn.nodes_per_sector[sector]
        n = len(nodes)
        for node_id in nodes:
            node = sn.graph.nodes[node_id]
            prob_by_sector[sector] += node['defaulted']

        prob_by_sector[sector] = prob_by_sector[sector] / n

    return prob_by_sector
def run_sectorial_d(graph,mu, beta, recon_policy,delay, iterations,num_sectors):
    
    sn = SecNet(graph, mu, beta,reconnection_policy = recon_policy, 
                default_delay = delay, weight_transfer = False)
    
    density_by_sector = np.zeros((num_sectors,iterations))
    
    for i in range(iterations):
        
        sn.run(1,verbose=False)
        
        for sector in range(num_sectors):
            nodes = sn.nodes_per_sector[sector]
            n = len(nodes)
            for node_id in nodes:
                node = sn.graph.nodes[node_id]
                density_by_sector[sector,i] += node['defaulted']
                
            density_by_sector[sector,i] = density_by_sector[sector,i] / n
            
    print("1 Done")
    return density_by_sector
Esempio n. 11
0
def risk_cascades_sectorial(graph: DiGraph,
                            num_sectors,
                            repetitions_per_node=15,
                            max_iterations=150,
                            mu=0.2,
                            beta=0.6,
                            amount_per_sector=10,
                            policy='RANDOM',
                            delays=[2, 4, 6]):

    risks = np.zeros(num_sectors * len(delays))
    maximums = np.zeros(num_sectors * len(delays))
    #doesnt matter what to pu tis just to apply the nodes by sector function
    sn = SecNet(graph,
                mu,
                beta,
                reconnection_policy=ReconnectionPolicy.RANDOM,
                default_delay=2,
                weight_transfer=False)

    for sector in range(num_sectors):

        risk = np.zeros((amount_per_sector, len(delays)))
        maximum = np.zeros((amount_per_sector, len(delays)))
        eligible_nodes = sn.nodes_per_sector[sector]
        nodes = np.random.choice(eligible_nodes, size=amount_per_sector)
        r = 0
        for node_id in nodes:

            sizes = cascades_setting_defaults(graph,
                                              node_id,
                                              repetitions_per_node,
                                              max_iterations,
                                              mu,
                                              beta,
                                              delays,
                                              policy=policy)

            risk[r], maximum[r] = assessment(sizes, delays)

            r += 1
        for i in range(len(delays)):
            risks[len(delays) * sector + i] = np.mean(risk[:, i])
            maximums[len(delays) * sector + i] = np.max(maximum[:, i])

    return risks, maximums
Esempio n. 12
0
def sectorial_cascades_sizes(graph: DiGraph,
                             num_sectors,
                             repetitions_per_node=15,
                             max_iterations=150,
                             mu=0.2,
                             beta=0.6,
                             nodes_per_sector=5,
                             policy='RANDOM',
                             delay=[2]):

    sn = SecNet(graph,
                mu,
                beta,
                reconnection_policy=ReconnectionPolicy.RANDOM,
                default_delay=2,
                weight_transfer=False)

    sector_sizes = []

    for sector in range(num_sectors):
        sizes = []
        eligible_nodes = sn.nodes_per_sector[sector]
        nodes = np.random.choice(eligible_nodes, size=nodes_per_sector)

        for node_id in nodes:
            size = cascades_setting_defaults(graph,
                                             node_id,
                                             repetitions_per_node,
                                             max_iterations,
                                             mu,
                                             beta,
                                             delay,
                                             policy=policy)

            [sizes.append(siz) for siz in size]

        sector_sizes.append(sizes)

    return sector_sizes
Esempio n. 13
0
def density_plot(g: DiGraph,
                 mu=0.4,
                 beta=0.6,
                 iterations=200,
                 file_plot='images/density/density_by_policy'):
    for policy in ['SOFT', 'RANDOM']:
        for default_delay in [2, 4, 6, 8]:
            if policy == 'NONE':
                sn = SecNet(g, mu=mu, beta=beta,
                            reconnection_policy=ReconnectionPolicy.NONE,
                            default_delay=0, weight_transfer=False)
            elif policy == 'RANDOM':
                sn = SecNet(g, mu=mu, beta=beta,
                            reconnection_policy=ReconnectionPolicy.RANDOM,
                            default_delay=default_delay, weight_transfer=False)
            elif policy == 'SOFT':
                sn = SecNet(g, mu=mu, beta=beta,
                            reconnection_policy=ReconnectionPolicy.SOFT,
                            default_delay=default_delay, weight_transfer=False)
            elif policy == 'STRONG':
                sn = SecNet(g, mu=mu, beta=beta,
                            reconnection_policy=ReconnectionPolicy.STRONG,
                            default_delay=default_delay, weight_transfer=False)
            file = file_plot + policy + str(default_delay) + '.png'
            sn.run(iterations, variation_coeff=10e-5)
            sn.plot('Defaulted companies for %s' % policy,
                    save=True,
                    file_name=file)