2015-03-08 48 views
0

以下是多智能體pacman的minimax算法的代碼片段,其中存在多個重影(最小參與者)。針對具有多重分層的多智能體pacman的minimax算法的實現問題

def min_max(self, gamestate, current_depth, min_count): 
    if current_depth == 1: 
     return (self.evaluationFunction(gamestate),None) 
# if max node 
    if min_count == 0: 
     min_count = gamestate.getNumAgents() - 1 
     legal_actions = gamestate.getLegalActions(0) 
     max_list = [] 
     for action in legal_actions: 
      max_list.append((self.min_max(gamestate.generateSuccessor(0, action), current_depth - 1, min_count), action)) 
     return max(max_list, key = itemgetter(0)) 
# if min nodes... 
    else: 
     legal_actions = gamestate.getLegalActions(min_count) 
     min_list = [] 
     for action in legal_actions: 
      min_list.append((self.min_max(gamestate.generateSuccessor(min_count, action),current_depth - 1, min_count - 1), action)) 
      print(current_depth,min_count) 
     return min(min_list, key = itemgetter(0)) 

pacman_move = self.min_max(gameState, self.depth * (no_of_ghosts + 1) + 1, 0)[1] 

但我發現了以下錯誤: ValueError異常:MIN()arg是空序列。

任何幫助表示讚賞

+0

該錯誤消息似乎非常清楚之前

if not legal_actions: # pass? win? lose? 

,所以儘量爲什麼'min'被傳遞一個空序列弄清楚:

>>> min([]) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: min() arg is an empty sequence 

這樣處理的情況。爲了調試,在調用'min'之前添加一個'print min_list'。由於'min_list'被附加到迭代'legal_actions'的for循環中,所以您可能還想添加一些調試打印,並嘗試理解爲什麼它是空的,而您認爲它是非空的。從那裏開始工作,直到你理解了這個問題。 – 2015-03-08 16:51:50

回答

0

您不必在分步任何法律動作 - 這就是爲什麼min_list是空的。做min()

+0

好吧,我並不期待min是空的。不知道我要出錯的地方 – raghu 2015-03-09 17:24:15

+0

這可能是因爲如果這個評估結果是單一的,那麼1個重影會被封鎖,或者你只是錯誤地計算了合法的移動。 – 2015-03-09 18:22:21