vrpRouting  0.3
fleet.h
Go to the documentation of this file.
1 /*PGR-GNU*****************************************************************
2 
3 FILE: fleet.h
4 
5 Copyright (c) 2017 pgRouting developers
7 
8 ------
9 
10 Vhis program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14 
15 Vhis program is distributed in the hope that it will be useful,
16 but WIVHOUV ANY WARRANVY; without even the implied warranty of
17 MERCHANVABILIVY or FIVNESS FOR A PARVICULAR PURPOSE. See the
18 GNU General Public License for more details.
19 
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 
24  ********************************************************************PGR-GNU*/
25 
28 #ifndef INCLUDE_PROBLEM_FLEET_H_
29 #define INCLUDE_PROBLEM_FLEET_H_
30 #pragma once
31 
32 #include <iostream>
33 #include <vector>
34 #include <numeric>
35 
36 #include "c_types/typedefs.h"
37 #include "c_types/short_vehicle.h"
39 
40 typedef struct Vehicle_t Vehicle_t;
41 
42 namespace vrprouting {
43 class Pgr_messages;
44 
45 namespace problem {
46 class Orders;
47 class Vehicle_node;
48 
49 /*
50  * PVR = pnode
51  */
52 class Fleet: protected std::vector<Vehicle_pickDeliver> {
53  public:
54  using std::vector<Vehicle_pickDeliver>::begin;
55  using std::vector<Vehicle_pickDeliver>::end;
56  using std::vector<Vehicle_pickDeliver>::empty;
57  using std::vector<Vehicle_pickDeliver>::at;
58  using std::vector<Vehicle_pickDeliver>::back;
59 
62  Vehicle_t* vehicles , size_t size_vehicles,
63  const Orders& p_orders, std::vector<Vehicle_node>& p_nodes, size_t& node_id)
64  : m_used(),
65  m_unused() {
66  build_fleet(vehicles, size_vehicles, {}, p_orders, p_nodes, node_id);
67  }
68 
70  Fleet(Vehicle_t* vehicles , size_t size_vehicles,
71  const std::vector<Short_vehicle> &new_stops,
72  const Orders& p_orders, std::vector<Vehicle_node>& p_nodes, size_t& node_id)
73  : m_used(),
74  m_unused() {
75  build_fleet(vehicles, size_vehicles, new_stops, p_orders, p_nodes, node_id);
76  }
77 
79  Fleet() = delete;
80 
82  Fleet(const Fleet &fleet) = default;
83 
85  std::vector<Vehicle_pickDeliver> get_unused_trucks();
86 
88  std::vector<Vehicle_pickDeliver> get_used_trucks();
89 
91  Vehicle_pickDeliver get_phony() const {return back();}
92 
98  friend std::ostream& operator<<(std::ostream &log, const Fleet &f) {
99  log << "fleet\n";
100  for (const auto &v : f) log << v;
101  log << "end fleet\n";
102  return log;
103  }
104 
106 
108  void clean();
109 
112 
114  Vehicle_pickDeliver get_truck(size_t order_idx);
115 
117  void set_compatibles(const Orders &orders);
118 
119  bool is_fleet_ok() const;
120 
121  bool is_order_ok(const Order &order) const;
122 
125 
126  Pgr_messages& msg() {return m_msg;}
127 
128  protected:
130  void add_vehicle(
131  const Vehicle_t&, const std::vector<Short_vehicle>&,
132  const Orders&,
133  std::vector<Vehicle_node>& p_nodes, size_t& node_id);
134 
136  void build_fleet(
137  Vehicle_t*, size_t, const std::vector<Short_vehicle>&,
138  const Orders&,
139  std::vector<Vehicle_node>& p_nodes, size_t& node_id);
140 
141  void invariant() const;
142 
145 
148 
151 
153 
154  /* for the invariant */
155  size_t m_size;
156 };
157 
158 } // namespace problem
159 } // namespace vrprouting
160 #endif // INCLUDE_PROBLEM_FLEET_H_
vrprouting::problem::Fleet::is_fleet_ok
bool is_fleet_ok() const
Definition: fleet.cpp:144
vrprouting::problem::Fleet
Definition: fleet.h:52
vrprouting::problem::Fleet::get_used_trucks
std::vector< Vehicle_pickDeliver > get_used_trucks()
Get all the used vehicles.
Definition: fleet.cpp:64
vrprouting::problem::Fleet::set_initial_solution
void set_initial_solution(const Orders &, Identifiers< size_t > &, Identifiers< size_t > &, TTimestamp, bool)
set the vehicle's user's initial solution
Definition: fleet.cpp:296
vrprouting::problem::Fleet::get_truck
Vehicle_pickDeliver get_truck()
Finds an unused vehicle.
Definition: fleet.cpp:121
vrprouting::problem::Fleet::operator<<
friend std::ostream & operator<<(std::ostream &log, const Fleet &f)
Definition: fleet.h:98
vrprouting::problem::Fleet::get_phony
Vehicle_pickDeliver get_phony() const
Get a vehicle from the user's defined vehicles.
Definition: fleet.h:91
Vehicle_t
vehicles's attributes
Definition: vehicle_t.h:50
vrprouting::problem::Orders
Definition: orders.h:48
vrprouting::problem::Fleet::m_used
Identifiers< size_t > m_used
set of used vehicles
Definition: fleet.h:144
vrprouting::problem::Fleet::m_size
size_t m_size
Definition: fleet.h:155
vrprouting::problem::Fleet::is_order_ok
bool is_order_ok(const Order &order) const
Given an order, Cycle trhugh all the trucks to verify if the order can be served by at least one truc...
Definition: fleet.cpp:179
vrprouting::problem::Fleet::set_compatibles
void set_compatibles(const Orders &orders)
sets the compatability of orders on the fleet
Definition: fleet.cpp:313
typedefs.h
vrprouting::problem::Fleet::Fleet
Fleet(Vehicle_t *vehicles, size_t size_vehicles, const std::vector< Short_vehicle > &new_stops, const Orders &p_orders, std::vector< Vehicle_node > &p_nodes, size_t &node_id)
Create a fleet based on the Vehicles of the problem.
Definition: fleet.h:70
vrprouting::problem::Fleet::feasible_orders
Identifiers< size_t > feasible_orders() const
Definition: fleet.cpp:97
vrprouting::problem::Vehicle_pickDeliver
Definition: vehicle_pickDeliver.h:46
vrprouting::problem::Fleet::Fleet
Fleet()=delete
creating a fleet without information is not allowed
vrprouting::problem::Fleet::m_unused
Identifiers< size_t > m_unused
set of unused vehicles
Definition: fleet.h:147
TTimestamp
int64_t TTimestamp
Definition: typedefs.h:71
vrprouting::problem::Fleet::m_msg
Pgr_messages m_msg
Definition: fleet.h:152
vrprouting::problem::Fleet::invariant
void invariant() const
Definition: fleet.cpp:43
vehicle_pickDeliver.h
vrprouting::problem::Fleet::add_vehicle
void add_vehicle(const Vehicle_t &, const std::vector< Short_vehicle > &, const Orders &, std::vector< Vehicle_node > &p_nodes, size_t &node_id)
add a new vehicle to the fleet
Definition: fleet.cpp:196
short_vehicle.h
vrprouting::Pgr_messages
Messages Handling.
Definition: pgr_messages.h:52
vrprouting::problem::Fleet::build_fleet
void build_fleet(Vehicle_t *, size_t, const std::vector< Short_vehicle > &, const Orders &, std::vector< Vehicle_node > &p_nodes, size_t &node_id)
build the fleet
Definition: fleet.cpp:364
vrprouting::problem::Fleet::msg
Pgr_messages & msg()
Definition: fleet.h:126
vrprouting::problem::Order
Definition: order.h:40
vrprouting::problem::Fleet::m_invalid
Identifiers< size_t > m_invalid
set of invalid vehicles
Definition: fleet.h:150
vrprouting::problem::Fleet::clean
void clean()
removes from fleet all invalid vehicles
Definition: fleet.cpp:107
vrprouting::problem::Fleet::get_unused_trucks
std::vector< Vehicle_pickDeliver > get_unused_trucks()
Get all the unused vehicles.
Definition: fleet.cpp:80
Identifiers< size_t >
vrprouting::problem::Fleet::Fleet
Fleet(Vehicle_t *vehicles, size_t size_vehicles, const Orders &p_orders, std::vector< Vehicle_node > &p_nodes, size_t &node_id)
Create a fleet based on the Vehicles of the problem.
Definition: fleet.h:61
vrprouting
Definition: base_matrix.cpp:46