コード例 #1
0
    def solve(self):

        try:
            # We need to transofrm our GUI entries to variables  !
            po00 = (int(self.payoffEntryL00.get()),
                    int(self.payoffEntryR00.get()))
            po01 = (int(self.payoffEntryL01.get()),
                    int(self.payoffEntryR01.get()))
            po10 = (int(self.payoffEntryL10.get()),
                    int(self.payoffEntryR10.get()))
            po11 = (int(self.payoffEntryL11.get()),
                    int(self.payoffEntryR11.get()))
            payoff = [[po00, po01], [po10, po11]]

            M = np.array(payoff)
            s = Solver(payoff=M)
            result = s.solve(1, 0)

            strategies = []
            for r in result:
                if (r[0] == 0 and r[1] == 0):
                    strategies.append("(A,C)")
                elif (r[0] == 0 and r[1] == 1):
                    strategies.append("(A,D)")
                elif (r[0] == 1 and r[1] == 0):
                    strategies.append("(B,C)")
                else:
                    strategies.append("(B,D)")

            ne = " , ".join(strategies)
            ne_msg = f'Pure Nash Equiliberia Strategies :\n{ne}\n'
            print(ne_msg)
            self.resultLabel.config(text=ne_msg)

            po00 = (self.payoffFrame00, self.payoffLP00, self.payoffV00,
                    self.payoffRP00, self.payoffEntryL00, self.payoffEntryR00)
            po01 = (self.payoffFrame01, self.payoffLP01, self.payoffV01,
                    self.payoffRP01, self.payoffEntryL01, self.payoffEntryR01)
            po10 = (self.payoffFrame10, self.payoffLP10, self.payoffV10,
                    self.payoffRP10, self.payoffEntryL10, self.payoffEntryR10)
            po11 = (self.payoffFrame11, self.payoffLP11, self.payoffV11,
                    self.payoffRP11, self.payoffEntryL11, self.payoffEntryR11)

            show_ne = [po00, po01, po10, po11]
            print(result)
            res2Show = []
            for r in result:
                bin_num = str(r[0]) + str(r[1])
                idx = int(bin_num, 2)
                res2Show.append(idx)

            for i in res2Show:
                self.showNE(show_ne[i][0], show_ne[i][1], show_ne[i][2],
                            show_ne[i][3], show_ne[i][4], show_ne[i][5])

        except ValueError as verr:
            showerror(title=" Invalid PayOff",
                      message=" All entries need to be Integers!")
            return
コード例 #2
0
    def solve(self):
        try:
            # We need to transofrm our GUI entries to variables  !
            po00=(int(self.payoffEntryL00.get()),int(self.payoffEntryR00.get()))
            po01=(int(self.payoffEntryL01.get()),int(self.payoffEntryR01.get()))
            po10=(int(self.payoffEntryL10.get()),int(self.payoffEntryR10.get()))
            po11=(int(self.payoffEntryL11.get()),int(self.payoffEntryR11.get()))
            payoff=[[po00,po01],[po10,po11]]
            M=np.array(payoff)
            s = Solver(payoff=M)
            result=s.solve(0, 1)
            problem=0
            if(result[0] is None or result[1] is None):
                if (result[0] is not None):
                    msg = f'Nash Equiliberia Mixed Strategies : \np={Fraction(result[0]).limit_denominator()}\nq∈[0,1]'
                elif (result[1] is not None ):
                    msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq={Fraction(result[1]).limit_denominator()}'
                else:
                    msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
            else:
                if (result[0] > 1 or result[1] > 1):
                    msg = f'No Nash Equilebria found in Mixed Strategies'
                    problem=1
                elif (result[0] < 0):
                    if (result[1] < 0):
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
                    else:
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq={Fraction(result[1]).limit_denominator()}'
                elif (result[1] < 0):
                    if (result[0] < 0):
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
                    else:
                        msg = f'Nash Equiliberia Mixed Strategies : \np={Fraction(result[0]).limit_denominator()}\nq∈[0,1]'
                else:
                    msg=f'Nash Equiliberia Mixed Strategies : \np = {result[0]} \nq = {result[1]}'

                # if(result[0]>1 and result[1]>1):
                #     msg = f'No Nash Equilebria found in Mixed Strategies'
                # elif(result[0]<0 or result[0]>1):
                #     msg = f'Nash Equiliberia Mixed Strategies: \np∈[0,1] \nq = 0'
                # elif(result[1]<0 or result[1]>1):
                #     msg = f'Nash Equiliberia Mixed Strategies : \np=0 \nq∈[0,1]'
                # else:
                #     msg=f'Nash Equiliberia Mixed Strategies : \np = {result[0]} \nq = {result[1]}'


            # messagebox.showinfo(title="Mixed Strategies Nash Equilibria", message=msg)
            self.resultLabel.configure(text=msg)
            if(not problem):
                self.PQgraph(result[0],result[1])
                plt.show()



        except ValueError as verr:
            showerror(title=" Invalid PayOff", message=" All entries need to be Integers!")
            return
