Revision 72:5a929a76cf89

View differences:

misc/eclipse/GenerateInstance.launch
8 8
</listAttribute>
9 9
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
10 10
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="tt.jointeuclid2ni.probleminstance.generator.GenerateInstance"/>
11
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-env src/main/resources/environments/empty-unbounded.xml -nagents  60 -radius 48 -gridpattern 4  -gridstep 50 -seed 1000"/>
11
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-env src/main/resources/environments/csail.xml -nagents 10 -radius 24 -gridpattern 8  -gridstep 50 -seed 1000"/>
12 12
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="deconflictiontools"/>
13 13
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
14 14
</launchConfiguration>
misc/eclipse/Solver (kDPM-D).launch
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
3
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
4
<listEntry value="/deconflictiontools/src/main/java/tt/jointeuclid2ni/Solver.java"/>
5
</listAttribute>
6
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
7
<listEntry value="1"/>
8
</listAttribute>
9
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
10
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="tt.jointeuclid2ni.Solver"/>
11
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-method KDPMD -k 4 -problemfile  src/main/resources/problems/csail_r24_n5.xml  -maxtime 10000 -gridstep 50 -grid 8 -summary -showvis -heuristic PERFECT -verbose"/>
12
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="deconflictiontools"/>
13
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
14
</launchConfiguration>
src/main/java/tt/jointeuclid2ni/ProblemInstanceDesigner.java
1 1
package tt.jointeuclid2ni;
2 2

  
3 3
import java.awt.Color;
4
import java.awt.Rectangle;
4 5
import java.io.File;
5 6

  
6 7
import javax.vecmath.Point2d;
......
47 48
        // ---- add all the layers
48 49

  
49 50
        VisManager.registerLayer(ColorLayer.create(Color.WHITE));
50
        VisManager.registerLayer(PictureLayer.create(ImageLayer.loadImage(new File("/home/capino/projects/deconfliction/repo-doc/rss2014-iterative/figs/urbanC.png"))));
51
        VisManager.registerLayer(PictureLayer.create(
52
        		ImageLayer.loadImage(new File("/home/capino/Dropbox/csail.png")),
53
        		new Rectangle(0, 0, 3756, 5184)));
51 54
        VisManager.registerLayer(problemCreatorLayer);
52 55
        VisManager.registerLayer(VisInfoLayer.create());
53 56
        VisManager.init();
src/main/java/tt/jointeuclid2ni/probleminstance/generator/ConflictGenerator.java
114 114
    }
115 115

  
116 116
    public static EarliestArrivalProblem generateSingleInstance(Environment environment, int[] bodyRadiuses,
117
                                                                int[][] gridPatter, int step, int seed, Rectangle missionRegion) throws ProblemNotCreatedException {
117
                                                                int[][] gridPatter, int step, int seed,
118
                                                                Rectangle missionRegion) throws ProblemNotCreatedException {
118 119

  
120
    	if (missionRegion == null) {
121
    		missionRegion = environment.getBounds();
122
    	}
119 123

  
120 124
        ConflictGenerator generator = new ConflictGenerator(environment, bodyRadiuses, gridPatter, step, missionRegion);
121 125
        List<EarliestArrivalProblem> problems = generator.generateProblems(1, seed);
src/main/java/tt/jointeuclid2ni/probleminstance/generator/GenerateInstance.java
27 27
    private int step;
28 28
    private int seed;
29 29
    private String outputFile;
30
    private Rectangle missionArea;
30 31

  
31
    public GenerateInstance(String environmentFile, int agents, int radius, int patternNumber, int step, int seed) {
32
    public GenerateInstance(String environmentFile, int agents, int radius, int patternNumber, int step, int seed, Rectangle missionArea) {
32 33
        this.environmentFile = environmentFile;
33 34
        this.agents = agents;
34 35
        this.radius = radius;
35 36
        this.patternNumber = patternNumber;
36 37
        this.step = step;
37 38
        this.seed = seed;
39
        this.missionArea = missionArea;
38 40
    }
39 41

  
40 42
    private void run() throws ProblemNotCreatedException {
......
44 46
        int[][] pattern = getLazyGridPattern(patternNumber);
45 47
        int[] bodyRadiuses = prefillBodyRadiuses(agents, radius);
46 48

  
47
        EarliestArrivalProblem instance = ConflictGenerator.generateSingleInstance(environment, bodyRadiuses, pattern, this.step, seed, new Rectangle(new Point(0,0), new Point(1000,1000)));
49
		EarliestArrivalProblem instance = ConflictGenerator
50
				.generateSingleInstance(environment,
51
						bodyRadiuses, pattern,
52
						this.step, seed,
53
						missionArea);
54

  
48 55
        EarliestArrivalProblemXMLSerializer.serialize(instance, System.out);
49 56
    }
50 57

  
......
92 99
        private int id;
93 100

  
94 101
        public ProblemHandler() {
102

  
95 103
        }
96 104

  
97 105
        @Override
......
126 134
        int step = Integer.parseInt(Args.getArgumentValue(args, "-gridstep", true));
127 135
        int seed = Integer.parseInt(Args.getArgumentValue(args, "-seed", true));
128 136

  
129
        GenerateInstance main = new GenerateInstance(environmentFile, agents, radius, patternNumber, step, seed);
137
        Rectangle missionArea = null;
138
        if (Args.isArgumentSet(args, "-missionarea")) {
139
        	String missionAreaStr = Args.getArgumentValue(args, "-missionarea", false);
140
        	String[] parts = missionAreaStr.split("x");
141
        	assert parts.length == 2;
142
        	missionArea = new Rectangle(
143
        			new Point(0,0),
144
        			new Point(Integer.getInteger(parts[0]), Integer.getInteger(parts[1]))
145
        	);
146
        }
147

  
148
        GenerateInstance main = new GenerateInstance(environmentFile, agents, radius, patternNumber, step, seed, missionArea);
130 149
        main.run();
131 150
    }
132 151
}
src/main/java/tt/jointeuclid2ni/solver/impl/AbstractAlgorithm.java
93 93

  
94 94
        // create discretization
95 95
        final DirectedGraph<tt.euclid2i.Point, Line> spatialGraph
96
                = new AdditionalPointsExtension(grid, Collections.singleton(problem.getTarget(i)), params.gridStep, true);
96
                = new AdditionalPointsExtension(grid, Collections.singleton(problem.getTarget(i)),
97
                		params.gridStep, true);
97 98

  
99
        // graph
98 100

  
99
        if (i==2) {
100
        // graph
101 101
        KeyToggleLayer toggleLayer = KeyToggleLayer.create("g");
102 102
        toggleLayer.addSubLayer(
103 103
                GraphLayer.create(new GraphLayer.GraphProvider<tt.euclid2i.Point, Line>() {
......
110 110
        );
111 111
        VisManager.registerLayer(toggleLayer);
112 112
        // create spatio-temporal graph
113
        }
113

  
114

  
114 115
        return spatialGraph;
115 116
    }
116 117

  
src/main/java/tt/jointeuclid2ni/solver/impl/AlgorithmDPMC.java
104 104

  
105 105
        EvaluatedTrajectory[] trajs = SeparableFlowOptimizer.solve(
106 106
                trajectoryOptimizers, softSeparationFunctions, k, Double.POSITIVE_INFINITY,
107
                params.runtimeDeadlineMs, params.verbose);
107
                params.runtimeDeadlineMs, params.verbose, false);
108 108

  
109 109
        return new SearchResult(trajs, true);
110 110
    }
src/main/java/tt/jointeuclid2ni/solver/impl/AlgorithmDPMD.java
28 28

  
29 29
        EvaluatedTrajectory[] trajs = SeparableFlowOptimizer.solve(
30 30
                trajectoryOptimizers, penalties, k, 1000000,
31
                params.runtimeDeadlineMs, params.showVis);
31
                params.runtimeDeadlineMs, params.showVis, false);
32 32

  
33 33
        return trajs;
34 34
    }
src/main/java/tt/jointtraj/separableflow/SeparableFlowOptimizer.java
28 28

  
29 29
    private static final int TAN_COEF = 1;
30 30
    private static boolean showProgress;
31
    private static boolean keyTrace;
31 32
    protected static EvaluatedTrajectory[] currentTrajectories;
32 33
    protected static int[] bodyRadiuses;
33 34

  
34 35
    public static EvaluatedTrajectory[] solve(
35 36
            TrajectoryOptimizer[] trajectoryOptimizers,
36 37
            final PenaltyFunction[][] penaltyFunctions, int k, double maxCost,
37
            long runtimeDeadlineMs, boolean showProgressArg) {
38
            long runtimeDeadlineMs, boolean showProgressFlag, boolean keyTraceFlag) {
38 39

  
39 40
        int nAgents = trajectoryOptimizers.length;
40
        showProgress = showProgressArg;
41
        showProgress = showProgressFlag;
42
        keyTrace = keyTraceFlag;
41 43
        Verbose.setVerbose(showProgress);
42 44

  
43 45
        // Debug visualisation
44 46
        if (showProgress) {
45 47
            bodyRadiuses = new int[penaltyFunctions.length];
46 48
            // HACK: Assuming that everyone has the same radius and that we have at least two agents
47
            int radius = 1;
48
            if (penaltyFunctions[0][1] instanceof BumpSeparationPenaltyFunction) {
49
                 radius = (int) (((BumpSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
50
            } else if (penaltyFunctions[0][1] instanceof LinearSeparationPenaltyFunction) {
51
                radius = (int) (((LinearSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
52
            } else if (penaltyFunctions[0][1] instanceof ConstantSeparationPenaltyFunction) {
53
                radius = (int) (((ConstantSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
54
            }
49
            int radius = 0;
50
            if (penaltyFunctions[0].length == 1 ) {
51
            	radius = 50;
52
	        } else {
53
	            if (penaltyFunctions[0][1] instanceof BumpSeparationPenaltyFunction) {
54
	                 radius = (int) (((BumpSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
55
	            } else if (penaltyFunctions[0][1] instanceof LinearSeparationPenaltyFunction) {
56
	                radius = (int) (((LinearSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
57
	            } else if (penaltyFunctions[0][1] instanceof ConstantSeparationPenaltyFunction) {
58
	                radius = (int) (((ConstantSeparationPenaltyFunction)penaltyFunctions[0][1]).getMinSeparation()/2);
59
	            }
55 60

  
56
            for (int i=0; i<trajectoryOptimizers.length; i++) {
57
                bodyRadiuses[i] = radius;
61
	            for (int i=0; i<trajectoryOptimizers.length; i++) {
62
	                bodyRadiuses[i] = radius;
63
	            }
58 64
            }
59 65
            initProgressVisio();
60 66
        }
......
154 160

  
155 161
            Verbose.printf("Prioritized planning for agent %d. \n", i);
156 162

  
157
            try {
158
                System.in.read();
159
            } catch (IOException e) {
160
                e.printStackTrace();
163
            if (keyTrace) {
164
	            try {
165
	                System.in.read();
166
	            } catch (IOException e) {
167
	                e.printStackTrace();
168
	            }
161 169
            }
162 170

  
163 171
            Trajectory[] otherTrajectories = higherPriorityTrajectories(
......
197 205
        for (int i = 0; i < nIterations; i++) {
198 206
            int r = i % nAgents;
199 207

  
200
            try {
201
                System.in.read();
202
            } catch (IOException e) {
203
                e.printStackTrace();
208
            if (keyTrace) {
209
	            try {
210
	                System.in.read();
211
	            } catch (IOException e) {
212
	                e.printStackTrace();
213
	            }
204 214
            }
205 215

  
206 216

  
src/main/resources/environments/csail.xml
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
<multiagentproblem>
3
<environment>
4
<obstacles>
5
<obstacle>
6
<point id="0">
7
<x>829</x>
8
<y>93</y>
9
</point>
10
<point id="1">
11
<x>666</x>
12
<y>156</y>
13
</point>
14
<point id="2">
15
<x>792</x>
16
<y>445</y>
17
</point>
18
<point id="3">
19
<x>760</x>
20
<y>464</y>
21
</point>
22
<point id="4">
23
<x>829</x>
24
<y>570</y>
25
</point>
26
<point id="5">
27
<x>861</x>
28
<y>558</y>
29
</point>
30
<point id="6">
31
<x>1338</x>
32
<y>1493</y>
33
</point>
34
<point id="7">
35
<x>1106</x>
36
<y>1801</y>
37
</point>
38
<point id="8">
39
<x>1049</x>
40
<y>1782</y>
41
</point>
42
<point id="9">
43
<x>1011</x>
44
<y>1769</y>
45
</point>
46
<point id="10">
47
<x>930</x>
48
<y>1876</y>
49
</point>
50
<point id="11">
51
<x>1011</x>
52
<y>1951</y>
53
</point>
54
<point id="12">
55
<x>1074</x>
56
<y>1983</y>
57
</point>
58
<point id="13">
59
<x>1294</x>
60
<y>2139</y>
61
</point>
62
<point id="14">
63
<x>1288</x>
64
<y>2183</y>
65
</point>
66
<point id="15">
67
<x>1357</x>
68
<y>2190</y>
69
</point>
70
<point id="16">
71
<x>1476</x>
72
<y>2190</y>
73
</point>
74
<point id="17">
75
<x>1482</x>
76
<y>2171</y>
77
</point>
78
<point id="18">
79
<x>2355</x>
80
<y>2165</y>
81
</point>
82
<point id="19">
83
<x>2355</x>
84
<y>3106</y>
85
</point>
86
<point id="20">
87
<x>1489</x>
88
<y>3112</y>
89
</point>
90
<point id="21">
91
<x>1338</x>
92
<y>3087</y>
93
</point>
94
<point id="22">
95
<x>1313</x>
96
<y>3112</y>
97
</point>
98
<point id="23">
99
<x>1300</x>
100
<y>3238</y>
101
</point>
102
<point id="24">
103
<x>1074</x>
104
<y>3263</y>
105
</point>
106
<point id="25">
107
<x>980</x>
108
<y>3250</y>
109
</point>
110
<point id="26">
111
<x>974</x>
112
<y>3288</y>
113
</point>
114
<point id="27">
115
<x>817</x>
116
<y>3276</y>
117
</point>
118
<point id="28">
119
<x>792</x>
120
<y>3244</y>
121
</point>
122
<point id="29">
123
<x>773</x>
124
<y>3075</y>
125
</point>
126
<point id="30">
127
<x>748</x>
128
<y>3062</y>
129
</point>
130
<point id="31">
131
<x>735</x>
132
<y>3012</y>
133
</point>
134
<point id="32">
135
<x>760</x>
136
<y>3012</y>
137
</point>
138
<point id="33">
139
<x>779</x>
140
<y>3012</y>
141
</point>
142
<point id="34">
143
<x>786</x>
144
<y>2968</y>
145
</point>
146
<point id="35">
147
<x>760</x>
148
<y>2943</y>
149
</point>
150
<point id="36">
151
<x>792</x>
152
<y>2943</y>
153
</point>
154
<point id="37">
155
<x>792</x>
156
<y>2842</y>
157
</point>
158
<point id="38">
159
<x>760</x>
160
<y>2842</y>
161
</point>
162
<point id="39">
163
<x>754</x>
164
<y>2817</y>
165
</point>
166
<point id="40">
167
<x>798</x>
168
<y>2817</y>
169
</point>
170
<point id="41">
171
<x>811</x>
172
<y>2654</y>
173
</point>
174
<point id="42">
175
<x>892</x>
176
<y>2516</y>
177
</point>
178
<point id="43">
179
<x>848</x>
180
<y>2478</y>
181
</point>
182
<point id="44">
183
<x>823</x>
184
<y>2529</y>
185
</point>
186
<point id="45">
187
<x>792</x>
188
<y>2504</y>
189
</point>
190
<point id="46">
191
<x>811</x>
192
<y>2453</y>
193
</point>
194
<point id="47">
195
<x>773</x>
196
<y>2478</y>
197
</point>
198
<point id="48">
199
<x>735</x>
200
<y>2554</y>
201
</point>
202
<point id="49">
203
<x>685</x>
204
<y>2610</y>
205
</point>
206
<point id="50">
207
<x>516</x>
208
<y>2485</y>
209
</point>
210
<point id="51">
211
<x>503</x>
212
<y>2409</y>
213
</point>
214
<point id="52">
215
<x>534</x>
216
<y>2384</y>
217
</point>
218
<point id="53">
219
<x>415</x>
220
<y>2315</y>
221
</point>
222
<point id="54">
223
<x>378</x>
224
<y>2359</y>
225
</point>
226
<point id="55">
227
<x>340</x>
228
<y>2315</y>
229
</point>
230
<point id="56">
231
<x>290</x>
232
<y>2334</y>
233
</point>
234
<point id="57">
235
<x>277</x>
236
<y>2372</y>
237
</point>
238
<point id="58">
239
<x>265</x>
240
<y>2397</y>
241
</point>
242
<point id="59">
243
<x>252</x>
244
<y>2403</y>
245
</point>
246
<point id="60">
247
<x>214</x>
248
<y>2504</y>
249
</point>
250
<point id="61">
251
<x>277</x>
252
<y>2504</y>
253
</point>
254
<point id="62">
255
<x>308</x>
256
<y>2560</y>
257
</point>
258
<point id="63">
259
<x>271</x>
260
<y>2604</y>
261
</point>
262
<point id="64">
263
<x>365</x>
264
<y>2604</y>
265
</point>
266
<point id="65">
267
<x>403</x>
268
<y>2573</y>
269
</point>
270
<point id="66">
271
<x>415</x>
272
<y>2642</y>
273
</point>
274
<point id="67">
275
<x>465</x>
276
<y>2654</y>
277
</point>
278
<point id="68">
279
<x>497</x>
280
<y>2610</y>
281
</point>
282
<point id="69">
283
<x>491</x>
284
<y>2654</y>
285
</point>
286
<point id="70">
287
<x>547</x>
288
<y>2660</y>
289
</point>
290
<point id="71">
291
<x>597</x>
292
<y>2711</y>
293
</point>
294
<point id="72">
295
<x>528</x>
296
<y>2893</y>
297
</point>
298
<point id="73">
299
<x>491</x>
300
<y>2880</y>
301
</point>
302
<point id="74">
303
<x>509</x>
304
<y>2730</y>
305
</point>
306
<point id="75">
307
<x>409</x>
308
<y>2711</y>
309
</point>
310
<point id="76">
311
<x>378</x>
312
<y>2748</y>
313
</point>
314
<point id="77">
315
<x>239</x>
316
<y>2648</y>
317
</point>
318
<point id="78">
319
<x>196</x>
320
<y>2730</y>
321
</point>
322
<point id="79">
323
<x>221</x>
324
<y>2830</y>
325
</point>
326
<point id="80">
327
<x>158</x>
328
<y>2805</y>
329
</point>
330
<point id="81">
331
<x>133</x>
332
<y>2874</y>
333
</point>
334
<point id="82">
335
<x>177</x>
336
<y>2893</y>
337
</point>
338
<point id="83">
339
<x>170</x>
340
<y>2930</y>
341
</point>
342
<point id="84">
343
<x>139</x>
344
<y>2943</y>
345
</point>
346
<point id="85">
347
<x>170</x>
348
<y>3094</y>
349
</point>
350
<point id="86">
351
<x>239</x>
352
<y>3106</y>
353
</point>
354
<point id="87">
355
<x>258</x>
356
<y>3156</y>
357
</point>
358
<point id="88">
359
<x>221</x>
360
<y>3175</y>
361
</point>
362
<point id="89">
363
<x>302</x>
364
<y>3276</y>
365
</point>
366
<point id="90">
367
<x>327</x>
368
<y>3225</y>
369
</point>
370
<point id="91">
371
<x>352</x>
372
<y>3250</y>
373
</point>
374
<point id="92">
375
<x>340</x>
376
<y>3288</y>
377
</point>
378
<point id="93">
379
<x>365</x>
380
<y>3301</y>
381
</point>
382
<point id="94">
383
<x>390</x>
384
<y>3269</y>
385
</point>
386
<point id="95">
387
<x>447</x>
388
<y>3301</y>
389
</point>
390
<point id="96">
391
<x>440</x>
392
<y>3332</y>
393
</point>
394
<point id="97">
395
<x>522</x>
396
<y>3382</y>
397
</point>
398
<point id="98">
399
<x>547</x>
400
<y>3395</y>
401
</point>
402
<point id="99">
403
<x>478</x>
404
<y>3458</y>
405
</point>
406
<point id="100">
407
<x>239</x>
408
<y>3508</y>
409
</point>
410
<point id="101">
411
<x>177</x>
412
<y>3615</y>
413
</point>
414
<point id="102">
415
<x>120</x>
416
<y>3696</y>
417
</point>
418
<point id="103">
419
<x>214</x>
420
<y>3740</y>
421
</point>
422
<point id="104">
423
<x>189</x>
424
<y>3847</y>
425
</point>
426
<point id="105">
427
<x>89</x>
428
<y>3853</y>
429
</point>
430
<point id="106">
431
<x>89</x>
432
<y>3853</y>
433
</point>
434
<point id="107">
435
<x>83</x>
436
<y>3935</y>
437
</point>
438
<point id="108">
439
<x>126</x>
440
<y>3947</y>
441
</point>
442
<point id="109">
443
<x>101</x>
444
<y>4004</y>
445
</point>
446
<point id="110">
447
<x>126</x>
448
<y>4161</y>
449
</point>
450
<point id="111">
451
<x>396</x>
452
<y>4079</y>
453
</point>
454
<point id="112">
455
<x>434</x>
456
<y>4016</y>
457
</point>
458
<point id="113">
459
<x>472</x>
460
<y>4079</y>
461
</point>
462
<point id="114">
463
<x>428</x>
464
<y>4104</y>
465
</point>
466
<point id="115">
467
<x>516</x>
468
<y>4343</y>
469
</point>
470
<point id="116">
471
<x>553</x>
472
<y>4336</y>
473
</point>
474
<point id="117">
475
<x>547</x>
476
<y>4418</y>
477
</point>
478
<point id="118">
479
<x>691</x>
480
<y>4380</y>
481
</point>
482
<point id="119">
483
<x>685</x>
484
<y>4261</y>
485
</point>
486
<point id="120">
487
<x>654</x>
488
<y>4236</y>
489
</point>
490
<point id="121">
491
<x>622</x>
492
<y>4211</y>
493
</point>
494
<point id="122">
495
<x>685</x>
496
<y>4198</y>
497
</point>
498
<point id="123">
499
<x>654</x>
500
<y>4023</y>
501
</point>
502
<point id="124">
503
<x>610</x>
504
<y>4023</y>
505
</point>
506
<point id="125">
507
<x>585</x>
508
<y>3953</y>
509
</point>
510
<point id="126">
511
<x>641</x>
512
<y>3947</y>
513
</point>
514
<point id="127">
515
<x>660</x>
516
<y>3884</y>
517
</point>
518
<point id="128">
519
<x>792</x>
520
<y>3853</y>
521
</point>
522
<point id="129">
523
<x>729</x>
524
<y>3828</y>
525
</point>
526
<point id="130">
527
<x>735</x>
528
<y>3790</y>
529
</point>
530
<point id="131">
531
<x>779</x>
532
<y>3797</y>
533
</point>
534
<point id="132">
535
<x>748</x>
536
<y>3740</y>
537
</point>
538
<point id="133">
539
<x>754</x>
540
<y>3702</y>
541
</point>
542
<point id="134">
543
<x>779</x>
544
<y>3621</y>
545
</point>
546
<point id="135">
547
<x>861</x>
548
<y>3633</y>
549
</point>
550
<point id="136">
551
<x>842</x>
552
<y>3677</y>
553
</point>
554
<point id="137">
555
<x>1024</x>
556
<y>3684</y>
557
</point>
558
<point id="138">
559
<x>1024</x>
560
<y>3633</y>
561
</point>
562
<point id="139">
563
<x>1099</x>
564
<y>3646</y>
565
</point>
566
<point id="140">
567
<x>1099</x>
568
<y>3684</y>
569
</point>
570
<point id="141">
571
<x>1212</x>
572
<y>3677</y>
573
</point>
574
<point id="142">
575
<x>1237</x>
576
<y>3652</y>
577
</point>
578
<point id="143">
579
<x>1281</x>
580
<y>3652</y>
581
</point>
582
<point id="144">
583
<x>1281</x>
584
<y>3771</y>
585
</point>
586
<point id="145">
587
<x>1325</x>
588
<y>4060</y>
589
</point>
590
<point id="146">
591
<x>1394</x>
592
<y>4324</y>
593
</point>
594
<point id="147">
595
<x>1401</x>
596
<y>4361</y>
597
</point>
598
<point id="148">
599
<x>1338</x>
600
<y>4380</y>
601
</point>
602
<point id="149">
603
<x>1344</x>
604
<y>4468</y>
605
</point>
606
<point id="150">
607
<x>1300</x>
608
<y>4474</y>
609
</point>
610
<point id="151">
611
<x>1338</x>
612
<y>4500</y>
613
</point>
614
<point id="152">
615
<x>1338</x>
616
<y>4531</y>
617
</point>
618
<point id="153">
619
<x>1288</x>
620
<y>4550</y>
621
</point>
622
<point id="154">
623
<x>1313</x>
624
<y>4625</y>
625
</point>
626
<point id="155">
627
<x>1369</x>
628
<y>4606</y>
629
</point>
630
<point id="156">
631
<x>1419</x>
632
<y>4544</y>
633
</point>
634
<point id="157">
635
<x>1438</x>
636
<y>4606</y>
637
</point>
638
<point id="158">
639
<x>1432</x>
640
<y>4644</y>
641
</point>
642
<point id="159">
643
<x>1401</x>
644
<y>4682</y>
645
</point>
646
<point id="160">
647
<x>1407</x>
648
<y>4732</y>
649
</point>
650
<point id="161">
651
<x>1344</x>
652
<y>4801</y>
653
</point>
654
<point id="162">
655
<x>1394</x>
656
<y>4813</y>
657
</point>
658
<point id="163">
659
<x>1432</x>
660
<y>4757</y>
661
</point>
662
<point id="164">
663
<x>1489</x>
664
<y>4744</y>
665
</point>
666
<point id="165">
667
<x>1614</x>
668
<y>4707</y>
669
</point>
670
<point id="166">
671
<x>1470</x>
672
<y>3910</y>
673
</point>
674
<point id="167">
675
<x>2079</x>
676
<y>3910</y>
677
</point>
678
<point id="168">
679
<x>2079</x>
680
<y>3941</y>
681
</point>
682
<point id="169">
683
<x>2003</x>
684
<y>3953</y>
685
</point>
686
<point id="170">
687
<x>2003</x>
688
<y>4041</y>
689
</point>
690
<point id="171">
691
<x>1922</x>
692
<y>4066</y>
693
</point>
694
<point id="172">
695
<x>1972</x>
696
<y>4092</y>
697
</point>
698
<point id="173">
699
<x>2053</x>
700
<y>4110</y>
701
</point>
702
<point id="174">
703
<x>2154</x>
704
<y>4104</y>
705
</point>
706
<point id="175">
707
<x>2192</x>
708
<y>4129</y>
709
</point>
710
<point id="176">
711
<x>2154</x>
712
<y>4154</y>
713
</point>
714
<point id="177">
715
<x>2210</x>
716
<y>4161</y>
717
</point>
718
<point id="178">
719
<x>2235</x>
720
<y>4104</y>
721
</point>
722
<point id="179">
723
<x>2305</x>
724
<y>4136</y>
725
</point>
726
<point id="180">
727
<x>2279</x>
728
<y>4186</y>
729
</point>
730
<point id="181">
731
<x>2374</x>
732
<y>4198</y>
733
</point>
734
<point id="182">
735
<x>2367</x>
736
<y>4387</y>
737
</point>
738
<point id="183">
739
<x>2687</x>
740
<y>4361</y>
741
</point>
742
<point id="184">
743
<x>2694</x>
744
<y>4399</y>
745
</point>
746
<point id="185">
747
<x>2738</x>
748
<y>4405</y>
749
</point>
750
<point id="186">
751
<x>2756</x>
752
<y>4380</y>
753
</point>
754
<point id="187">
755
<x>2819</x>
756
<y>4361</y>
757
</point>
758
<point id="188">
759
<x>2826</x>
760
<y>4374</y>
761
</point>
762
<point id="189">
763
<x>3070</x>
764
<y>4437</y>
765
</point>
766
<point id="190">
767
<x>3171</x>
768
<y>4744</y>
769
</point>
770
<point id="191">
771
<x>3227</x>
772
<y>4751</y>
773
</point>
774
<point id="192">
775
<x>3240</x>
776
<y>4650</y>
777
</point>
778
<point id="193">
779
<x>3284</x>
780
<y>4650</y>
781
</point>
782
<point id="194">
783
<x>3303</x>
784
<y>4700</y>
785
</point>
786
<point id="195">
787
<x>3334</x>
788
<y>4700</y>
789
</point>
790
<point id="196">
791
<x>3428</x>
792
<y>4675</y>
793
</point>
794
<point id="197">
795
<x>3428</x>
796
<y>4474</y>
797
</point>
798
<point id="198">
799
<x>3365</x>
800
<y>4449</y>
801
</point>
802
<point id="199">
803
<x>3372</x>
804
<y>4418</y>
805
</point>
806
<point id="200">
807
<x>3252</x>
808
<y>4405</y>
809
</point>
810
<point id="201">
811
<x>3315</x>
812
<y>4374</y>
813
</point>
814
<point id="202">
815
<x>3353</x>
816
<y>4330</y>
817
</point>
818
<point id="203">
819
<x>3390</x>
820
<y>4129</y>
821
</point>
822
<point id="204">
823
<x>3422</x>
824
<y>4117</y>
825
</point>
826
<point id="205">
827
<x>3416</x>
828
<y>3847</y>
829
</point>
830
<point id="206">
831
<x>3365</x>
832
<y>3690</y>
833
</point>
834
<point id="207">
835
<x>3472</x>
836
<y>3671</y>
837
</point>
838
<point id="208">
839
<x>3353</x>
840
<y>3495</y>
841
</point>
842
<point id="209">
843
<x>3635</x>
844
<y>3326</y>
845
</point>
846
<point id="210">
847
<x>3648</x>
848
<y>3276</y>
849
</point>
850
<point id="211">
851
<x>3698</x>
852
<y>3250</y>
853
</point>
854
<point id="212">
855
<x>3692</x>
856
<y>2918</y>
857
</point>
858
<point id="213">
859
<x>3397</x>
860
<y>2912</y>
861
</point>
862
<point id="214">
863
<x>3384</x>
864
<y>2886</y>
865
</point>
866
<point id="215">
867
<x>3334</x>
868
<y>2880</y>
869
</point>
870
<point id="216">
871
<x>3328</x>
872
<y>2836</y>
873
</point>
874
<point id="217">
875
<x>3171</x>
876
<y>2849</y>
877
</point>
878
<point id="218">
879
<x>3164</x>
880
<y>2522</y>
881
</point>
882
<point id="219">
883
<x>2964</x>
884
<y>2529</y>
885
</point>
886
<point id="220">
887
<x>2957</x>
888
<y>2598</y>
889
</point>
890
<point id="221">
891
<x>2474</x>
892
<y>2585</y>
893
</point>
894
<point id="222">
895
<x>2468</x>
896
<y>1443</y>
897
</point>
898
<point id="223">
899
<x>2204</x>
900
<y>1694</y>
901
</point>
902
<point id="224">
903
<x>2223</x>
904
<y>1725</y>
905
</point>
906
<point id="225">
907
<x>2198</x>
908
<y>1738</y>
909
</point>
910
<point id="226">
911
<x>2166</x>
912
<y>1725</y>
913
</point>
914
<point id="227">
915
<x>1947</x>
916
<y>1989</y>
917
</point>
918
<point id="228">
919
<x>1972</x>
920
<y>1844</y>
921
</point>
922
<point id="229">
923
<x>1928</x>
924
<y>1719</y>
925
</point>
926
<point id="230">
927
<x>1840</x>
928
<y>1625</y>
929
</point>
930
<point id="231">
931
<x>1771</x>
932
<y>1543</y>
933
</point>
934
<point id="232">
935
<x>1658</x>
936
<y>1506</y>
937
</point>
938
<point id="233">
939
<x>1520</x>
940
<y>1449</y>
941
</point>
942
<point id="234">
943
<x>1394</x>
944
<y>1160</y>
945
</point>
946
<point id="235">
947
<x>1765</x>
948
<y>966</y>
949
</point>
950
<point id="236">
951
<x>1777</x>
952
<y>909</y>
953
</point>
954
<point id="237">
955
<x>1652</x>
956
<y>639</y>
957
</point>
958
<point id="238">
959
<x>1495</x>
960
<y>708</y>
961
</point>
962
<point id="239">
963
<x>1445</x>
964
<y>777</y>
965
</point>
966
<point id="240">
967
<x>1332</x>
968
<y>608</y>
969
</point>
970
<point id="241">
971
<x>1156</x>
972
<y>683</y>
973
</point>
974
<point id="242">
975
<x>1068</x>
976
<y>526</y>
977
</point>
978
<point id="243">
979
<x>1106</x>
980
<y>482</y>
981
</point>
982
<point id="244">
983
<x>1081</x>
984
<y>432</y>
985
</point>
986
<point id="245">
987
<x>1055</x>
988
<y>438</y>
989
</point>
990
<point id="246">
991
<x>1018</x>
992
<y>338</y>
993
</point>
994
<point id="247">
995
<x>936</x>
996
<y>282</y>
997
</point>
998
<point id="248">
999
<x>1062</x>
1000
<y>200</y>
1001
</point>
1002
<point id="249">
1003
<x>1018</x>
1004
<y>156</y>
1005
</point>
1006
<point id="250">
1007
<x>980</x>
1008
<y>162</y>
1009
</point>
1010
<point id="251">
1011
<x>968</x>
1012
<y>131</y>
1013
</point>
1014
<point id="252">
1015
<x>986</x>
1016
<y>62</y>
1017
</point>
1018
<point id="253">
1019
<x>936</x>
1020
<y>81</y>
1021
</point>
1022
<point id="254">
1023
<x>911</x>
1024
<y>156</y>
1025
</point>
1026
<point id="255">
1027
<x>873</x>
1028
<y>181</y>
1029
</point>
1030
<point id="256">
1031
<x>848</x>
1032
<y>12</y>
1033
</point>
1034
<point id="257">
1035
<x>3754</x>
1036
<y>12</y>
1037
</point>
1038
<point id="258">
1039
<x>3742</x>
1040
<y>5190</y>
1041
</point>
1042
<point id="259">
1043
<x>-29</x>
1044
<y>5165</y>
1045
</point>
1046
<point id="260">
1047
<x>-4</x>
1048
<y>5</y>
1049
</point>
1050
<point id="261">
1051
<x>836</x>
1052
<y>5</y>
1053
</point>
1054
<point id="262">
1055
<x>855</x>
1056
<y>162</y>
1057
</point>
1058
</obstacle>
1059
<obstacle>
1060
<point id="0">
1061
<x>1155</x>
1062
<y>676</y>
1063
</point>
1064
<point id="1">
1065
<x>1140</x>
1066
<y>687</y>
1067
</point>
1068
<point id="2">
1069
<x>1315</x>
1070
<y>1037</y>
1071
</point>
1072
<point id="3">
1073
<x>1325</x>
1074
<y>1033</y>
1075
</point>
1076
</obstacle>
1077
<obstacle>
1078
<point id="0">
1079
<x>1310</x>
1080
<y>798</y>
1081
</point>
1082
<point id="1">
1083
<x>1406</x>
1084
<y>986</y>
1085
</point>
1086
<point id="2">
1087
<x>1483</x>
1088
<y>944</y>
1089
</point>
1090
<point id="3">
1091
<x>1499</x>
1092
<y>980</y>
1093
</point>
1094
<point id="4">
1095
<x>1555</x>
1096
<y>954</y>
1097
</point>
1098
<point id="5">
1099
<x>1590</x>
1100
<y>891</y>
1101
</point>
1102
<point id="6">
1103
<x>1749</x>
1104
<y>828</y>
1105
</point>
1106
<point id="7">
1107
<x>1741</x>
1108
<y>819</y>
1109
</point>
1110
<point id="8">
1111
<x>1740</x>
1112
<y>819</y>
1113
</point>
1114
<point id="9">
1115
<x>1716</x>
1116
<y>825</y>
1117
</point>
1118
<point id="10">
1119
<x>1411</x>
1120
<y>966</y>
1121
</point>
1122
<point id="11">
1123
<x>1330</x>
1124
<y>792</y>
1125
</point>
1126
</obstacle>
1127
<obstacle>
1128
<point id="0">
1129
<x>1635</x>
1130
<y>652</y>
1131
</point>
1132
<point id="1">
1133
<x>1711</x>
1134
<y>816</y>
1135
</point>
1136
<point id="2">
1137
<x>1738</x>
1138
<y>806</y>
1139
</point>
1140
<point id="3">
1141
<x>1663</x>
1142
<y>642</y>
1143
</point>
1144
</obstacle>
1145
<obstacle>
1146
<point id="0">
1147
<x>1529</x>
1148
<y>1482</y>
1149
</point>
1150
<point id="1">
1151
<x>1522</x>
1152
<y>1507</y>
1153
</point>
1154
<point id="2">
1155
<x>1535</x>
1156
<y>1528</y>
1157
</point>
1158
<point id="3">
1159
<x>1564</x>
1160
<y>1530</y>
1161
</point>
1162
<point id="4">
1163
<x>1579</x>
1164
<y>1510</y>
1165
</point>
1166
<point id="5">
1167
<x>1569</x>
1168
<y>1482</y>
1169
</point>
1170
</obstacle>
1171
<obstacle>
1172
<point id="0">
1173
<x>1337</x>
1174
<y>1641</y>
1175
</point>
1176
<point id="1">
1177
<x>1325</x>
1178
<y>1659</y>
1179
</point>
1180
<point id="2">
1181
<x>1343</x>
1182
<y>1668</y>
1183
</point>
1184
<point id="3">
1185
<x>1354</x>
1186
<y>1652</y>
1187
</point>
1188
</obstacle>
1189
<obstacle>
1190
<point id="0">
1191
<x>1280</x>
1192
<y>1784</y>
1193
</point>
1194
<point id="1">
1195
<x>1297</x>
1196
<y>1760</y>
1197
</point>
1198
<point id="2">
1199
<x>1372</x>
1200
<y>1706</y>
1201
</point>
1202
<point id="3">
1203
<x>1426</x>
1204
<y>1685</y>
1205
</point>
1206
<point id="4">
1207
<x>1424</x>
1208
<y>1713</y>
1209
</point>
1210
<point id="5">
1211
<x>1366</x>
1212
<y>1736</y>
1213
</point>
1214
<point id="6">
1215
<x>1297</x>
1216
<y>1799</y>
1217
</point>
1218
</obstacle>
1219
<obstacle>
1220
<point id="0">
1221
<x>1400</x>
1222
<y>1785</y>
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff