-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
170 lines (135 loc) · 11.6 KB
/
index.html
File metadata and controls
170 lines (135 loc) · 11.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<!DOCTYPE html>
<html lang="en">
<head>
<title>jsprit | java toolkit for rich VRPs and TSPs</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="jsprit is a java based, open source toolkit for solving rich traveling salesman (TSP) and vehicle routing problems (VRP)">
<meta name="keywords" content="vrp, tsp, vehicle routing, vehicle routing algorithm, open source, optimization"/>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="author" content="Stefan Schröder">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/jumbotron-narrow.css" rel="stylesheet">
<link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o), m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js',
'ga');
ga('create', 'UA-41587266-1', 'jsprit.github.io');
ga('send', 'pageview');
</script>
</head>
<body>
<div class="container">
<div class="header">
<!--<div class="container-fluid">-->
<!--<a class="brand" href="index.html"> <img height="50" width="50" src="img/tsp_new.png"></a>-->
<!--</div>-->
<ul class="nav nav-pills">
<li class="active"><a href="index.html"><span class="glyphicon glyphicon-home"></span> Home</a></li>
<li><a href="references.html"> References</a></li>
<li><a href="contact.html"><i class="fa fa-envelope"></i> Contact</a></li>
<li><a href="about.html"><span class="glyphicon glyphicon-user"></span> About</a></li>
<li><a href="https://github.com/jsprit/jsprit"><i class="fa fa-github"></i> View on GitHub</a></li>
</ul>
</div>
<div class="jumbotron">
<p class="lead"><strong>jsprit</strong> is a java based, open source toolkit for solving rich <a href="http://en.wikipedia.org/wiki/Travelling_salesman_problem" target="_blank"><strong>traveling salesman</strong></a>
(TSP) and <a href="http://en.wikipedia.org/wiki/Vehicle_routing_problem" target="_blank"><strong>vehicle routing problems</strong></a> (VRP). It is <strong>lightweight</strong>, <strong>flexible</strong> and <strong>easy-to-use</strong>.</p>
<p><a class="btn btn-lg btn-success" href="https://github.com/jsprit/jsprit/wiki" role="button">Learn More</a></p>
</div>
<div class="row marketing">
<div class="col-lg-6">
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Features</strong></h4>
<p><strong>jsprit</strong> can solve problems with pickups and deliveries, back hauls, heterogeneous fleets, finite and infinite fleets,
multiple depots, time windows, open routes, different start and end locations,
multiple capacity dimensions, initial loads, skills ...</p>
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Tested</strong></h4>
<p><strong>jsprit</strong> is fit for change due to comprehensive unit and integration tests.</p>
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Documented</strong></h4>
<p><strong>jsprit</strong> is documented and additional code-examples illustrate its use.</p>
</div>
<div class="col-lg-6">
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Constraints</strong></h4>
<p><strong>jsprit</strong> allows you to define additional stateful and stateless constraints to
account for the richness of your problem.</p>
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Benchmarked</strong></h4>
<p><strong>jsprit</strong> is benchmarked against classical VRP instances (e.g. Solomon instances).</p>
<h4><i class="fa fa-star" style="color: #FFA500"></i><strong> Open Source</strong></h4>
<p><strong>jsprit</strong> is released under Apache License v2.</p>
</div>
</div>
<hr>
<h4><strong>Quickstart - Problem, Algorithm and Solution</strong></h4>
<h4><i class="fa fa-question" style="color: #FFA500"></i> Problem</h4>
<p>Specify your jobs - jsprit allows you to define services (one stop) and shipments (two stops) with multiple capacity dimensions. Additionally, you can set time windows and required skills.</p>
<pre><code><span class="java-comment">// specify service - which involves one stop </span>
<span class="java-class">Service</span> <span class="java-local-var">service</span> = <span class="java-class"> Service.Builder</span>.newInstance(<span class="java-string">"serviceId"</span>)
.setName(<span class="java-string">"myService"</span>)
.setLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">5,7</span>))
.addSizeDimension(<span class="java-number">0,5</span>).addSizeDimension(<span class="java-number">1,20</span>)
.addRequiredSkill(<span class="java-string">"electric drill"</span>)
.setTimeWindow(<span class="java-class">TimeWindow</span>.newInstance(<span class="java-number">20,35</span>))
.build()<span class="java-semicolon">;</span>
<span class="java-comment">// specify shipment - which involves two stops</span>
<span class="java-class">Shipment</span> <span class="java-local-var">shipment</span> = <span class="java-class">Shipment.Builder</span>.newInstance(<span class="java-string">"shipmentId"</span>)
.setName(<span class="java-string">"myShipment"</span>)
.setPickupLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">2,7</span>)).setDeliveryLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">10,2</span>))
.addSizeDimension(<span class="java-number">0,9</span>).addSizeDimension(<span class="java-number">1,50</span>)
.addRequiredSkill(<span class="java-string">"loading bridge"</span>).addRequiredSkill(<span class="java-string">"electric drill"</span>)
.build()<span class="java-semicolon">;</span></code></pre>
<p>Specify your fleet - jsprit allows you to add multiple depots by just adding vehicles/drivers with different start locations. You can specify start and end locations explicitly. You can also instruct your drivers to return to their depots again as well as to stay at the last customer site.
Additionally, you can define a heterogeneous fleet by assigning different vehicle types (with different capacities and transportation costs), skills and operation times to your vehicles.
</p>
<pre><code><span class="java-comment">// specify type of both vehicles</span>
<span class="java-class">VehicleTypeImpl</span> <span class="java-local-var">vehicleType</span> = <span class="java-class">VehicleTypeImpl.Builder</span>.newInstance(<span class="vehicleType">"vehicleType"</span>)
.addCapacityDimension(<span class="java-number">0,30</span>).addCapacityDimension(<span class="java-number">1,100</span>)
.build()<span class="java-semicolon">;</span>
<span class="java-comment">// specify vehicle1 with different start and end locations</span>
<span class="java-class">VehicleImpl</span> <span class="java-local-var">vehicle1</span> = <span class="java-class">VehicleImpl.Builder</span>.newInstance(<span class="java-string">"vehicle1Id"</span>)
.setType(<span class="java-local-var">vehicleType</span>)
.setStartLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">0,0</span>)).setEndLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">20,20</span>))
.addSkill(<span class="java-string">"loading bridge"</span>).addSkill(<span class="java-string">"electric drill"</span>)
.build()<span class="java-semicolon">;</span>
<span class="java-comment">// specify vehicle2 with open end, i.e. end is determined by the algorithm</span>
<span class="java-class">VehicleImpl</span> <span class="java-local-var">vehicle2</span> = <span class="java-class">VehicleImpl.Builder</span>.newInstance(<span class="java-string">"vehicle2Id"</span>)
.setType(<span class="java-local-var">vehicleType</span>)
.setStartLocation(<span class="java-class">Location</span>.newInstance(<span class="java-number">5,0</span>))
.setReturnToDepot(<span class="java-keyword">false</span>)
.addSkill(<span class="java-string">"loading bridge"</span>)
.build()<span class="java-semicolon">;</span></code></pre>
<p>Put it all together to define the problem, set the routing costs (by default Euclidean distance is used) and specify whether you have a finite or infinite fleet. Latter might be important at tactical level when designing your fleet.</p>
<pre><code><span class="java-class">VehicleRoutingProblem.Builder</span> <span class="java-local-var">vrpBuilder</span> = <span class="java-class"> VehicleRoutingProblem.Builder</span>.newInstance()<span class="java-semicolon">;</span>
<span class="java-local-var">vrpBuilder</span>.addJob(<span class="java-local-var">service</span>).addJob(<span class="java-local-var">shipment</span>).addVehicle(<span class="java-local-var">vehicle1</span>).addVehicle(<span class="java-local-var">vehicle2</span>))<span class="java-semicolon">;</span>
<span class="java-local-var">vrpBuilder</span>.setFleetSize(<span class="java-class">FleetSize</span><span class="java-local-var">.FINITE</span>)<span class="java-semicolon">;</span>
<span class="java-class">VehicleRoutingProblem</span> <span class="java-local-var">problem</span> = <span class="java-local-var"> vrpBuilder</span>.build()<span class="java-semicolon">;</span></code></pre>
<h4><i class="fa fa-wrench" style="color: #FFA500"></i> Algorithm</h4>
<pre><code><span class="java-comment">// define an algorithm out of the box - this creates a large neighborhood search algorithm </span>
<span class="java-class">VehicleRoutingAlgorithm</span> <span class="java-local-var">algorithm</span> = <span class="java-class">Jsprit</span>.createAlgorithm(<span class="java-local-var">problem</span>)<span class="java-semicolon">;</span>
</code></pre>
<h4><i class="fa fa-lightbulb-o" style="color: #FFA500"></i> Solution</h4>
<pre><code><span class="java-comment">// search solutions</span>
<span class="java-interface">Collection</span><<span class="java-class">VehicleRoutingProblemSolution</span>> <span class="java-local-var">solutions</span> = <span class="java-local-var">algorithm</span>.searchSolutions()<span class="java-semicolon">;</span>
<span class="java-comment">// get best</span>
<span class="java-class">VehicleRoutingProblemSolution</span> <span class="java-local-var">bestSolution</span> = <span class="java-class">Solutions</span>.bestOf(<span class="java-local-var">solutions</span>)<span class="java-semicolon">;</span>
</code></pre>
<div class="footer">
<p>© jsprit 2014</p>
</div>
</div> <!-- /container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
</body>
</html>