Advertisement
jbn6972

Untitled

Jun 29th, 2022
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.24 KB | None | 0 0
  1. class Graph:
  2.     def __init__(self, graph, heuristicNodeList, startNode):
  3.         self.graph = graph
  4.         self.H=heuristicNodeList
  5.         self.start=startNode
  6.         self.parent={}
  7.         self.status={}
  8.         self.solutionGraph={}
  9.        
  10.     def applyAOStar(self):
  11.         self.aoStar(self.start, False)
  12.  
  13.     def getNeighbors(self, v):
  14.         return self.graph.get(v,'')
  15.  
  16.     def getStatus(self,v):
  17.         return self.status.get(v,0)
  18.  
  19.     def setStatus(self,v, val):
  20.         self.status[v]=val
  21.  
  22.     def getHeuristicNodeValue(self, n):
  23.         return self.H.get(n,0)
  24.  
  25.     def setHeuristicNodeValue(self, n, value):
  26.         self.H[n]=value
  27.  
  28.     def printSolution(self):
  29.         print("FOR GRAPH SOLUTION, TRAVERSE THE GRAPH FROM THE START NODE:",self.start)
  30.         print("------------------------------------------------------------")
  31.         print(self.solutionGraph)
  32.         print("------------------------------------------------------------")
  33.  
  34.     def computeMinimumCostChildNodes(self, v):
  35.         minimumCost=0
  36.         costToChildNodeListDict={}
  37.         costToChildNodeListDict[minimumCost]=[]
  38.         flag=True
  39.         for nodeInfoTupleList in self.getNeighbors(v):
  40.             cost=0
  41.             nodeList=[]
  42.             for c, weight in nodeInfoTupleList:
  43.                 cost=cost+self.getHeuristicNodeValue(c)+weight
  44.                 nodeList.append(c)
  45.             if flag==True:
  46.                 minimumCost=cost
  47.                 costToChildNodeListDict[minimumCost]=nodeList
  48.                 flag=False
  49.             else:
  50.                 if minimumCost>cost:
  51.                     minimumCost=cost
  52.                     costToChildNodeListDict[minimumCost]=nodeList
  53.         return minimumCost, costToChildNodeListDict[minimumCost]
  54.  
  55.     def aoStar(self, v, backTracking):
  56.         print("HEURISTIC VALUES :", self.H)
  57.         print("SOLUTION GRAPH :", self.solutionGraph)
  58.         print("PROCESSING NODE :", v)
  59.         print("-----------------------------------------------------------------------------------------")
  60.         if self.getStatus(v) >= 0:
  61.             minimumCost, childNodeList = self.computeMinimumCostChildNodes(v)
  62.             print(minimumCost, childNodeList)
  63.             self.setHeuristicNodeValue(v, minimumCost)
  64.             self.setStatus(v,len(childNodeList))
  65.             solved=True
  66.             for childNode in childNodeList:
  67.                 self.parent[childNode]=v
  68.                 if self.getStatus(childNode)!=-1:
  69.                     solved=solved & False
  70.             if solved==True:
  71.                 self.setStatus(v,-1)
  72.                 self.solutionGraph[v]=childNodeList
  73.             if v!=self.start:
  74.                 self.aoStar(self.parent[v], True)
  75.             if backTracking==False:  
  76.                 for childNode in childNodeList:
  77.                     self.setStatus(childNode,0)
  78.                     self.aoStar(childNode, False)
  79.  
  80. print ("Graph - 1")
  81. h1 = {'A': 1, 'B': 6, 'C': 2, 'D': 12, 'E': 2, 'F': 1, 'G': 5, 'H': 7, 'I': 7, 'J': 1}
  82. graph1 = {
  83.     'A': [[('B', 1), ('C', 1)], [('D', 1)]],
  84.     'B': [[('G', 1)], [('H', 1)]],
  85.     'C': [[('J', 1)]],
  86.     'D': [[('E', 1), ('F', 1)]],
  87.     'G': [[('I', 1)]]
  88. }
  89.  
  90. G1= Graph(graph1, h1, 'A')
  91. G1.applyAOStar()
  92. G1.printSolution()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement