Advertisement
Guest User

Untitled

a guest
Sep 24th, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.99 KB | None | 0 0
  1. /*
  2. Heath Logan Campbell
  3. hcam630
  4. */
  5. % six_cities(RoadNetwork) :-
  6. %   [
  7. %     (a, [(b, 5), (f, 6)]),
  8. %     (b, [(a, 5), (e, 1), (c, 4)]),
  9. %     (c, [(b, 4), (f, 9), (d, 2)]),
  10. %     (d, [(e, 3), (c, 2), (f, 7)]),
  11. %     (e, [(b, 1), (d, 2)]),
  12. %     (f, [(a, 6), (c, 6), (d, 7)])
  13. %   ] = RoadNetwork.
  14.  
  15.  
  16. % single_cities(SingleState) :-
  17. %   (c, [(b, 4), (f, 9), (d, 2)]) = SingleState.
  18.  
  19.  
  20. findEdges(Road, Parent, Edge) :-
  21.    member((EdgeNode, List) , Road),
  22.    member((Parent, Cost), List),
  23.    edge(EdgeNode, Cost) = Edge.
  24.  
  25. /*
  26. These function will return the smallest of the two
  27. minWeight(edge(a, 1), edge(b, 3), Min)
  28. */
  29. minWeight(EdgeOne, EdgeTwo, EdgeTwo) :-
  30.   edge(_, Cost) = EdgeOne,
  31.   edge(_, CurCheapestCost) = EdgeTwo,
  32.   Cost >= CurCheapestCost.
  33.  
  34. minWeight(EdgeOne, EdgeTwo, EdgeOne) :-
  35.   edge(_, Cost) = EdgeOne,
  36.   edge(_, CurCheapestCost) = EdgeTwo,
  37.   Cost < CurCheapestCost.
  38.  
  39. /*
  40. this function will return the smallest edge in a list
  41.  
  42. Example:
  43.   smallestWeight([edge(a, 1), edge(b, 2), edge(c, 3)], MinEdge).
  44. */
  45. smallestWeight([LastItem], LastItem).
  46.  
  47. smallestWeight([ H | T ], CheapestEdge) :-
  48.   smallestWeight(T, SubCheapestEdge),
  49.   minWeight(H, SubCheapestEdge, CheapestEdge).
  50.  
  51.  
  52. findSmallestInEdge(Road, Parent, EdgesList) :-
  53.   findall(X, (findEdges(Road, Parent, X)), EdgesList).
  54.  
  55. sumUpCost([ edge(Node, Cost) ], Cost).
  56.  
  57. sumUpCost( [ H | T ], Sum) :-
  58.   sumUpCost( T, SubSum),
  59.   edge(Node, Cost) = H,
  60.   Sum is Cost + SubSum.
  61.  
  62. h(state(_, []), _, 0).
  63. h(state(X, [X]), _, 0).
  64.  
  65. % h(state(a, [a]), [a, [(a, [(b, 5), (f, 6)]), (b, [(a, 5), (e, 1), (c, 4)]), (c, [(b, 4), (f, 9), (d, 2)]), (d, [(e, 3), (c, 2), (f, 7)]), (e, [(b, 1), (d, 2)]),(f, [(a, 6), (c, 9), (d, 7)])]], Result).
  66.  
  67. h(State, Action, HValue) :-
  68.   state(_, UnvisitedNodes) = State,
  69.   findall(CheapestNode, (
  70.     member(Parent, UnvisitedNodes),
  71.     findSmallestInEdge(Action, Parent, EdgeList),  
  72.     smallestWeight(EdgeList, CheapestNode))
  73.   , CheapestPaths),
  74.   sumUpCost(CheapestPaths, HValue).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement