Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.96 KB | None | 0 0
  1. class PushForward extends VRPTWNodesLinkedList {
  2. /**
  3. *
  4. * @param currNodeLL This represents the current route the shipment
  5. * will be assigned to
  6. *
  7. * @param theShipment This represents the shipment to be inserted
  8. *
  9. * @author Cain, House, Case
  10. */
  11. public boolean getInsertShipment(VRPTWNodesLinkedList currNodeLL,VRPTWShipment theShipment)
  12. {
  13. //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithEarliestDeadline());
  14. //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithFurthestDistanceFromDepot());
  15. //VRPTWProblemInfo.setSelectShipType(new SmallestPolarAngleToDepot());
  16. VRPTWNodes tmpPtr;
  17. VRPTWNodes cellToInsert = new VRPTWNodes(theShipment);
  18. float holdCost = 0;
  19. float holdVal = 0;
  20.  
  21. //VRPTWNodes costOfNew = null;
  22.  
  23.  
  24. if (currNodeLL.getHead().getNext() == currNodeLL.getTail())
  25. {
  26.  
  27. holdCost = 0;
  28. currNodeLL.setHeadNext(cellToInsert);
  29. currNodeLL.getTail().setPrev(cellToInsert);
  30. cellToInsert.setPrev(currNodeLL.getHead());
  31. cellToInsert.setNext(currNodeLL.getTail());
  32.  
  33. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  34. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  35.  
  36.  
  37. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  38. {
  39. holdCost = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  40. }
  41.  
  42. holdCost += cellToInsert.getShipment().getTravelTime() - cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
  43. holdCost = Math.abs(cellToInsert.getShipment().getLateTime() - holdCost);
  44. cellToInsert.getShipment().setPushForward(holdCost);
  45.  
  46. //System.out.println(cellToInsert.getShipment().getActualArrivalTime() + " arrival");
  47. //System.out.println(cellToInsert.getShipment().getTravelTime() + " travel");
  48.  
  49. }
  50. else
  51. {
  52. //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithEarliestDeadline());
  53. //VRPTWProblemInfo.setSelectShipType(new SmallestPolarAngleToDepot());
  54. //VRPTWNodes firstShipmentNode = (VRPTWNodes) currNodeLL.getHead().getNext();
  55. VRPTWNodes prevCell = (VRPTWNodes) currNodeLL.getHead();
  56. VRPTWNodes nextCell = (VRPTWNodes) currNodeLL.getHead().getNext();
  57. VRPTWNodes returnCell = null;
  58. VRPTWNodes tempCell = null;
  59. //double cost = Double.MAX_VALUE;
  60. float holdCost1 = 0.0f;
  61. double minValue = 0.0;
  62. //double holdLateTime = 0.0;
  63. float holdVal1 = 0;
  64. boolean myCheck = false;
  65. float tempVal = 0;
  66.  
  67.  
  68. while(nextCell != null)
  69. {
  70. holdCost1 = 0;
  71. prevCell.setNext(cellToInsert);
  72. cellToInsert.setPrev(prevCell);
  73. cellToInsert.setNext(nextCell);
  74. nextCell.setPrev(cellToInsert);
  75.  
  76. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  77. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  78.  
  79. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  80. {
  81. //System.out.println(cellToInsert.getShipment().getEarlyTime() + " " + cellToInsert.getShipment().getActualArrivalTime());
  82. holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  83. }
  84.  
  85. //holdCost1 += cellToInsert.getShipment().getTravelTime();
  86. holdCost1 += cellToInsert.getShipment().getTravelTime() - cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
  87. holdCost1 = Math.abs(cellToInsert.getShipment().getLateTime() - holdCost1);
  88. cellToInsert.getShipment().setPushForward(holdCost1);
  89. //System.out.println(cellToInsert.getShipment().getEarlyTime() + " early " + cellToInsert.getShipment().getLateTime() + " late " + cellToInsert.getShipment().getActualArrivalTime() + " actual " + cellToInsert.getShipment().getTravelTime() + " travel " + cellToInsert.getShipment().getPushForward() + " push");
  90.  
  91.  
  92.  
  93.  
  94. if (nextCell.getNext() == null)
  95. {
  96. if (cellToInsert.getShipment().getLateTime() < cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime())
  97. {
  98. prevCell.setNext(nextCell);
  99. nextCell.setPrev(prevCell);
  100. cellToInsert.setNext(null);
  101. cellToInsert.setPrev(null);
  102. //cellToInsert.getShipment().setTravelTime(0.0f);
  103.  
  104. return false;
  105. }
  106. else
  107. {
  108. returnCell = prevCell;
  109.  
  110. prevCell.setNext(nextCell);
  111. nextCell.setPrev(prevCell);
  112. cellToInsert.setNext(null);
  113. cellToInsert.setPrev(null);
  114.  
  115. break;
  116. }
  117. }
  118.  
  119. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  120. {
  121. tempVal = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  122. }
  123.  
  124. tempCell = nextCell;
  125. tempVal = (float) (tempCell.getShipment().getEarlyTime() - (cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime() + tempVal));
  126.  
  127. while (tempCell != currNodeLL.getTail())
  128. {
  129. tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() - tempVal);
  130.  
  131. tempCell = (VRPTWNodes) tempCell.getNext();
  132. }
  133.  
  134.  
  135.  
  136. if (cellToInsert.getShipment().getLateTime() < cellToInsert.getShipment().getPushForward())
  137. {
  138. tempCell = nextCell;
  139.  
  140.  
  141. while (tempCell != currNodeLL.getTail())
  142. {
  143. tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() + tempVal);
  144.  
  145. tempCell = (VRPTWNodes) tempCell.getNext();
  146. }
  147.  
  148. prevCell.setNext(nextCell);
  149. nextCell.setPrev(prevCell);
  150. cellToInsert.setNext(null);
  151. cellToInsert.setPrev(null);
  152. //cellToInsert.getShipment().setTravelTime(0.0f);
  153.  
  154. return false;
  155. }
  156.  
  157. tempCell = nextCell;
  158. minValue = Double.MAX_VALUE;
  159.  
  160. while(tempCell != currNodeLL.getTail())
  161. {
  162.  
  163. if(tempCell.getShipment().getPushForward() < minValue)
  164. {
  165. minValue = tempCell.getShipment().getPushForward();
  166. }
  167.  
  168. tempCell = (VRPTWNodes) tempCell.getNext();
  169.  
  170. }
  171.  
  172. if (cellToInsert.getShipment().getPushForward() < minValue)
  173. {
  174. returnCell = prevCell;
  175.  
  176. System.out.println("PRINTED");
  177.  
  178. prevCell.setNext(nextCell);
  179. nextCell.setPrev(prevCell);
  180. cellToInsert.setNext(null);
  181. cellToInsert.setPrev(null);
  182.  
  183. break;
  184. }
  185.  
  186. tempCell = nextCell;
  187.  
  188.  
  189. while (tempCell != currNodeLL.getTail())
  190. {
  191. tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() + tempVal);
  192.  
  193. tempCell = (VRPTWNodes) tempCell.getNext();
  194. }
  195.  
  196. prevCell.setNext(nextCell);
  197. nextCell.setPrev(prevCell);
  198. cellToInsert.setNext(null);
  199. cellToInsert.setPrev(null);
  200.  
  201. prevCell = nextCell;
  202. nextCell = (VRPTWNodes) prevCell.getNext();
  203. }
  204.  
  205.  
  206.  
  207. if(returnCell != null)
  208. {
  209.  
  210. prevCell = returnCell;
  211. nextCell = (VRPTWNodes) prevCell.getNext();
  212.  
  213. prevCell.setNext(cellToInsert);
  214. cellToInsert.setPrev(prevCell);
  215. cellToInsert.setNext(nextCell);
  216. nextCell.setPrev(cellToInsert);
  217.  
  218. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  219. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  220.  
  221. /*if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  222. {
  223. holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  224. }
  225.  
  226. holdCost += cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
  227. holdCost -= cellToInsert.getShipment().getLateTime();
  228. cellToInsert.setPushForward(holdCost);*/
  229.  
  230.  
  231. }
  232. else
  233. {
  234. return false;
  235. }
  236.  
  237.  
  238. }
  239.  
  240.  
  241.  
  242. theShipment.setIsAssigned(true);
  243. theShipment.setAssignedRoute(currNodeLL);
  244. VRPTWProblemInfo.nodesLLLevelCostF.calculateTotalsStats(currNodeLL);
  245.  
  246. {
  247. System.out.println("Route is:");
  248. VRPTWNodes tempPtr = (VRPTWNodes) currNodeLL.getHead();
  249. while (tempPtr != (VRPTWNodes) currNodeLL.getTail()) {
  250. System.out.print(tempPtr.getIndex() + "(" + tempPtr.getDemand()
  251. + ")-");
  252. tempPtr = (VRPTWNodes) tempPtr.getNext();
  253. }
  254. System.out.println();
  255. }
  256.  
  257.  
  258. return true;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement