예제 #1
0
파일: KMR.py 프로젝트: oyataku1/KMR-

for i in range(1, N+1): #行動1→行動0への変更
    m_i = i / N  #行動 1 をとっているプレイヤーとマッチする確率,行動1の人が選ばれる確率
    ratio = np.array([1-m_i, m_i])
    exp = np.dot(profit_A, ratio)
    if exp[0] > exp[1]: #行動0が最適反応のとき
        p[i][i-1] = m_i*((1.0-epsilon) + epsilon*0.5)     # p[i][i-1] x_0が1減少するマスの確率
    else:
        p[i][i-1] = m_i*(epsilon*0.5)
for i in range(N): #行動0→行動1への変更
    m_i = i / N
    ratio = np.array([1-m_i, m_i])
    exp = np.dot(profit_A, ratio)
    if exp[0] < exp[1]:
        p[i][i+1] = (1-m_i)*((1-epsilon) + epsilon*0.5)
    else:
        p[i][i+1] = (1-m_i)*(epsilon*0.5)
for i in range(1, N): #行動を変えない
    p[i][i] = 1 - p[i][i-1] - p[i][i+1]

#上からもれたマス
p[0][0] = 1 - p[0][1]
p[N][N] = 1 - p[N][N-1]
    
    
    
    
X = mc_sample_path(p, x_0, times)   #マルコフ連鎖
plt.plot(X)
plt.show()
예제 #2
0
파일: KMR0.py 프로젝트: fukizaki/KMR
	    
            P[i, i - 1] = (i/N)*((1 - ep) + ep*0.5)

            		P[i, i] = (1 - i/N)*ep*0.5 + (i/N)*ep*0.5

            		P[i, i + 1] = (1 - i/N)*((1 - ep) + ep*0.5)

	        else:

            		P[i, i - 1] = (i/N)*ep*0.5

	                P[i, i] = (1 - i/N)*ep*0.5 + (i/N)*((1 - ep) + ep*0.5)

	                P[i, i + 1] = (1 - i/N)*((1 - ep) + ep*0.5)

        return P




P = kmr(N, ep, p)


x_t = mc_sample_path(P, x_0, sample_size=t)


plt.plot(x_t)

plt.show()

예제 #3
0
파일: KMR.py 프로젝트: TanaPanda/KMR
payoff_0 = np.array([[payoff[0, 0, 0], payoff[0, 1, 0]], [payoff[1, 0, 0], payoff[1, 1, 0]]]) # payoff matrix for player 0

# setting up transitive matrix A
A = np.zeros([N+1, N+1]) 
A[0, 0] = 1 - epsilon*0.5
A[0, 1] = epsilon*0.5
A[N, N-1] = epsilon*0.5
A[N, N] = 1 - epsilon*0.5
for i in range(1, N): 
    x_i = i / N
    ratio = np.array([1- x_i, x_i]) # the ratio b/w action0 and action1 
    exp = np.dot(payoff_0, ratio)
    if exp[0] > exp[1]:
        A[i, i -1] = x_i * (1-epsilon*0.5)
        A[i, i+1] = (1-x_i) * epsilon*0.5
        A[i, i] = 1- A[i, i-1] - A[i, i+1]
    elif exp[0] < exp[1]:
        A[i, i -1] = x_i * epsilon*0.5
        A[i, i+1] = (1 - x_i) * (1 - epsilon * 0.5)
        A[i, i] = 1- A[i, i-1] - A[i, i+1]
    else:
        A[i, i -1] = x_i * 0.5
        A[i, i+1] = x_i * 0.5
        A[i, i] = 0.5

y = mc_sample_path(A, x_0, times)

fig, ax = plt.subplots()
ax.plot(y)
plt.show()
예제 #4
0
파일: KMR.py 프로젝트: S-Nakada/HW2014
   def set_P(self): 
       if self.move == 'sequential':
           self.P = KMR_2x2_P_sequential(self.N, self.p, self._epsilon)
       else:
           self.P = KMR_2x2_P_simultaneous(self.N, self.p, self._epsilon)
                 
     
     
   def simulate(self, T=100000, x0=0):
            
 """
 Generates a NumPy array containing a sample path of length T
 with initial state x0 = 0
 
 """
 self.s = mc_sample_path(self.P, x0, T)
     
   def get_sample_path(self):
       return self.s
     
     
     
   def plot_sample_path(self, ax=None, show=True):
       if show:
                 fig, ax = plt.subplots()
             ax.plot(self.s, alpha=0.5)
             ax.set_ylim(0, self.N)
             ax.set_title(r'Sample path: $\\varepsilon = {0}$'.format(self._epsilon))
             ax.set_xlabel('time')
             ax.set_ylabel('state space')
       if show:
예제 #5
0
        X[k][k]=(k/n)*epsilon*0.5
    elif expay1[0]==expay1[1]:
        X[k][k-1]=(k/n)*0.5
        X[k][k]=(k/n)*0.5
    else:
        X[k][k-1]= (k/n)*epsilon*0.5
        X[k][k] = (k/n)*((1-epsilon)+epsilon*0.5)
    if expay0[1]>expay0[0]:
        X[k][k+1]=((n-k)/n)*((1-epsilon)+epsilon*0.5) #k人からk+1人になる確率
        X[k][k] += ((n-k)/n)*epsilon*0.5 #X[k][k]は上でも定めているので上書きでなく加えている
    elif expay0[1]==expay0[0]:
        X[k][k+1] = ((n-k)/n)*0.5
        X[k][k] += ((n-k)/n)*0.5
    else:
        X[k][k+1] = ((n-k)/n)*epsilon*0.5
        X[k][k] += ((n-k)/n)*((1-epsilon)+epsilon*0.5)
