Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.33 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.  
  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().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 = true;
  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().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. tempCell = nextCell;
  92. minValue = Double.MAX_VALUE;
  93.  
  94. System.out.println(nextCell.getNext());
  95.  
  96. if (nextCell.getNext() == null)
  97. {
  98. if (cellToInsert.getShipment().getLateTime() < cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime())
  99. {
  100. prevCell.setNext(nextCell);
  101. nextCell.setPrev(prevCell);
  102. cellToInsert.setNext(null);
  103. cellToInsert.setPrev(null);
  104. //cellToInsert.getShipment().setTravelTime(0.0f);
  105.  
  106. return false;
  107. }
  108. else
  109. {
  110. returnCell = prevCell;
  111.  
  112. prevCell.setNext(nextCell);
  113. nextCell.setPrev(prevCell);
  114. cellToInsert.setNext(null);
  115. cellToInsert.setPrev(null);
  116.  
  117. break;
  118. }
  119. }
  120.  
  121. if (cellToInsert.getShipment().getLateTime() < cellToInsert.getShipment().getPushForward())
  122. {
  123. prevCell.setNext(nextCell);
  124. nextCell.setPrev(prevCell);
  125. cellToInsert.setNext(null);
  126. cellToInsert.setPrev(null);
  127. //cellToInsert.getShipment().setTravelTime(0.0f);
  128.  
  129. return false;
  130. }
  131.  
  132. while(tempCell != currNodeLL.getTail())
  133. {
  134. if(tempCell.getShipment().getPushForward() < minValue)
  135. {
  136. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  137. {
  138. //System.out.println(cellToInsert.getShipment().getEarlyTime() + " " + cellToInsert.getShipment().getActualArrivalTime());
  139. holdVal = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  140. }
  141.  
  142. tempCell.getShipment().setPushForward((float) (tempCell.getShipment().getPushForward() + holdVal + (tempCell.getShipment().getEarlyTime() - (cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime()))));
  143.  
  144. minValue = tempCell.getShipment().getPushForward();
  145. }
  146.  
  147. tempCell = (VRPTWNodes) tempCell.getNext();
  148.  
  149. }
  150.  
  151. if (cellToInsert.getShipment().getPushForward() < minValue)
  152. {
  153. returnCell = prevCell;
  154. tempCell = nextCell;
  155.  
  156.  
  157. while(tempCell != currNodeLL.getTail())
  158. {
  159.  
  160. tempCell.getShipment().setPushForward(cellToInsert.getShipment().getPushForward());
  161.  
  162. tempCell = (VRPTWNodes) tempCell.getNext();
  163. }
  164. System.out.println("PRINTED");
  165.  
  166. tempCell.getShipment().setPushForward((float) (tempCell.getShipment().getPushForward() - holdVal - (tempCell.getShipment().getEarlyTime() + (cellToInsert.getShipment().getActualArrivalTime() - cellToInsert.getShipment().getServiceTime()))));
  167.  
  168.  
  169. prevCell.setNext(nextCell);
  170. nextCell.setPrev(prevCell);
  171. cellToInsert.setNext(null);
  172. cellToInsert.setPrev(null);
  173.  
  174. break;
  175. }
  176.  
  177.  
  178. //nextCell = returnCell;
  179.  
  180. tempCell = nextCell;
  181.  
  182. while(tempCell != currNodeLL.getTail())
  183. {
  184. if(tempCell.getShipment().getPushForward() < minValue)
  185. {
  186.  
  187. minValue = tempCell.getShipment().getPushForward();
  188. }
  189.  
  190. tempCell = (VRPTWNodes) tempCell.getNext();
  191.  
  192. }
  193. tempCell.getShipment().setPushForward((float) (tempCell.getShipment().getPushForward() - holdVal - (tempCell.getShipment().getEarlyTime() + (cellToInsert.getShipment().getActualArrivalTime() - cellToInsert.getShipment().getServiceTime()))));
  194.  
  195. prevCell.setNext(nextCell);
  196. nextCell.setPrev(prevCell);
  197. cellToInsert.setNext(null);
  198. cellToInsert.setPrev(null);
  199.  
  200. prevCell = nextCell;
  201. nextCell = (VRPTWNodes) prevCell.getNext();
  202. }
  203.  
  204.  
  205.  
  206. if(returnCell != null)
  207. {
  208.  
  209. prevCell = returnCell;
  210. nextCell = (VRPTWNodes) prevCell.getNext();
  211.  
  212. prevCell.setNext(cellToInsert);
  213. cellToInsert.setPrev(prevCell);
  214. cellToInsert.setNext(nextCell);
  215. nextCell.setPrev(cellToInsert);
  216.  
  217. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  218. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  219.  
  220. /*if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  221. {
  222. holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  223. }
  224.  
  225. holdCost += cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
  226. holdCost -= cellToInsert.getShipment().getLateTime();
  227. cellToInsert.setPushForward(holdCost);*/
  228.  
  229.  
  230. }
  231. else
  232. {
  233.  
  234. return false;
  235. }
  236. }
  237.  
  238.  
  239.  
  240. theShipment.setIsAssigned(true);
  241. theShipment.setAssignedRoute(currNodeLL);
  242. VRPTWProblemInfo.nodesLLLevelCostF.calculateTotalsStats(currNodeLL);
  243.  
  244. {
  245. System.out.println("Route is:");
  246. VRPTWNodes tempPtr = (VRPTWNodes) currNodeLL.getHead();
  247. while (tempPtr != (VRPTWNodes) currNodeLL.getTail()) {
  248. System.out.print(tempPtr.getIndex() + "(" + tempPtr.getDemand()
  249. + ")-");
  250. tempPtr = (VRPTWNodes) tempPtr.getNext();
  251. }
  252. System.out.println();
  253. }
  254.  
  255.  
  256. return true;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement