Advertisement
Guest User

Untitled

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