dparo / master-thesis Goto Github PK
View Code? Open in Web Editor NEWA Branch-and-Cut based Pricer for the Capacitated Vehicle Routing Problem
License: MIT License
A Branch-and-Cut based Pricer for the Capacitated Vehicle Routing Problem
License: MIT License
Develop an API to use CPTP as BaPCod pricer plugin, and test the new performance.
NG path size
is not guaranteed to be equal to the maximum settable value. On top of that, there's no way for client code (eg the BcRCSPFunctor
) to know the current value of the NG set size. Therefore elementarity can be guaranteed in BapCod only for instances having less than K <= 63
customers, where K
value could be anything. CPTP solves a much harder problem by considering the elementarity constraint. Comparing solution time on a iteration-by-iteration basis is not fair. The much more RELIABLE total solution time, measured as the time BaPCod takes to solve the entire CVRP instance, is the approach that should be taken.10 ms
each before concluding no reduced cost tour exist0.5 s
before concluding no reduced cost tour exist.Under a iteration-by-iteraion comparison CPTP always loses, but under the big scheme of things, it wins.
When separating these cuts, it requires a Theta(N^2)
complexity to generate the index
and value
array and only later we check if the cut is violated.
Fix these cuts by generating the index
and value
array only when absolutely needed.
Try to short circuit the separation function as early as possible, by determining if any cut is going to be violated. If no cut is going to be violated, there's no point paying for the Theta(N^2)
iteration generating the index
and value
array that will never be used.
This should also improve cache locality.
NOTE: it is already partially fixed in GSEC
fractional separation but not for the integral separation
Double check that the set S used for the cut inequalities satisfies that: |S| >= 2
, specifically for the following separations:
Relax the cut separation and make it more aggressive as to control and facilitate branching events.
Each cut should accept a double violation_amt
(exposed to the commandline) to relax the conditions at which cuts are considered violated
It may be interesting to test the MIP solver performance by not always forcing the cut generations (eg even when they are barely effective) as to anticipate branching
Refactor the perfprof code to handle arbitrary statistics from the JSON file
Each statistic should have:
The CPTP main executable should:
Implement 2-OPT refinement step for the solutions generated from the insertion heuristic algorithm.
For ESPPRSC a 2-OPT exchange maintains feasibility (the same vertices are visited after an exchange) and can improve the solution cost.
The capacity lower bound constraint, although non strictly necessary to formulate the problem, allows improving the linear relaxation, likely leading to far fewer cuts being generated.
Unfortunately, the capacity lower bound usually is not so stringent, and its benefit is subject to debate.
Generate new CPTP instances by raising (by a multiplicative factor) the vehicle capacity.
Solve the new instances using BapCod and the CPTP solver, and do all the necessary performance profiles.
Use a batch program that takes a .vrp
file in input, a command-line argument specifying the vehicle_cap
factor to be multiplied and outputs the new instance to disk.
vehicle_cap
is high).In order to assess the performance of our CPTP executable we need to generate the performance profiles for many pricing iterations induced from solving common CVRP instances...
Due to the problem of BapCod non-guaranteed elementarity, and the Branch&Cut nature of our approach we can distinguish three main different families of cut generations:
(63 by default)
vehicle_cap
which is multiplied by a constant factor (favors long tours solutions, where B&C approaches seem to work better than dynamic labelling algorithms)E
(short routes, hard for a B&C) and family F
(long routes, easier for a B&C)And combinations of the above.
Even though unlikely our CPTP solver will beat the dynamic programming labelling algorithm it can still provide a non-negligible contribution when vehicle capacities are high, and similar to real world problems (eg Amazon order delivery)
Setup CPX_PARAM_CUTLO
as we did for CPX_PARAM_CUTUP
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.