コード例 #3
0
alphas = [[1]]  #np.linspace(0.6, 0.6, 1) # mixing coefficients

colors = ['red', 'pink', 'brown']

for mu_iter in mus:
    mu = np.array([[55]])  #np.array([[-mu_iter], [mu_iter]])
    errorss_daem = []
    alphass_daem = []
    muss_daem = []
    errorss_em = []
    alphass_em = []
    muss_em = []
    bs = []

    for alpha in alphas:
        solver = Solver(alpha=np.array(alpha), mu=mu, sigma=sigma)

        # Xi is 1 dimensional. N data points
        # need to generate data properly as required
        def getsample(k):
            return np.random.normal(mu[k], sigma[k]**0.5)

        X = np.array([getsample(toss(alpha)) for j in range(N)]).reshape(1, N)

        print('Actual:')
        print('alpha: {}\nmu:\n{}\nsigma:\n{}\n\n'.format(alpha, mu, sigma))
        alpha_est_daem, mu_est_daem, sigma_est_daem, errors_daem, steps, beta_step, likelihoods_daem, actual_likelihood_daem = solver.DAEM_GMM(
            X=X, thresh=1e-6, K=K)
        errorss_daem.append(errors_daem)
        alphass_daem.append(alpha_est_daem)
        muss_daem.append(mu_est_daem)
コード例 #4
0

mu = np.zeros((K, 1, 1))
sigma = np.ones((K, 1, 1))

errorss_daem = []
alphass_daem = []
muss_daem = []
errorss_em = []
alphass_em = []
muss_em = []
bs = []

alpha = [1 / K for i in range(K)]
alphas = [alpha]
solver = Solver(alpha=np.array(alpha), mu=mu, sigma=sigma)

# Data generation
X = cdf_inv(np.random.rand(N)).reshape((1, N))

# print('Actual:')
# print('alpha: {}\nmu:\n{}\nsigma:\n{}\n\n'.format(alpha, mu, sigma))
#alpha_est_daem, mu_est_daem, sigma_est_daem, errors_daem, steps, beta_step, likelihoods_daem, actual_likelihood_daem = solver.DAEM_GMM(X=X, thresh=1e-6, K=K, max_steps=5000)
K_daem, res = solver.fit_data(X=X,
                              thresh=1e-4,
                              min_thresh=1e-6,
                              max_steps=5000,
                              algo='DAEM',
                              Kmin=4,
                              Kmax=8)
