Advertisement
Guest User

Untitled

a guest
May 6th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import java.util.PriorityQueue;
  7. import java.util.Queue;
  8.  
  9. public class Searcher {
  10. private Queue<State> openSet;
  11. private List<State> closedSet;
  12.  
  13. public Searcher(){
  14. this.openSet = new PriorityQueue<State>(10, new Comparator<State>(){
  15.  
  16. @Override
  17. public int compare(State o1, State o2){
  18. if (o1.getDistance() < o2.getDistance()){
  19. return -1;
  20. } if (o1.getDistance() > o2.getDistance()){
  21. return 1;
  22. } else {
  23. return 0;
  24. }
  25. }
  26. });
  27.  
  28. this.closedSet = new LinkedList<State>();
  29. }
  30.  
  31. public void aStarSearch(Goal goal, Graph g){
  32. int totalCost = 0;
  33. int nodesExpanded = 0;
  34.  
  35. State prevTrip = null;
  36.  
  37. State start = new State("London", 0);
  38. openSet.add(start);
  39.  
  40.  
  41. while (!openSet.isEmpty()){
  42. prevTrip = openSet.poll();
  43. closedSet.add(prevTrip);
  44. nodesExpanded++;
  45. checkNeighbour(prevTrip, g);
  46. goal.setGoalReached(checkGoalReached(goal, closedSet.get(closedSet.size()-1)));
  47.  
  48. if (goal.getGoalReached() == true){
  49. totalCost = closedSet.get(closedSet.size()-1).getDistance() + getTransferTime(g, closedSet.get(closedSet.size()-1));
  50. break;
  51. }
  52. System.out.println(closedSet.get(closedSet.size()-1).getCurrCity());
  53. System.out.println(closedSet.get(closedSet.size()-1).getDistance());
  54. }
  55. getPath(nodesExpanded, totalCost, closedSet.get(closedSet.size()-1));
  56. }
  57.  
  58. public boolean checkGoalReached(Goal g, State n){
  59. boolean goalReached = true;
  60. Iterator<GoalData> itr = g.getTripData().iterator();
  61.  
  62. while (itr.hasNext()){
  63. if (stateLooper(itr.next(), n)== false){
  64. goalReached = false;
  65. break;
  66. }
  67. }
  68.  
  69. return goalReached;
  70. }
  71.  
  72. public boolean stateLooper(GoalData g, State n){
  73. boolean check = false;
  74. Iterator<State> itrN = n.getPrevState().iterator();
  75.  
  76. while (itrN.hasNext()){
  77. if (itrN.next().getCurrCity().equals(g.from) && itrN.next().getCurrCity().equals(g.to)){
  78. check = true;
  79. }
  80. }
  81.  
  82. return check;
  83. }
  84.  
  85. public int getTransferTime(Graph g, State s){
  86. int transferCost = 0;
  87. int i = 1;
  88. while (i < s.getPrevState().size()){
  89. transferCost += g.getNode(s.getPrevState().get(i).getCurrCity()).getTransferTime();
  90. i++;
  91. }
  92. return transferCost;
  93. }
  94.  
  95. public void checkNeighbour(State curr, Graph g){
  96. State neighbours = null;
  97. Node currentCity = g.getNode(curr.getCurrCity());
  98. ArrayList<Edge> edges = currentCity.getEdges();
  99.  
  100. int i = 0;
  101. while (i < edges.size()){
  102. neighbours = new State(edges.get(i).getTo(), edges.get(i).getWeight() + curr.getDistance());
  103. neighbours.addPrevState(curr);
  104. openSet.add(neighbours);
  105. i++;
  106. }
  107. }
  108.  
  109. public void getPath(int nodesExpanded, int cost, State fullTrip){
  110. System.out.println(nodesExpanded + " nodes expanded");
  111. System.out.println("cost = " + cost);
  112. int i = 0;
  113. int j = 0;
  114. while (i < fullTrip.getPrevState().size()){
  115. j = i + 1;
  116. if (j >= fullTrip.getPrevState().size()){
  117. System.out.println("Trip " + fullTrip.getPrevState().get(i).getCurrCity() + " to " + fullTrip.getCurrCity());
  118. } else {
  119. System.out.println("Trip " + fullTrip.getPrevState().get(i).getCurrCity() + " to " + fullTrip.getPrevState().get(j).getCurrCity());
  120. }
  121. }
  122. }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement