Многочисленные симуляции Python на одном графике - PullRequest
0 голосов
/ 19 марта 2019

Я кодировал симулятор gillespie для эволюционной симметричной игры 2x2.

Моя проблема в том, что я не уверен, как включить несколько прогонов игры на графике? Как и каждый раз, когда я запускаю его, всегда появляется новый график и один прогон по нему.

Кроме того, я изо всех сил пытаюсь выяснить, как сделать несколько итераций, например, 1000 итераций кода. Поскольку я хочу записать, сколько раз код достигает i = 0 или i = N из кода, который у меня есть:

# -*- coding: utf-8 -*-
"""


@author: matthew
"""

import random as random 

import math as math

import matplotlib.pyplot as plt



def function(N):

    t = float(0)
    prop_C=0.5
    i = prop_C*N
    S = float(0.01)
    pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))
    pay_d = (i / (N - 1))

    fd = 1 - (S + (S * pay_d))

    fc = 1 - (S + (S * pay_c))

    avg = ((i  / N) * fc) + ((1 - (i / N)) * fd)

    lami = (i / N) * ((N - i) / N) * (fc / avg)

    mui = ((i / N) * (N - (i / N)) * (fd / avg))

    i_list = []

    t_list = []

    X_list = []
    lami_list=[]
    mui_list=[]

    counter = float(0)
    counterlist=[]
    while i <= N:

        if i==0:

            break

        if i ==N:

            break

        r2 = random.uniform(0,1)

        if 0<= r2 <= lami/(lami + mui):

            i=i+1
            i_list.append(i)
            counter = counter +1
            counterlist.append(counter)
            X = (i/N)

            X_list.append(X)

            pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))

            pay_d = (i / (N - 1))

            fd = 1 - S + (S * pay_d)

            fc = 1 - S + (S * pay_c)

            avg = ((i  / N) * fc) + ((1 - (i / N)) * fd)

            r1 = random.uniform(0,1)

            tau = - (1/(lami + mui)) * math.log(r1)
            lami = (i / N) * ((N - i) / N) * (fc / avg)
            mui = (i / N) * ((N - i) / N) * (fd / avg)

            t = t + tau
            t_list.append(t)

            mui_list.append(mui)
            lami_list.append(lami)

        else:

            i=i-1

            i_list.append(i)
            counter = counter +1
            counterlist.append(counter)

            X = (i/N)

            X_list.append(X)

            pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))

            pay_d = (i / (N - 1))

            fd = 1 - S + (S * pay_d)

            fc = 1 - S + (S * pay_c)

            avg = ((i  / N) * fc) + ((1 - (i / N)) * fd)

            r1 = random.uniform(0,1)
            tau = - (1/(lami + mui)) * math.log(r1)
            lami = (i / N) * ((N - i) / N) * (fc / avg)
            mui = (i / N) * ((N - i) / N) * (fd / avg)

            t = t + tau
            t_list.append(t)

            mui_list.append(mui)
            lami_list.append(lami)
        continue

    plt.title("Gillespie algorithm for Hawk Dove Game")

    plt.plot(t_list, X_list, color = 'red')

    plt.show(plt.plot)

    return(X_list, t_list)
function(250)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...