Skip to content

Algunos datos de vrptools

etorrano edited this page Oct 5, 2015 · 27 revisions

Documentacion de vrptools

Comentarios generales

osrmclient.h, osrmclient.cpp (clase OsrmClient)

Se define enlace estático con la biblioteca OSRM, su inicialización y métodos/funciones de consulta y retorno de información -originalmente viaroute- y luego locate y nearest.

node.h, node.cpp (clase Node)

Se definen elementos principales de los nodos nid (interno), id, x, y, hint, valid. Se definen funciones básicas distancia a segmentos, distancias entre nodos, si un nodo esta a la derecha de un segmento.

twnode.h, twnode.cpp (clase Twnode)

Hereda de Node. Define los tipos de nodos: kStart, kPickup, kEnd y varios otros. Métodos para establecer y saber que tipo de nodo es. Demanda, apertura, cierre y calle en la que esta el nodo.

tweval.h, tweval.cpp (clase Tweval)

Hereda de Twnode. Se agregan elementos y datos relacionados con el path del vehiculo, nodos anteriores, tiempos, etc. Aparece evaluateOsrm que es el primero en referencias a OSRM.

twc.h (clase TWC -Time Windows Compatibility-)

No hereda. Las ideas vienen de paper.

Aparecen tablas de tiempos y consultas

trashnode

#define Trashnode Tweval

Eso es todo.

prob_trash.h, prob_trash.cpp (clase Prob_Trash)

Carga los datos de entrada (excepto la matriz de tiempo) desde archivos de tiempo.

Luego pueden ser usados en la solución.

trashprob.h, trashprob.cpp (clase TrashProb)

Carga los datos de entrada desde estructura de datos, inclusive la matriz de tiempo.

solution.h, solution.cpp (clase Solution)

Hereda de Prob_Trash.

Encuentra la solución del problema.

  • Borrador de Pseudocódigo según degug de ejecutable trash

  • Pide una única instancia de OSRM

  • Si no hay ninguna la crea con servicio "viaroute"

  • invariant() -basicOerations.cpp- realiza cálculos para comprobar que los tamaños de la subdivisión de nodos al combinarlos se siguen manteniendo: void Basicoperations::invariant() { #if 0 if ((unassigned.size() + assigned.size()) != 109) { DLOG(INFO) << "assigned:" << assigned.size(); assigned.dumpid(); DLOG(INFO) << "unassigned" << unassigned.size(); unassigned.dumpid(); assert ((unassigned.size() + assigned.size()) == 109); } #endif assert(pickups.size() == (unassigned.size() + problematic.size() + assigned.size())); assert(pickups == (unassigned + problematic + assigned)); assert(!(unassigned * problematic).size()); assert(!(unassigned * assigned).size()); assert(!(problematic * assigned).size()); }

  • Comienza a asignar viajes hasta que estén todos asignados

  • Pide un camión para comenzar

  • En fleetOpt.cpp hace la optimización de la secuencia Llama a Fleetopt::optimize() y ese a Fleetopt::extract_trips() En esta funcion llama varias veces a intraTripOptimizationNoOsrm(); quien llama a Trip::getNodesOnPath y este llama a twc->getNodesOnPath(path, dumpSite, nodes, nodesInOrder);

Clone this wiki locally