Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.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 and House
  10. */
  11. public boolean getInsertShipment(VRPTWNodesLinkedList currNodeLL,VRPTWShipment theShipment)
  12. {
  13. //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithFurthestDistanceFromDepot());
  14. VRPTWNodes tmpPtr;
  15. VRPTWNodes cellToInsert = new VRPTWNodes(theShipment);
  16. VRPTWNodesLLCostFunctions routeCheck = new VRPTWNodesLLCostFunctions();
  17. float holdCost = 0;
  18. double holdVal = 0;
  19.  
  20. //VRPTWNodes costOfNew = null;
  21.  
  22.  
  23. if (currNodeLL.getHead().getNext() == currNodeLL.getTail())
  24. {
  25.  
  26. currNodeLL.setHeadNext(cellToInsert);
  27. currNodeLL.getTail().setPrev(cellToInsert);
  28. cellToInsert.setPrev(currNodeLL.getHead());
  29. cellToInsert.setNext(currNodeLL.getTail());
  30.  
  31. if (!currNodeLL.getFeasibility().isFeasible()) {
  32. //remove the inserted node
  33. tmpPtr = (VRPTWNodes) currNodeLL.getHead().getNext();
  34. tmpPtr.setNext(null);
  35. tmpPtr.setPrev(null);
  36.  
  37. //point the head and tail to each other
  38. currNodeLL.setHeadNext(currNodeLL.getTail());
  39. currNodeLL.getTail().setPrev(currNodeLL.getHead());
  40.  
  41. //print out current route
  42. /*{
  43. System.out.println("Printing Undo VRPNodesLinkedList");
  44. VRPNodes tempPtr= (VRPNodes)currNodeLL.getHead();
  45. while (tempPtr != (VRPNodes)currNodeLL.getTail())
  46. {
  47. System.out.println("Node number and Demand is:"+tempPtr.getIndex()+" "+tempPtr.getDemand());
  48. tempPtr = tempPtr.getVRPNext();
  49. }
  50. System.out.println("Done Printing");
  51. }*/
  52.  
  53. return false;
  54. }
  55.  
  56.  
  57. }
  58. else
  59. {
  60. //VRPTWProblemInfo.setSelectShipType(new SmallestPolarAngleToDepot());
  61. //VRPTWNodes firstShipmentNode = (VRPTWNodes) currNodeLL.getHead().getNext();
  62. VRPTWNodes prevCell = (VRPTWNodes) currNodeLL.getHead();
  63. VRPTWNodes nextCell = (VRPTWNodes) currNodeLL.getHead().getNext();
  64. VRPTWNodes returnCell = null;
  65. VRPTWNodes tempCell = null;
  66. //double cost = Double.MAX_VALUE;
  67. float holdCost1 = 0.0f;
  68. double minValue = 0.0;
  69. //double holdLateTime = 0.0;
  70. float waitTime1 = 0;
  71. boolean myCheck = true;
  72. double d1 = 0, d2 = 0, d3 = 0;
  73. double finalPush = 0;
  74.  
  75.  
  76.  
  77.  
  78. while(nextCell != null)
  79. {
  80. holdCost1 = 0;
  81. prevCell.setNext(cellToInsert);
  82. cellToInsert.setPrev(prevCell);
  83. cellToInsert.setNext(nextCell);
  84. nextCell.setPrev(cellToInsert);
  85.  
  86. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  87. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  88.  
  89.  
  90. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  91. {
  92. holdCost1 = cellToInsert.getShipment().getEarlyTime();
  93. }
  94. else
  95. {
  96. holdCost1 = (float) (cellToInsert.getShipment().getActualArrivalTime());
  97. }
  98.  
  99.  
  100. if (cellToInsert.getShipment().getLateTime() < holdCost1)
  101. {
  102. cellToInsert.getShipment().setPushForward(0);
  103. }
  104. else
  105. {
  106. holdCost1 = cellToInsert.getShipment().getLateTime() - holdCost1;
  107. cellToInsert.getShipment().setPushForward(holdCost1);
  108. }
  109.  
  110. //System.out.println(cellToInsert.getShipment().getEarlyTime() + " early " + cellToInsert.getShipment().getLateTime() + " late " + cellToInsert.getShipment().getActualArrivalTime() + " actual " + cellToInsert.getShipment().getTravelTime() + " travel " + cellToInsert.getShipment().getPushForward() + " push");
  111.  
  112. if (nextCell.getNext() == null)
  113. {
  114.  
  115. if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  116. {
  117. holdVal = cellToInsert.getShipment().getEarlyTime();
  118. }
  119. else
  120. {
  121. holdVal = (float) (cellToInsert.getShipment().getActualArrivalTime());
  122. }
  123.  
  124. if (cellToInsert.getShipment().getLateTime() < holdVal)
  125. {
  126.  
  127. prevCell.setNext(nextCell);
  128. nextCell.setPrev(prevCell);
  129. cellToInsert.setNext(null);
  130. cellToInsert.setPrev(null);
  131. //cellToInsert.getShipment().setTravelTime(0.0f);
  132.  
  133. return false;
  134. }
  135. else
  136. {
  137.  
  138. returnCell = prevCell;
  139.  
  140. prevCell.setNext(nextCell);
  141. nextCell.setPrev(prevCell);
  142. cellToInsert.setNext(null);
  143. cellToInsert.setPrev(null);
  144.  
  145. break;
  146. }
  147. }
  148.  
  149.  
  150.  
  151. d1 = 0;
  152. d2 = 0;
  153. d3 = 0;
  154. holdVal = 0;
  155.  
  156. if (nextCell.getShipment().getEarlyTime() > nextCell.getShipment().getActualArrivalTime())
  157. {
  158. d1 = nextCell.getShipment().getEarlyTime();
  159. d1 = d1 - prevCell.getShipment().getServiceTime();
  160.  
  161. }
  162. else
  163. {
  164. d1 = nextCell.getShipment().getActualArrivalTime();
  165.  
  166. }
  167.  
  168. if (prevCell.getShipment().getEarlyTime() > prevCell.getShipment().getActualArrivalTime())
  169. {
  170. holdVal = prevCell.getShipment().getEarlyTime();
  171. }
  172. else
  173. {
  174. holdVal = prevCell.getShipment().getActualArrivalTime();
  175.  
  176. }
  177.  
  178. d1 = Math.abs(d1 - holdVal);
  179.  
  180. if (cellToInsert.getShipment().getEarlyTime() > cellToInsert.getShipment().getActualArrivalTime())
  181. {
  182. d2 = cellToInsert.getShipment().getEarlyTime() - prevCell.getShipment().getServiceTime();
  183.  
  184. }
  185. else
  186. {
  187. d2 = cellToInsert.getShipment().getActualArrivalTime();
  188.  
  189. }
  190.  
  191. if (prevCell.getShipment().getEarlyTime() > prevCell.getShipment().getActualArrivalTime())
  192. {
  193. holdVal = prevCell.getShipment().getEarlyTime();
  194.  
  195. }
  196. else
  197. {
  198. holdVal = prevCell.getShipment().getActualArrivalTime();
  199.  
  200. }
  201.  
  202.  
  203. d2 = Math.abs(d2 - holdVal);
  204.  
  205.  
  206. if (nextCell.getShipment().getEarlyTime() > nextCell.getShipment().getActualArrivalTime())
  207. {
  208. d3 = nextCell.getShipment().getEarlyTime() - cellToInsert.getShipment().getServiceTime();
  209.  
  210. }
  211. else
  212. {
  213. d3 = nextCell.getShipment().getActualArrivalTime();
  214.  
  215. }
  216. if (cellToInsert.getShipment().getEarlyTime() > cellToInsert.getShipment().getActualArrivalTime())
  217. {
  218. holdVal = cellToInsert.getShipment().getEarlyTime();
  219.  
  220. }
  221. else
  222. {
  223. holdVal = cellToInsert.getShipment().getActualArrivalTime();
  224.  
  225. }
  226.  
  227. d3 = Math.abs(d3 - holdVal);
  228.  
  229. finalPush = d2 + d3 - d1;
  230.  
  231.  
  232.  
  233.  
  234.  
  235. tempCell = nextCell;
  236. minValue = Double.MAX_VALUE;
  237.  
  238. if (currNodeLL.getFeasibility().isFeasible())
  239. {
  240.  
  241. while(tempCell != currNodeLL.getTail())
  242. {
  243. if(tempCell.getShipment().getPushForward() < minValue)
  244. {
  245.  
  246. minValue = tempCell.getShipment().getPushForward();
  247. }
  248.  
  249. tempCell = (VRPTWNodes) tempCell.getNext();
  250.  
  251. }
  252.  
  253. if (finalPush < minValue && minValue > 0)
  254. {
  255. returnCell = prevCell;
  256. System.out.println("PRINTED");
  257.  
  258. tempCell = cellToInsert;
  259.  
  260. while(tempCell != currNodeLL.getTail())
  261. {
  262. tempCell.getShipment().setPushForward(finalPush);
  263.  
  264. tempCell = (VRPTWNodes) tempCell.getNext();
  265. }
  266. }
  267.  
  268. prevCell.setNext(nextCell);
  269. nextCell.setPrev(prevCell);
  270. cellToInsert.setNext(null);
  271. cellToInsert.setPrev(null);
  272.  
  273. break;
  274. }
  275.  
  276.  
  277. //nextCell = returnCell;
  278.  
  279. prevCell.setNext(nextCell);
  280. nextCell.setPrev(prevCell);
  281. cellToInsert.setNext(null);
  282. cellToInsert.setPrev(null);
  283.  
  284. prevCell = nextCell;
  285. nextCell = (VRPTWNodes) prevCell.getNext();
  286. }
  287.  
  288.  
  289.  
  290. if(returnCell != null)
  291. {
  292.  
  293. prevCell = returnCell;
  294. nextCell = (VRPTWNodes) prevCell.getNext();
  295.  
  296. prevCell.setNext(cellToInsert);
  297. cellToInsert.setPrev(prevCell);
  298. cellToInsert.setNext(nextCell);
  299. nextCell.setPrev(cellToInsert);
  300.  
  301. cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
  302. cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
  303.  
  304.  
  305.  
  306. /*if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
  307. {
  308. holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
  309. }
  310.  
  311. holdCost1 += cellToInsert.getShipment().getTravelTime();
  312. holdCost1 = cellToInsert.getShipment().getLateTime() - holdCost1;
  313. cellToInsert.getShipment().setPushForward(holdCost);*/
  314.  
  315.  
  316. }
  317. else
  318. {
  319.  
  320. return false;
  321. }
  322. }
  323.  
  324.  
  325.  
  326. theShipment.setIsAssigned(true);
  327. theShipment.setAssignedRoute(currNodeLL);
  328. VRPTWProblemInfo.nodesLLLevelCostF.calculateTotalsStats(currNodeLL);
  329.  
  330. {
  331. System.out.println("Route is:");
  332. VRPTWNodes tempPtr = (VRPTWNodes) currNodeLL.getHead();
  333. while (tempPtr != (VRPTWNodes) currNodeLL.getTail()) {
  334. System.out.print(tempPtr.getIndex() + "(" + tempPtr.getDemand()
  335. + ")-");
  336. tempPtr = (VRPTWNodes) tempPtr.getNext();
  337. }
  338. System.out.println();
  339. }
  340.  
  341.  
  342. return true;
  343. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement