Advertisement
Guest User

Untitled

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