アットウィキロゴ

だんjj

import numpy as np
import game
import math
import gamex 
 
number=100
number_eq=5
number_var=2
 
x=[]
for i in range(100):
   r1=np.random.random()
   r2=np.random.random()
   x.append([r1,r2])
 
y=[]
for i in range(100):
    r3=0
    h=0
    if 3*x[i][0]-2*x[i][1]>0.5:h=h+1  
    if h==1:r3=1
    y.append(r3)
 
sub=game.game()
sub.x=x
sub.y=y
sub.makedata()    
a=sub.a
 
print(a)
 
sub2=gamex.gamex()
sub2.x=x
sub2.y=y
sub2.a=a
sub2.makedata()    
alpha=sub2.alpha
 
print(alpha)
 
 
es=np.zeros([7,number])
 
link=[[3,5,6],[4,5,6],[1,3,4],[2,3,4],[0,1,2]]
 
for i in range(number):
    es[5][i]=x[i][0]
    es[6][i]=x[i][1]
 
for n in range(number_eq):
    for i in range(number):
        f1=alpha[n][0] 
        for j in range(number_var):
            n1=link[n][j+1]
            f1=f1+alpha[n][j+1]*es[n1][i]
        n1=link[n][0]
        f2=0
        if f1>0:f2=1
        es[n1][i]=f2
 
c=0
for i in range(number):
    if y[i]==es[0][i]:c=c+1
 
print(c)
 
 
import numpy as np
import nnx
import math
 
class gamex:
 
    def makedata(self):    
 
        number=100
        number_eq=5
        number_var=2
 
        link=[[3,5,6],[4,5,6],[1,3,4],[2,3,4],[0,1,2]]
        self.alpha=np.zeros([number_eq,number_var+1])
 
        self.alpha[0][0]=0
        self.alpha[0][1]=1
        self.alpha[0][2]=0
 
        self.alpha[1][0]=0
        self.alpha[1][1]=0
        self.alpha[1][2]=1
 
        for eq1 in range(3):
            for j in range(3):
                self.alpha[eq1+2][j]=self.a[eq1][j]
 
        for tr in range(100):
 
            for eq1 in range(number_eq):
                sub=nnx.nnx()
                sub.x=self.x
                sub.y=self.y
                sub.a=self.alpha
                sub.link=link
                sub.number=number
                sub.number_eq=number_eq
                sub.number_var=number_var
                sub.makedata(eq1)
                self.alpha=sub.a
 
 
import numpy as np
import math
 
class nnx:
 
    def g(self):
 
        g1=0
        for i in range(self.number):
            g1=g1+(self.y[i]-self.e[0][i])*(self.y[i]-self.e[0][i])
 
        return g1
 
    def f(self,ax):
 
        for n in range(self.number_eq):
            for i in range(self.number):
                f1=ax[n][0] 
                for j in range(self.number_var):
                    n1=self.link[n][j+1]
                    f1=f1+ax[n][j+1]*self.e[n1][i]
                n1=self.link[n][0]
                self.e[n1][i]=1/(1+math.exp(-f1)) 
 
 
    def makedata(self,eqs):
 
        self.e=np.zeros([7,self.number])
        ax=np.zeros([self.number_eq,self.number_var+1])
        df=np.zeros([self.number_var+1])
 
        for i in range(self.number):
            self.e[5][i]=self.x[i][0]
            self.e[6][i]=self.x[i][1]
 
        for i in range(self.number_eq):
            for j in range(self.number_var+1):
                ax[i][j]=self.a[i][j]
 
        self.f(ax)
        g1=self.g()
 
 
        for k in range(self.number_var+1):
 
            for i in range(self.number_eq):
                for j in range(self.number_var+1):
                    ax[i][j]=self.a[i][j]
 
            ax[eqs][k]=ax[eqs][k]+0.01
 
            self.f(ax)
            g2=self.g()
 
            df[k]=(g2-g1)/0.01
 
 
        sig=0
        for mx in range(self.number_var+1):
            sig=sig+df[mx]*df[mx]
 
        if sig>0.01:
 
 
            for eq2 in range(self.number_eq): 
                for mx in range(self.number_var+1):
                    ax[eq2][mx]=self.a[eq2][mx]
                    if eq2==eqs:ax[eq2][mx]=self.a[eq2][mx]-0.05*g1*df[mx]/sig
 
            self.f(ax)
            g3=self.g()
 
            if g3<g1:
                for eq2 in range(self.number_eq): 
                    for mx in range(self.number_var+1):
                        self.a[eq2][mx]=ax[eq2][mx]
import math
 
class game:
 
    def makedata(self):    
 
        number=100
        number_eq=3
        number_var=2
 
        link=[[1,3,4],[2,3,4],[0,1,2]]
        self.a=np.zeros([number_eq,number_var+1])
 
        for eq1 in range(number_eq): 
            for u in range(number_var+1):
                self.a[eq1][u]=np.random.random()
 
        for tr in range(100):
 
            for eq1 in range(number_eq):
                sub=nn.nn()
                sub.x=self.x
                sub.y=self.y
                sub.a=self.a
                sub.link=link
                sub.number=number
                sub.number_eq=number_eq
                sub.number_var=number_var
                sub.makedata(eq1)
                self.a=sub.a
 
       import numpy as np
import math
 
class nn:
 
    def g(self):
 
        g1=0
        for i in range(self.number):
            g1=g1+(self.y[i]-self.e[0][i])*(self.y[i]-self.e[0][i])
 
        return g1
 
    def f(self,ax):
 
        for n in range(self.number_eq):
            for i in range(self.number):
                f1=ax[n][0] 
                for j in range(self.number_var):
                    n1=self.link[n][j+1]
                    f1=f1+ax[n][j+1]*self.e[n1][i]
                n1=self.link[n][0]
                self.e[n1][i]=1/(1+math.exp(-f1)) 
 
 
    def makedata(self,eqs):
 
        self.e=np.zeros([5,self.number])
        ax=np.zeros([self.number_eq,self.number_var+1])
        df=np.zeros([self.number_var+1])
 
        for i in range(self.number):
            self.e[3][i]=self.x[i][0]
            self.e[4][i]=self.x[i][1]
 
        for i in range(self.number_eq):
            for j in range(self.number_var+1):
                ax[i][j]=self.a[i][j]
 
        self.f(ax)
        g1=self.g()
 
 
        for k in range(self.number_var+1):
 
            for i in range(self.number_eq):
                for j in range(self.number_var+1):
                    ax[i][j]=self.a[i][j]
 
            ax[eqs][k]=ax[eqs][k]+0.01
 
            self.f(ax)
            g2=self.g()
 
            df[k]=(g2-g1)/0.01
 
 
        sig=0
        for mx in range(self.number_var+1):
            sig=sig+df[mx]*df[mx]
 
        if sig>0.01:
 
 
            for eq2 in range(self.number_eq): 
                for mx in range(self.number_var+1):
                    ax[eq2][mx]=self.a[eq2][mx]
                    if eq2==eqs:ax[eq2][mx]=self.a[eq2][mx]-0.05*g1*df[mx]/sig
 
            self.f(ax)
            g3=self.g()
 
            if g3<g1:
                for eq2 in range(self.number_eq): 
                    for mx in range(self.number_var+1):
                        self.a[eq2][mx]=ax[eq2][mx]
 
最終更新:2018年03月05日 17:01