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, House, Case
- */
- public boolean getInsertShipment(VRPTWNodesLinkedList currNodeLL,VRPTWShipment theShipment)
- {
- //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithEarliestDeadline());
- //VRPTWProblemInfo.setSelectShipType(new UnroutedCustomerWithFurthestDistanceFromDepot());
- //VRPTWProblemInfo.setSelectShipType(new SmallestPolarAngleToDepot());
- VRPTWNodes tmpPtr;
- VRPTWNodes cellToInsert = new VRPTWNodes(theShipment);
- float holdCost = 0;
- float holdVal = 0;
- //VRPTWNodes costOfNew = null;
- if (currNodeLL.getHead().getNext() == currNodeLL.getTail())
- {
- holdCost = 0;
- 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 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
- }
- holdCost += cellToInsert.getShipment().getTravelTime() - cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
- holdCost = Math.abs(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 UnroutedCustomerWithEarliestDeadline());
- //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 holdVal1 = 0;
- boolean myCheck = false;
- float tempVal = 0;
- 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));
- if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- //System.out.println(cellToInsert.getShipment().getEarlyTime() + " " + cellToInsert.getShipment().getActualArrivalTime());
- holdCost1 = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
- }
- //holdCost1 += cellToInsert.getShipment().getTravelTime();
- holdCost1 += cellToInsert.getShipment().getTravelTime() - cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
- holdCost1 = Math.abs(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().getLateTime() < cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime())
- {
- 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;
- }
- }
- if (cellToInsert.getShipment().getActualArrivalTime() < cellToInsert.getShipment().getEarlyTime())
- {
- tempVal = (float) (cellToInsert.getShipment().getEarlyTime() - cellToInsert.getShipment().getActualArrivalTime());
- }
- tempCell = nextCell;
- tempVal = (float) (tempCell.getShipment().getEarlyTime() - (cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime() + tempVal));
- while (tempCell != currNodeLL.getTail())
- {
- tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() - tempVal);
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- if (cellToInsert.getShipment().getLateTime() < cellToInsert.getShipment().getPushForward())
- {
- tempCell = nextCell;
- while (tempCell != currNodeLL.getTail())
- {
- tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() + tempVal);
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- //cellToInsert.getShipment().setTravelTime(0.0f);
- return false;
- }
- tempCell = nextCell;
- minValue = Double.MAX_VALUE;
- while(tempCell != currNodeLL.getTail())
- {
- if(tempCell.getShipment().getPushForward() < minValue)
- {
- minValue = tempCell.getShipment().getPushForward();
- }
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- if (cellToInsert.getShipment().getPushForward() < minValue)
- {
- returnCell = prevCell;
- System.out.println("PRINTED");
- prevCell.setNext(nextCell);
- nextCell.setPrev(prevCell);
- cellToInsert.setNext(null);
- cellToInsert.setPrev(null);
- break;
- }
- tempCell = nextCell;
- while (tempCell != currNodeLL.getTail())
- {
- tempCell.getShipment().setPushForward(tempCell.getShipment().getPushForward() + tempVal);
- tempCell = (VRPTWNodes) tempCell.getNext();
- }
- 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());
- }
- holdCost += cellToInsert.getShipment().getActualArrivalTime() + cellToInsert.getShipment().getServiceTime();
- holdCost -= cellToInsert.getShipment().getLateTime();
- cellToInsert.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