/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.components.jsprit.solution; import java.util.ArrayList; import java.util.List; import com.opendoorlogistics.components.jsprit.RowWriter; import com.opendoorlogistics.components.jsprit.VRPBuilder.TravelCostType; import com.opendoorlogistics.components.jsprit.tabledefinitions.SolutionDetailsTableDfn; public class SolutionDetail { public long unassignedStops; public long routesCount; final public long [] capacityViolation; final public long [] deliveredQuantities; public long deliveriesCount; final public long [] pickedUpQuantities; public long pickupsCount; public long assignedStopsCount; public long hasViolation; public double time; public double timeWindowViolation=0; public double [] travelCosts = new double[TravelCostType.values().length]; public double waitingTime=0; public final List<RouteDetail> routes = new ArrayList<RouteDetail>(); public SolutionDetail(int nbQuantities) { capacityViolation = new long[nbQuantities]; pickedUpQuantities = new long[nbQuantities]; deliveredQuantities = new long[nbQuantities]; } public void writeDetails(SolutionDetailsTableDfn dfn, RowWriter w) { w.write(unassignedStops, dfn.unassignedStops); w.write(routesCount, dfn.routesCount); w.write(capacityViolation, dfn.capacityViolation); w.write(deliveredQuantities, dfn.deliveredQuantities); w.write(deliveriesCount, dfn.deliveriesCount); w.write(pickupsCount, dfn.pickupsCount); w.write(pickedUpQuantities, dfn.pickedUpQuantities); w.write(assignedStopsCount, dfn.assignedStopsCount); w.write(time, dfn.time); w.write(timeWindowViolation, dfn.timeWindowViolation); for(TravelCostType type:TravelCostType.values()){ double value =travelCosts[type.ordinal()]; if(type == TravelCostType.DISTANCE_KM){ value /=1000; } w.write(value, dfn.travelCosts[type.ordinal()]); } w.write(waitingTime, dfn.waitingTime); w.write(hasViolation, dfn.hasViolation); } }