Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从多维数组返回最大值(ndarray)_Arrays_Python 3.x_Numpy_Multidimensional Array_Game Theory - Fatal编程技术网

Arrays 从多维数组返回最大值(ndarray)

Arrays 从多维数组返回最大值(ndarray),arrays,python-3.x,numpy,multidimensional-array,game-theory,Arrays,Python 3.x,Numpy,Multidimensional Array,Game Theory,因此,我有以下代码: import numpy import nash pool_of_games = [[[0,2,1,3,3,2,1,0],"PdPd","PrisonerDilemma"], [[0,3,1,2,2,3,1,0],"ShSh","StagHunt"], [[1,2,3,0,3,2,1,0],"ChCh","Chicken"], [[2,1,0,3,3,1,0,2],"BaBa","Battle"]] def RandomStrategySelection343(poo

因此,我有以下代码:

import numpy
import nash

pool_of_games = [[[0,2,1,3,3,2,1,0],"PdPd","PrisonerDilemma"], 
[[0,3,1,2,2,3,1,0],"ShSh","StagHunt"],
[[1,2,3,0,3,2,1,0],"ChCh","Chicken"],
[[2,1,0,3,3,1,0,2],"BaBa","Battle"]]

def RandomStrategySelection343(pool_of_games):   
    gci = 0   
    fitness_list = []
    nash_pool = [] 
    for game in range (0, len(pool_of_games)):    
        pr1 = pool_of_games[game][0][:2]   
        pr2 = pool_of_games[game][0][2:4]
        pc1 = pool_of_games[game][0][4:6]
        pc2 = pool_of_games[game][0][6:]
        p1_strategy_vector = [pr1, pr2]
        p2_strategy_vector = [pc1, pc2]
        game_matrix = nash.Game(p1_strategy_vector,p2_strategy_vector)
        print(game_matrix)
        nash_array = game_matrix.support_enumeration()
        nash_list = list(nash_array)
        print("NL",nash_list)
        for s1,s2 in nash_list:
            row_utility = ((numpy.dot(numpy.dot(s1,p1_strategy_vector),s2)))
            print(row_utility)
            col_utility = (numpy.dot(numpy.dot(s1,p2_strategy_vector),s2))
            print(col_utility)
            fitness = row_utility + col_utility
            print ("FS",fitness)
        maxfit = fitness.max()
        print ("MX", maxfit)
我在这里使用
numpy.dot
函数来获得两个大小相同的矩阵(由nash函数创建)的乘积。我相信这个函数返回数据数组中的数据。我接下来要做的是总结它们

例如,函数的(部分)输出为:

Row player:
[[2 1]
 [0 3]]

Column player:
[[3 1]
 [0 2]]
NL [(array([ 1.,  0.]), array([ 1.,  0.])), (array([ 0.,  1.]), array([ 0.,  1.])), (array([ 0.5,  0.5]), array([ 0.5,  0.5]))]
2.0
3.0
FS 5.0
3.0
2.0
FS 5.0
1.5
1.5
FS 3.0
MX 3.0
如您所见,结果和总和计算正确,但最大值(MX)不正确。这将是这部分代码的主要结果


有人知道我做错了什么吗?

你的
适应度
不是数组,而是在循环中分配给它的标量。首先,它被指定为5;然后又是5,然后是3。循环结束时,
适合度
为3。一个数字3的最大值当然是3。以下是找到最大适合度的正确方法:

  maxfit = -np.inf   # negative infinity to initialize
  for s1,s2 in nash_list:
        row_utility = ((numpy.dot(numpy.dot(s1,p1_strategy_vector),s2)))
        col_utility = (numpy.dot(numpy.dot(s1,p2_strategy_vector),s2))
        fitness = row_utility + col_utility
        maxfit = max(fitness, maxfit)
  print(maxfit)

主要的一点是,
maxfit
在循环中更新。

您的
适应度
不是数组,而是在循环中分配给它的标量。首先,它被指定为5;然后又是5,然后是3。循环结束时,
适合度
为3。一个数字3的最大值当然是3。以下是找到最大适合度的正确方法:

  maxfit = -np.inf   # negative infinity to initialize
  for s1,s2 in nash_list:
        row_utility = ((numpy.dot(numpy.dot(s1,p1_strategy_vector),s2)))
        col_utility = (numpy.dot(numpy.dot(s1,p2_strategy_vector),s2))
        fitness = row_utility + col_utility
        maxfit = max(fitness, maxfit)
  print(maxfit)
主要的一点是
maxfit
在循环中更新