X[0][0] = (1-epsilon)+epsilon*0.5
X[0][1] = epsilon*0.5
X[n][n-1] = epsilon*0.5
X[n][n] = (1-epsilon)+epsilon*0.5
x_0 = np.random.binomial(n,p)  # determine X_0
xs=mc_sample_path(X,init=x_0,sample_size=t)

"""
確率分布を入れる場合は長さn+1のリストを入れなければいけないらしく
面倒なので各人が確率pで行動1を選択するという二項分布を作って整数値で代入
"""
plt.plot(xs, 'b-', label='X_t')
plt.legend()
plt.show()    
예제 #6
0
파일: KMR.py 프로젝트: knkszk0602/KMR-model
    elif exp[0] < exp[1]:
        P[i][i] = num*(1-epsilon*0.5)+(1-num)*epsilon*0.5
    else:
        P[i][i] = 0.5
for i in range(1, n+1):
    num = fractions.Fraction(i, n)
    pr = np.array([1-num, num])
    exp = np.dot(pay0, pr)
    if exp[0] > exp[1]:
        P[i][i-1] = num*(1-epsilon*0.5)
    elif exp[0] < exp[1]:
        P[i][i-1] = num*epsilon*0.5
    else:
        P[i][i-1] = num*0.5
for i in range(n):
    num = fractions.Fraction(i, n)
    pr = np.array([1-num, num])
    exp = np.dot(pay0, pr)
    if exp[0] > exp[1]:
        P[i][i+1] = (1-num)*epsilon*0.5
    elif exp[0] < exp[1]:
        P[i][i+1] = (1-num)*(1-epsilon*0.5)
    else:
        P[i][i+1] = (1-num)*0.5

X = mc_sample_path(P, psi, t)

fig, ax = plt.subplots()
ax.plot(X)
plt.show()
예제 #7
0
N = 6
t = 10000
epsilon = 0.1
x_0 = 0
p = 1/3

A = np.zeros([N+1, N+1])
A[0,0] = 1 - epsilon*0.5
A[0,1] = epsilon*0.5
A[N,N-1] = epsilon*0.5
A[N,N] = 1 - epsilon*0.5
for i in range(1,N):
    x_i = i / N
    if x_i < p:
        A[i, i-1] = x_i * (1 - epsilon*0.5)
        A[i, i+1] = (1 - x_i) * epsilon*0.5
        A[i, i] = 1 - A[i, i-1] - A[i, i+1]
    elif x_i > p:
        A[i, i -1] = x_i * epsilon*0.5
        A[i, i+1] = (1 - x_i) * (1 - epsilon * 0.5)
        A[i, i] = 1- A[i, i-1] - A[i, i+1]
    else:
        A[i, i -1] = x_i * 0.5
        A[i, i+1] = x_i * 0.5
        A[i, i] = 0.5

y = mc_sample_path(A, x_0, t)

fig, ax = plt.subplots()
ax.plot(y)
plt.show()
예제 #8
0
파일: KMR.py 프로젝트: Naoya-Sho/KMR
    if expay[0] == expay[1]:
        P[n, n+1] += (1 - n/N) * 0.5
        P[n, n-1] += n/N * 0.5

    elif expay[0] > expay[1]:
        
        P[n, n+1] += (1 - n/N) * epsilon * 0.5
        P[n, n-1] += n/N * (1 - epsilon * 0.5)

    else:
        
        P[n, n+1] += (1 - n/N) * (1 - epsilon * 0.5)
        P[n, n-1] += n/N * epsilon * 0.5


    P[n,n] = 1 - sum(P[n])

# Derive a path of x with mc_tools
x = mc_sample_path(P, default, trials)

# Plot a path of x

fig, ax = plt.subplots()

xaxis = range(trials)
ax.plot(xaxis, x, 'b-',label = 'Num. of people taking action 1')
ax.legend(loc = 4)
plt.title('Num. of players = ' + str(N)  + ', '+ 'Trials = '+ str(trials) + ', ' + 'epsilon = ' + str(epsilon), color='k')
plt.savefig(gamename + str(N) + str(trials) + str(epsilon) + '.png',transparent=True, bbox_inches='tight', pad_inches=0)
plt.close()
예제 #9
0
epsilon = 0.2
r = random.uniform(0, 1)
psi = (r, 1 - r)

P = np.zeros([n + 1, n + 1])
for i in range(1, n + 1):  #行動1をとっている人が選ばれて行動0に変更する
    num0 = fractions.Fraction(i - 1, n - 1)
    num1 = fractions.Fraction(i, n)
    ratio = np.array([1.0 - num0, num0])
    exp = np.dot(p_0, ratio)
    if exp[0] > exp[1]:
        P[i][i - 1] = num1 * ((1.0 - epsilon) + epsilon * 0.5)
    else:
        P[i][i - 1] = num1 * (epsilon * 0.5)
for i in range(n):  #行動0をとっている人が選ばれて行動1に変更する
    num0 = fractions.Fraction(i, n - 1)
    num1 = fractions.Fraction(i, n)
    ratio = np.array([1 - num0, num0])
    exp = np.dot(p_0, ratio)
    if exp[0] < exp[1]:
        P[i][i + 1] = (1 - num1) * ((1 - epsilon) + epsilon * 0.5)
    else:
        P[i][i + 1] = (1 - num1) * (epsilon * 0.5)
for i in range(1, n):  #行動を変えない
    P[i][i] = 1 - P[i][i - 1] - P[i][i + 1]
P[0][0] = 1 - P[0][1]
P[n][n] = 1 - P[n][n - 1]

X = mc_sample_path(P, psi, t)
plt.plot(X)
plt.show()
예제 #10
0
 def path(self, t):
     self.set_move()
     self.set_x0()
     self.xs = mc_sample_path(self.X,init=self.x_0,sample_size=t)