# pgRouting Manual (2.5)

## pgr_gsoc_vrppdtw - Experimental

## Name

`pgr_gsoc_vrppdtw` — Returns a solution for Pick and Delivery with time windows Vehicle Routing Problem

Warning

Experimental functions

- They are not officially of the current release.
- They likely will not be officially be part of the next release:
  - The functions might not make use of ANY-INTEGER and ANY-NUMERICAL
  - Name might change.
  - Signature might change.
  - Functionality might change.
  - pgTap tests might be missing.
  - Might need c/c++ coding.
  - May lack documentation.
  - Documentation if any might need to be rewritten.
  - Documentation examples might need to be automatically generated.
  - Might need a lot of feedback from the comunity.
  - Might depend on a proposed function of pgRouting
  - Might depend on a deprecated function of pgRouting

## Signature Summary

    pgr_gsoc_vrppdtw(sql, vehicle_num, capacity)
    RETURNS SET OF pgr_costResult[]:

## Signatures

### Complete signature

    pgr_gsoc_vrppdtw(sql, vehicle_num, capacity)
    Returns set of pgr_costResult[]:

Example: Show the id1

    SELECT DISTINCT(id1) FROM pgr_gsoc_vrppdtw(
        'SELECT * FROM customer ORDER BY id', 25, 200)
    ORDER BY id1;
     id1
    -----
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
    (10 rows)

## Description of the Signatures

### Description of the sql query

Column | Type | Description
--- | --- | ---

id

`ANY-INTEGER`

Identifier of the customer.

- A value of `0` identifies the starting location

x | `ANY-NUMERICAL` | `X` coordinate of the location.
y | `ANY-NUMERICAL` | `Y` coordinate of the location.

demand

`ANY-NUMERICAL`

How much is added / removed from the vehicle.

- Negative value is a delivery,
- Positive value is a pickup,

openTime | `ANY-NUMERICAL` | The time relative to 0, when the customer opens.
closeTime | `ANY-NUMERICAL` | The time relative to 0, when the customer closes.
serviceTime | `ANY-NUMERICAL` | The duration of the loading / unloading.
pIndex | `ANY-INTEGER` | Value used when the current customer is a Delivery to find the corresponding Pickup
dIndex | `ANY-INTEGER` | Value used when the current customer is a Pickup to find the corresponding Delivery

### Description of the parameters of the signatures

Column | Type | Description
--- | --- | ---
sql | `TEXT` | SQL query as described above.
vehicle_num | `INTEGER` | Maximum number of vehicles in the result. (currently is ignored)
capacity | `INTEGER` | Capacity of the vehicle.

### Description of the result

RETURNS SET OF pgr_costResult[]:

Column | Type | Description
--- | --- | ---
seq | `INTEGER` | Sequential value starting from 1.
id1 | `INTEGER` | Current vehicle identifier.
id2 | `INTEGER` | Customer identifier.

cost

`FLOAT`

Previous `cost` plus travel time plus wait time plus service time.
  - when `id2 = 0` for the second time for the same `id1`, then has the total time for the current `id1`

## Examples

Example: Total number of rows returned

    SELECT count(*) FROM pgr_gsoc_vrppdtw(
        'SELECT * FROM customer ORDER BY id', 25, 200);
     count
    -------
       126
    (1 row)

Example: Results for only id1 values: 1, 5, and 9

    SELECT * FROM pgr_gsoc_vrppdtw(
        'SELECT * FROM customer ORDER BY id', 25, 200)
        WHERE id1 in (1, 5, 9);
     seq | id1 | id2 |       cost
    -----+-----+-----+------------------
       1 |   1 |   0 |                0
       2 |   1 |  13 | 120.805843601499
       3 |   1 |  17 | 214.805843601499
       4 |   1 |  18 | 307.805843601499
       5 |   1 |  19 | 402.805843601499
       6 |   1 |  15 | 497.805843601499
       7 |   1 |  16 | 592.805843601499
       8 |   1 |  14 | 684.805843601499
       9 |   1 |  12 | 777.805843601499
      10 |   1 |  50 | 920.815276724293
      11 |   1 |  52 | 1013.97755438446
      12 |   1 |  49 | 1106.97755438446
      13 |   1 |  47 | 1198.97755438446
      14 |   1 |   0 | 1217.00531076178
      57 |   5 |   0 |                0
      58 |   5 |  90 | 110.615528128088
      59 |   5 |  87 | 205.615528128088
      60 |   5 |  86 | 296.615528128088
      61 |   5 |  83 | 392.615528128088
      62 |   5 |  82 | 485.615528128088
      63 |   5 |  84 | 581.446480022934
      64 |   5 |  85 |  674.27490714768
      65 |   5 |  88 |  767.27490714768
      66 |   5 |  89 | 860.103334272426
      67 |   5 |  91 |  953.70888554789
      68 |   5 |   0 | 976.069565322888
     105 |   9 |   0 |                0
     106 |   9 |  67 | 102.206555615734
     107 |   9 |  65 | 193.206555615734
     108 |   9 |  63 | 285.206555615734
     109 |   9 |  62 | 380.206555615734
     110 |   9 |  74 | 473.206555615734
     111 |   9 |  72 | 568.206555615734
     112 |   9 |  61 | 661.206555615734
     113 |   9 |  64 | 663.206555615734
     114 |   9 | 102 | 753.206555615734
     115 |   9 |  68 | 846.206555615734
     116 |   9 |   0 | 866.822083743822
    (38 rows)

## See Also

- The examples use Pick & Deliver Data
- http://en.wikipedia.org/wiki/Vehicle_routing_problem

Indices and tables

- Index
- Search Page