/*******************************************************************************
* Copyright (C) 2014 Stefan Schroeder
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package jsprit.instance.reader;
import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.util.Coordinate;
import jsprit.instance.reader.VrphGoldenReader.VrphType;
import org.junit.Test;
import java.net.URL;
import static org.junit.Assert.*;
public class GoldenReaderTest {
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfVehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
assertEquals(17, vrp.getVehicles().size());
}
private String getPath(String string) {
URL resource = this.getClass().getClassLoader().getResource(string);
if (resource == null) throw new IllegalStateException("resource " + string + " does not exist");
return resource.getPath();
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType1Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_1")) {
nuOfType1Vehicles++;
}
}
assertEquals(4, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType1VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_1")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(80, sumOfType1Cap);
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType2Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_2")) {
nuOfType1Vehicles++;
}
}
assertEquals(2, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType2VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_2")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(60, sumOfType1Cap);
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType3Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_3")) {
nuOfType1Vehicles++;
}
}
assertEquals(4, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType3VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_3")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(160, sumOfType1Cap);
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType4Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_4")) {
nuOfType1Vehicles++;
}
}
assertEquals(4, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType4VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_4")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(280, sumOfType1Cap);
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType5Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_5")) {
nuOfType1Vehicles++;
}
}
assertEquals(2, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType5VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_5")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(240, sumOfType1Cap);
}
@Test
public void whenReadingInstance_itShouldReadCorrectNuOfType6Vehicles() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int nuOfType1Vehicles = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_6")) {
nuOfType1Vehicles++;
}
}
assertEquals(1, nuOfType1Vehicles);
}
@Test
public void whenReadingInstance_theSumOfType6VehicleShouldHvTheCorrectCapacity() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
int sumOfType1Cap = 0;
for (Vehicle v : vrp.getVehicles()) {
if (v.getType().getTypeId().equals("type_6")) {
sumOfType1Cap += v.getType().getCapacityDimensions().get(0);
}
}
assertEquals(200, sumOfType1Cap);
}
@Test
public void whenReadingInstance_vehicleShouldHvTheCorrectCoord() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
for (Vehicle v : vrp.getVehicles()) {
if (v.getStartLocation().getCoordinate().getX() != 40.0) {
assertFalse(true);
}
if (v.getStartLocation().getCoordinate().getY() != 40.0) {
assertFalse(true);
}
}
assertTrue(true);
}
@Test
public void whenReadingInstance_service1MustHaveCorrectDemand() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Job job = getJob("1", vrp);
assertEquals(18, job.getSize().get(0));
}
@Test
public void whenReadingInstance_service1MustHaveCorrectCoordinate() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Coordinate coord = getCoord("1", vrp);
assertEquals(22.0, coord.getX(), 0.01);
assertEquals(22.0, coord.getY(), 0.01);
}
@Test
public void whenReadingInstance_service15MustHaveCorrectCoordinate() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Coordinate coord = getCoord("15", vrp);
assertEquals(62.0, coord.getX(), 0.01);
assertEquals(24.0, coord.getY(), 0.01);
}
@Test
public void whenReadingInstance_service50MustHaveCorrectCoordinate() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Coordinate coord = getCoord("50", vrp);
assertEquals(15.0, coord.getX(), 0.01);
assertEquals(56.0, coord.getY(), 0.01);
}
private Coordinate getCoord(String string, VehicleRoutingProblem vrp) {
Job j = getJob(string, vrp);
return ((Service) j).getLocation().getCoordinate();
}
@Test
public void whenReadingInstance_service4MustHaveCorrectDemand() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Job job = getJob("4", vrp);
assertEquals(30, job.getSize().get(0));
}
@Test
public void whenReadingInstance_service50MustHaveCorrectDemand() {
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrphGoldenReader(vrpBuilder, VrphType.HVRPD)
.read(getPath("cn_13mix.txt"));
VehicleRoutingProblem vrp = vrpBuilder.build();
Job job = getJob("50", vrp);
assertEquals(22, job.getSize().get(0));
}
private Job getJob(String string, VehicleRoutingProblem vrp) {
for (Job j : vrp.getJobs().values()) {
if (j.getId().equals(string)) {
return j;
}
}
return null;
}
}