alpha_est_daem, mu_est_daem, sigma_est_daem, er, steps, beta_step, likelihoods_daem, al = res
コード例 #5
0
    def solve(self):
        try:
            # We need to transofrm our GUI entries to variables  !
            po00 = (int(self.payoffEntryL00.get()),
                    int(self.payoffEntryR00.get()))
            po01 = (int(self.payoffEntryL01.get()),
                    int(self.payoffEntryR01.get()))
            po10 = (int(self.payoffEntryL10.get()),
                    int(self.payoffEntryR10.get()))
            po11 = (int(self.payoffEntryL11.get()),
                    int(self.payoffEntryR11.get()))
            payoff = [[po00, po01], [po10, po11]]
            M = np.array(payoff)
            s = Solver(payoff=M)
            result = s.solve(1, 1)
            pure, mixed = result[0], result[1]

            strategies = []
            for r in pure:
                if (r[0] == 0 and r[1] == 0):
                    strategies.append("(A,C)")
                elif (r[0] == 0 and r[1] == 1):
                    strategies.append("(A,D)")
                elif (r[0] == 1 and r[1] == 0):
                    strategies.append("(B,C)")
                else:
                    strategies.append("(B,D)")

            ne = " , ".join(strategies)
            ne_msg = f'Nash Equiliberia Pure Strategies :\n{ne}\n'
            problem = 0

            if (mixed[0] is None or mixed[1] is None):
                if (mixed[0] is not None):
                    msg = f'Nash Equiliberia Mixed Strategies : \np={Fraction(mixed[0]).limit_denominator()}\nq∈[0,1]'
                elif (mixed[1] is not None):
                    msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq={Fraction(mixed[1]).limit_denominator()}'
                else:
                    msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
            else:
                if (mixed[0] > 1 or mixed[1] > 1):
                    msg = f'No Nash Equilebria found in Mixed Strategies'
                    problem = 1
                elif (mixed[0] < 0):
                    if (mixed[1] < 0):
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
                    else:
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq={Fraction(mixed[1]).limit_denominator()}'
                elif (mixed[1] < 0):
                    if (mixed[0] < 0):
                        msg = f'Nash Equiliberia Mixed Strategies : \np∈[0,1]\nq∈[0,1]'
                    else:
                        msg = f'Nash Equiliberia Mixed Strategies : \np={Fraction(mixed[0]).limit_denominator()}\nq∈[0,1]'
                else:
                    msg = f'Nash Equiliberia Mixed Strategies : \np = {mixed[0]} \nq = {mixed[1]}'

            print(ne_msg + msg)
            self.resultLabel.config(text=ne_msg + msg)

            # showinfo(title="Mixed Strategies Nash Equilibria", message=msg)

            po00 = (self.payoffFrame00, self.payoffLP00, self.payoffV00,
                    self.payoffRP00, self.payoffEntryL00, self.payoffEntryR00)
            po01 = (self.payoffFrame01, self.payoffLP01, self.payoffV01,
                    self.payoffRP01, self.payoffEntryL01, self.payoffEntryR01)
            po10 = (self.payoffFrame10, self.payoffLP10, self.payoffV10,
                    self.payoffRP10, self.payoffEntryL10, self.payoffEntryR10)
            po11 = (self.payoffFrame11, self.payoffLP11, self.payoffV11,
                    self.payoffRP11, self.payoffEntryL11, self.payoffEntryR11)

            show_ne = [po00, po01, po10, po11]
            res2Show = []
            for r in pure:
                bin_num = str(r[0]) + str(r[1])
                idx = int(bin_num, 2)
                res2Show.append(idx)

            for i in res2Show:
                self.showNE(show_ne[i][0], show_ne[i][1], show_ne[i][2],
                            show_ne[i][3], show_ne[i][4], show_ne[i][5])

            if (not problem):
                self.PQgraph(mixed[0], mixed[1])
                plt.show()
        except ValueError as verr:
            showerror(title=" Invalid PayOff",
                      message=" All entries need to be Integers!")
            return
コード例 #6
0
colors = ['red', 'pink', 'brown']
color_dis = [
    'green', 'blue', 'orange', 'yellow', 'cyan', 'magenta', 'indigo', 'red',
    'pink', 'brown', 'black', 'violet', 'gray', 'maroon', 'blue', 'gold'
]

errorss_daem = []
alphass_daem = []
muss_daem = []
errorss_em = []
alphass_em = []
muss_em = []
bs = []

for alpha in alphas:
    solver = Solver(alpha=np.array(alpha), mu=mu, sigma=sigma)

    # Xi is 1 dimensional. N data points
    # need to generate data properly as required
    X = np.empty((n, 0))
    X_classes = [np.empty((n, 0)) for k in range(K)]
    decomps = [np.linalg.eig(sigma[k]) for k in range(K)]
    for j in range(N):
        k_chosen = toss(alpha)
        my_mu = mu[k_chosen]
        wsig, vsig = decomps[k_chosen]
        sample = my_mu + vsig.dot((wsig**0.5).reshape(
            (n, 1)) * np.random.randn(n, 1))
        X_classes[k_chosen] = np.append(X_classes[k_chosen], sample, axis=1)
        X = np.append(X, sample, axis=1)