/******************************************************************************* * 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; import java.io.Serializable; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import com.opendoorlogistics.api.distances.DistancesConfiguration; @XmlRootElement(name = "VRPConfig") final public class VRPConfig implements Serializable { enum BooleanOptions{ FLEET_SIZE_IS_INFINITE("Fleet size is infinite"), FORCE_ALL_DELIVERIES_BEFORE_PICKUPS("Do all deliveries before all pickups"), OUTPUT_STRAIGHT_LINES_BETWEEN_STOPS("Output straight lines between stops to the map"), ; // USE_PICKUP_DELIVER, // USE_SERVICE_DURATIONS, // USE_STOP_TIME_WINDOWS, // USE_VEHICLE_TIME_WINDOW, // VEHICLE_HAS_DIFFERENT_END_LOCATION, public final String displayName; private BooleanOptions(String displayName) { this.displayName = displayName; } } private final boolean [] booleans = new boolean[BooleanOptions.values().length]; private DistancesConfiguration distances = new DistancesConfiguration(); private int nbIterations=VRPConstants.DEFAULT_NB_ITERATIONS; private int nbQuantities=1; private int nbThreads=1; private AlgorithmConfig algorithm = AlgorithmConfig.createDefaults(); // public boolean isStopTimeWindows() { // return getBool(BooleanOptions.USE_STOP_TIME_WINDOWS); // } // public void setStopTimeWindows(boolean timeWindows) { // setBool(BooleanOptions.USE_STOP_TIME_WINDOWS, timeWindows); // } // public boolean isLinkedPickupDeliver() { // return getBool(BooleanOptions.USE_PICKUP_DELIVER); // } // // @XmlAttribute // public void setLinkedPickupDeliver(boolean pickupDeliver) { // setBool(BooleanOptions.USE_PICKUP_DELIVER, pickupDeliver); // } public int getNbQuantities() { return nbQuantities; } @XmlAttribute public void setNbQuantities(int nbQuantities) { this.nbQuantities = nbQuantities; } // public boolean isServiceDurations() { // return getBool(BooleanOptions.USE_SERVICE_DURATIONS); // } // // @XmlAttribute // public void setServiceDurations(boolean serviceTimes) { // setBool(BooleanOptions.USE_SERVICE_DURATIONS, serviceTimes); // } // // public boolean isVehicleTimeWindow() { // return getBool(BooleanOptions.USE_VEHICLE_TIME_WINDOW); // } // @XmlAttribute // public void setVehicleTimeWindow(boolean vehicleTimeWindows) { // setBool(BooleanOptions.USE_VEHICLE_TIME_WINDOW, vehicleTimeWindows); // } // public boolean isVehicleHasDifferentEndLocation() { // return getBool(BooleanOptions.VEHICLE_HAS_DIFFERENT_END_LOCATION); // } // // @XmlAttribute // public void setVehicleHasDifferentEndLocation(boolean vehicleHasDifferentEndLocation) { // setBool(BooleanOptions.VEHICLE_HAS_DIFFERENT_END_LOCATION, vehicleHasDifferentEndLocation); // } public boolean isInfiniteFleetSize() { return getBool(BooleanOptions.FLEET_SIZE_IS_INFINITE); } @XmlAttribute public void setInfiniteFleetSize(boolean infiniteFleetSize) { setBool(BooleanOptions.FLEET_SIZE_IS_INFINITE, infiniteFleetSize); } public boolean isDeliveriesBeforePickups() { return getBool(BooleanOptions.FORCE_ALL_DELIVERIES_BEFORE_PICKUPS); } @XmlAttribute public void setDeliveriesBeforePickups(boolean deliveriesBeforePickups) { setBool(BooleanOptions.FORCE_ALL_DELIVERIES_BEFORE_PICKUPS, deliveriesBeforePickups); } public boolean isOutputStraightLines() { return getBool(BooleanOptions.OUTPUT_STRAIGHT_LINES_BETWEEN_STOPS); } @XmlAttribute public void setOutputStraightLines(boolean outputStraightLines) { setBool(BooleanOptions.OUTPUT_STRAIGHT_LINES_BETWEEN_STOPS, outputStraightLines); } public DistancesConfiguration getDistances() { return distances; } @XmlElement public void setDistances(DistancesConfiguration distances) { this.distances = distances; } public boolean getBool(BooleanOptions bo){ return booleans[bo.ordinal()]; } public void setBool(BooleanOptions bo, boolean val){ booleans[bo.ordinal()]=val; } public int getNbIterations() { return nbIterations; } @XmlElement public void setNbIterations(int nbIterations) { this.nbIterations = nbIterations; } public int getNbThreads() { return nbThreads; } @XmlAttribute public void setNbThreads(int nbThreads) { this.nbThreads = nbThreads; } public AlgorithmConfig getAlgorithm() { return algorithm; } @XmlElement public void setAlgorithm(AlgorithmConfig algorithm) { this.algorithm = algorithm; } }