Corinna Krebs
This solution validator checks the feasibility of a given solution with respect to various loading and routing constraints (see Code Documentation or Literature). It handles the combination of two optimization problems — the vehicle routing problem (VRP) combined with the container loading (CLP), also known as the 2L-CVRP, 2L-VRPTW, 3L-CVRP and 3L-VRPTW.
The tool is implemented in C++ and in Java. Therefore, it can be used with either of the two languages. Only standard libraries are used.
- Language level: min. C++11
- Software: e.g. MSBuild via Visual Studio
- Build files: validator.sln, validator.vcxproj
- Language level: min. Java 11
- Software: Java JRE, Apache Maven Version 2.0, IDE (e.g. IntelliJ or Eclipse), Lombok
- Build files: pom.xml
In general, the program consists of two main parts:
- Provide Data (Instance, ConstraintSet and Solution)
- Use Check Methods
General hints are given below. For the concrete usage of the methods, please check the documentation of the code.
// Necessary Data
Instance instance = Read.readInstanceFile("../Input/Instances/Krebs_Ehmke_Koch_2020/001_n020_m200_bt3.txt");
ConstraintSet constraintSet = Read.readConstraintFile("../Input/Constraint_Sets/P1.txt");
Solution solution = Read.readSolutionFile("../Input/PackPlan/001_n020_m200_bt3_P1_1.txt", instance);
// Check Constraints
boolean feasibleRouting = checkRoutingConstraints(solution, constraintSet, instance);
boolean feasibleLoading = checkLoadingConstraints(solution, constraintSet, instance);
Provide necessary data via Instance, ConstraintSet and Solution objects. Exemplary files are available in Input Folder.
- Necessary Data: Information about vehicles, customers, items and demands
- Provide Data:
- use converted Instances from Literature (see this repository) or
- use Instance Class Constructor (see C++: Instance.h or Java: Instance.java).
- Necessary Data: Included Loading Constraints and Parameters
- Provide Data:
- read Constraint File (see examples) or
- adapt an Example and read this new File or
- use ConstraintSet Class Constructor (see C++: ConstraintSet.h or Java: ConstraintSet.java).
- Necessary Data: Objective Values, run time, number of iterations, set of routes and packing plans
- Provide Data:
- use Solution file (see our repository) or
- use Solution Class Constructor (see C++: Solution.h or Java: Solution.java) or
- convert Data via Write Class (see C++: Write.cpp or Java: Write.java) and use the new file.
- Necessary Data: Input Data is shown above. Provided as parameters to the methods.
- Return Value: Feasibility of the solution (feasible: true; infeasible: false).
- Check all Constraints defined in ConstraintSet: Use checkRoutingConstraints and checkLoadingConstraints
- Check specific Constraint, see
- C++: ConstraintsLoading.cpp and ConstraintsRouting.cpp
- Java: Loading.java and Routing.java.
Loading Constraints and formulas are described in
-
Advanced Loading Constraints for 3D Vehicle Routing Problems
by C. Krebs, J. Ehmke, H. Koch -
Axle Weights in Combined Vehicle Routing and Container Loading Problems
by C. Krebs, J. Ehmke -
Vertical Stability Constraints in Combined Vehicle Routing and 3D Container Loading Problem
by C. Krebs, J. Ehmke