def findEquilibria(self, method='CMAES'): """ Find all equilibria, using method :param method: of computing equilibria :type method: str, one of Game.METHODS :return: list of NE, if not found returns None :rtype: list of StrategyProfile """ if method == 'pne': result = self.getPNE() if len(result) == 0: return None else: return result elif self.num_players == 2 and method == 'support_enumeration': result = support_enumeration.computeNE(self) self.degenerate = self.isDegenerate() if len(result) == 0: return None else: return result elif method == 'CMAES': result = cmaes.fmin(self.LyapunovFunction, self.sum_shape) elif method in self.METHODS: result = scipy.optimize.minimize(self.LyapunovFunction, np.random.rand(self.sum_shape), method=method, tol=1e-10, options={"maxiter": 1e3 * self.sum_shape ** 2}) logging.info(result) if result.success: r = [sp.StrategyProfile(result.x, self.shape)] return r else: return None
def findEquilibria(self, method='CMAES'): """ Find all equilibria, using method @params method method from Game.METHODS to be used @return list of NE(list of probabilities), if not found return None """ if method == 'pne': result = self.getPNE() if len(result) == 0: return None else: return result elif self.num_players == 2 and method == 'support_enumeration': result = support_enumeration.computeNE(self) if len(result) == 0: return None else: return result elif method == 'CMAES': result = cmaes.fmin(self.LyapunovFunction, self.sum_shape) elif method in self.METHODS: result = scipy.optimize.minimize(self.LyapunovFunction, np.random.rand(self.sum_shape), method=method, tol=1e-10, options={"maxiter":1e3 * self.sum_shape ** 2}) logging.info(result) if result.success: r = [] r.append(result.x) return r else: return None