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
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
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)
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
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
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)