SHARE
TWEET

Untitled

a guest Nov 14th, 2019 109 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top