Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class PushForward extends VRPTWNodesLinkedList {
- /**
- *
- * @param currNodeLL This represents the current route the shipment
- * will be assigned to
- *
- * @param theShipment This represents the shipment to be inserted
- *
- * @author Cain and House
- */
- public boolean getInsertShipment(VRPTWNodesLinkedList currNodeLL,VRPTWShipment theShipment)
- {
- VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithFurthestDistanceFromDepot());
- VRPTWNodes tmpPtr;
- VRPTWNodes cellToInsert = new VRPTWNodes(theShipment);
- float holdCost = 0;
- float holdVal = 0;
- //VRPTWNodes costOfNew = null;
- if (currNodeLL.getHead().getNext() == currNodeLL.getTail())
- {
- currNodeLL.setHeadNext(cellToInsert);
- currNodeLL.getTail().setPrev(cellToInsert);
- cellToInsert.setPrev(currNodeLL.getHead());
- cellToInsert.setNext(currNodeLL.getTail());
- cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
- cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
- if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- holdCost = cellToInsert.getShipment().getEarlyTime();
- }
- else
- {
- holdCost += (cellToInsert.getShipment().getActualArrivalTime());
- }
- if (cellToInsert.getShipment().getLateTime() < holdCost)
- {
- cellToInsert.getShipment().setPushForward(0);
- }
- else
- {
- holdCost = cellToInsert.getShipment().getLateTime() - holdCost;
- cellToInsert.getShipment().setPushForward(holdCost);
- }
- //System.out.println(cellToInsert.getShipment().getActualArrivalTime() + " arrival");
- //System.out.println(cellToInsert.getShipment().getTravelTime() + " travel");
- }
- else
- {
- VRPTWProblemInfo.setSelectShipType(new SmallestPolarAngleToDepot());
- //VRPTWNodes firstShipmentNode = (VRPTWNodes) currNodeLL.getHead().getNext();
- VRPTWNodes prevCell = (VRPTWNodes) currNodeLL.getHead();
- VRPTWNodes nextCell = (VRPTWNodes) currNodeLL.getHead().getNext();
- VRPTWNodes returnCell = null;
- VRPTWNodes tempCell = null;
- //double cost = Double.MAX_VALUE;
- float holdCost1 = 0.0f;
- double minValue = 0.0;
- //double holdLateTime = 0.0;
- float waitTime1 = 0;
- boolean myCheck = true;
- int d1 = 0, d2 = 0, d3 = 0;
- int finalPush = 0;
- String Cain = "gay";
- while(nextCell != null)
- {
- holdCost1 = 0;
- prevCell.setNext(cellToInsert);
- cellToInsert.setPrev(prevCell);
- cellToInsert.setNext(nextCell);
- nextCell.setPrev(cellToInsert);
- cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
- cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
- System.out.println(cellToInsert.getShipment().getActualArrivalTime() + " actual");
- System.out.println(cellToInsert.getShipment().getEarlyTime() + " early");
- System.out.println(cellToInsert.getShipment().getTravelTime() + " travel");
- System.out.println(cellToInsert.getShipment().getLateTime() + " late");
- if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- holdCost1 = cellToInsert.getShipment().getEarlyTime();
- }
- else
- {
- holdCost1 += (cellToInsert.getShipment().getActualArrivalTime());
- }
- if (cellToInsert.getShipment().getLateTime() < holdCost1)
- {
- cellToInsert.getShipment().setPushForward(0);
- }
- else
- {
- holdCost1 = cellToInsert.getShipment().getLateTime() - holdCost1;
- cellToInsert.getShipment().setPushForward(holdCost1);
- }
- //System.out.println(cellToInsert.getShipment().getEarlyTime() + " early " + cellToInsert.getShipment().getLateTime() + " late " + cellToInsert.getShipment().getActualArrivalTime() + " actual " + cellToInsert.getShipment().getTravelTime() + " travel " + cellToInsert.getShipment().getPushForward() + " push");
- if (nextCell.getNext() == null)
- {
- if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- holdVal = cellToInsert.getShipment().getEarlyTime();
- }
- else
- {
- holdVal = (float) (cellToInsert.getShipment().getActualArrivalTime());
- }
- if (cellToInsert.getShipment().getLateTime() < holdVal)
- {
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- //cellToInsert.getShipment().setTravelTime(0.0f);
- return false;
- }
- else
- {
- returnCell = prevCell;
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- break;
- }
- }
- d1 = 0;
- d2 = 0;
- d3 = 0;
- holdVal = 0;
- //holdVal = (float) (Math.abs(nextCell.getShipment().getEarlyTime() - cellToInsert.getShipment().getTravelTime()));
- if (nextCell.getShipment().getEarlyTime() > nextCell.getShipment().getActualArrivalTime())
- {
- d1 = (int) (nextCell.getShipment().getEarlyTime());
- }
- else
- {
- d1 = (int) (nextCell.getShipment().getActualArrivalTime());
- }
- if (prevCell.getShipment().getEarlyTime() > prevCell.getShipment().getActualArrivalTime())
- {
- holdVal = (int) prevCell.getShipment().getEarlyTime() + prevCell.getShipment().getServiceTime();
- }
- else
- {
- holdVal = (int) prevCell.getShipment().getActualArrivalTime() + prevCell.getShipment().getServiceTime();
- }
- d1 = (int) (d1 - holdVal);
- if (cellToInsert.getShipment().getEarlyTime() > cellToInsert.getShipment().getActualArrivalTime())
- {
- d2 = (int) (cellToInsert.getShipment().getEarlyTime());
- }
- else
- {
- d2 = (int) (cellToInsert.getShipment().getActualArrivalTime());
- }
- if (prevCell.getShipment().getEarlyTime() > prevCell.getShipment().getActualArrivalTime())
- {
- holdVal = (int) prevCell.getShipment().getEarlyTime() + prevCell.getShipment().getServiceTime();
- }
- else
- {
- holdVal = (int) prevCell.getShipment().getActualArrivalTime() + prevCell.getShipment().getServiceTime();
- }
- d2 = (int) (d2 - holdVal);
- if (nextCell.getShipment().getEarlyTime() > nextCell.getShipment().getActualArrivalTime())
- {
- d3 = (int) (nextCell.getShipment().getEarlyTime());
- }
- else
- {
- d3 = (int) (nextCell.getShipment().getActualArrivalTime());
- }
- if (cellToInsert.getShipment().getEarlyTime() > cellToInsert.getShipment().getActualArrivalTime())
- {
- holdVal = (int) cellToInsert.getShipment().getEarlyTime() + prevCell.getShipment().getServiceTime();
- }
- else
- {
- holdVal = (int) cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
- }
- d3 = (int) (d3 - holdVal);
- finalPush = (int) (d2 + d3 - d1);
- tempCell = nextCell;
- minValue = Double.MAX_VALUE;
- while(tempCell != currNodeLL.getTail())
- {
- if(tempCell.getShipment().getPushForward() < minValue)
- {
- minValue = tempCell.getShipment().getPushForward();
- }
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- if (finalPush < minValue && minValue > 0)
- {
- returnCell = prevCell;
- System.out.println("PRINTED");
- tempCell = cellToInsert;
- while(tempCell != currNodeLL.getTail())
- {
- tempCell.getShipment().setPushForward(finalPush);
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- break;
- }
- //nextCell = returnCell;
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- prevCell = nextCell;
- nextCell = (VRPTWNodes) prevCell.getNext();
- }
- if(returnCell != null)
- {
- prevCell = returnCell;
- nextCell = (VRPTWNodes) prevCell.getNext();
- prevCell.setNext(cellToInsert);
- cellToInsert.setPrev(prevCell);
- cellToInsert.setNext(nextCell);
- nextCell.setPrev(cellToInsert);
- cellToInsert.getShipment().setActualArrivalTime((float)currNodeLL.setArrivalTime(currNodeLL));
- cellToInsert.getShipment().setTravelTime((float)currNodeLL.setDeliveryTime(currNodeLL));
- /*if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
- }
- holdCost1 += cellToInsert.getShipment().getTravelTime();
- holdCost1 = cellToInsert.getShipment().getLateTime() - holdCost1;
- cellToInsert.getShipment().setPushForward(holdCost);*/
- }
- else
- {
- return false;
- }
- }
- theShipment.setIsAssigned(true);
- theShipment.setAssignedRoute(currNodeLL);
- VRPTWProblemInfo.nodesLLLevelCostF.calculateTotalsStats(currNodeLL);
- {
- System.out.println("Route is:");
- VRPTWNodes tempPtr = (VRPTWNodes) currNodeLL.getHead();
- while (tempPtr != (VRPTWNodes) currNodeLL.getTail()) {
- System.out.print(tempPtr.getIndex() + "(" + tempPtr.getDemand()
- + ")-");
- tempPtr = (VRPTWNodes) tempPtr.getNext();
- }
- System.out.println();
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement