-
Notifications
You must be signed in to change notification settings - Fork 25
/
connectivity_tutorial.html
670 lines (641 loc) · 85.5 KB
/
connectivity_tutorial.html
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connectivity tutorial • prioritizr</title>
<!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="../apple-touch-icon.png">
<link rel="apple-touch-icon" type="image/png" sizes="120x120" href="../apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" type="image/png" sizes="76x76" href="../apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" type="image/png" sizes="60x60" href="../apple-touch-icon-60x60.png">
<!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css">
<script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
<!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet">
<script src="../pkgdown.js"></script><!-- docsearch --><script src="../docsearch.js"></script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/docsearch.js/2.6.3/docsearch.min.css" integrity="sha256-QOSRU/ra9ActyXkIBbiIB144aDBdtvXBcNc3OTNuX/Q=" crossorigin="anonymous">
<link href="../docsearch.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/jquery.mark.min.js" integrity="sha256-4HLtjeVgH0eIB3aZ9mLYF6E8oU5chNdjU6p6rrXpl9U=" crossorigin="anonymous"></script><link href="../extra.css" rel="stylesheet">
<meta property="og:title" content="Connectivity tutorial">
<meta property="og:description" content="prioritizr">
<meta property="og:image" content="https://prioritizr.net/logo.png">
<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--><!-- Global site tag (gtag.js) - Google Analytics --><script async src="https://www.googletagmanager.com/gtag/js?id=UA-70466840-4"></script><script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-70466840-4');
</script>
</head>
<body data-spy="scroll" data-target="#toc">
<div class="container template-article">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">prioritizr</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">7.2.2</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="../articles/prioritizr.html">Get started</a>
</li>
<li>
<a href="../reference/index.html">Reference</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Articles
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="../articles/package_overview.html">Package overview</a>
</li>
<li>
<a href="../articles/gurobi_installation_guide.html">Gurobi installation guide</a>
</li>
<li>
<a href="../articles/solver_benchmarks.html">Solver benchmarks</a>
</li>
<li>
<a href="../articles/publication_record.html">Publication record</a>
</li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Tutorials
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="../articles/connectivity_tutorial.html">Connectivity</a>
</li>
<li>
<a href="../articles/calibrating_trade-offs_tutorial.html">Calibrating trade-offs</a>
</li>
<li>
<a href="../articles/management_zones_tutorial.html">Management zones</a>
</li>
</ul>
</li>
<li>
<a href="../news/index.html">Changelog</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/prioritizr/prioritizr/" class="external-link">
<span class="fab fa-github fa-lg"></span>
</a>
</li>
</ul>
<form class="navbar-form navbar-right hidden-xs hidden-sm" role="search">
<div class="form-group">
<input type="search" class="form-control" name="search-input" id="search-input" placeholder="Search..." aria-label="Search for..." autocomplete="off">
</div>
</form>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container -->
</div>
<!--/.navbar -->
</header><div class="row">
<div class="col-md-9 contents">
<div class="page-header toc-ignore">
<h1 data-toc-skip>Connectivity tutorial</h1>
<small class="dont-index">Source: <a href="https://github.com/prioritizr/prioritizr/blob/HEAD/vignettes/connectivity_tutorial.Rmd" class="external-link"><code>vignettes/connectivity_tutorial.Rmd</code></a></small>
<div class="hidden name"><code>connectivity_tutorial.Rmd</code></div>
</div>
<div class="section level2">
<h2 id="introduction">Introduction<a class="anchor" aria-label="anchor" href="#introduction"></a>
</h2>
<p>Connectivity is a key consideration in systematic conservation planning <span class="citation">(Margules & Pressey 2000; Briers 2002)</span>. This is because isolated and fragmented populations are often more vulnerable to extinction <span class="citation">(Dixo <em>et al.</em> 2009; Olds <em>et al.</em> 2012; Hodgson <em>et al.</em> 2009)</span>. To promote connectivity in prioritizations, a range of different approaches are available <span class="citation">(reviewed in Balbar & Metaxas 2019)</span>. These approaches can solely on the spatial configuration of a prioritization to enhance structural connectivity <span class="citation">(e.g, reducing the spatial fragmentation of a prioritization; Watts <em>et al.</em> 2009)</span>. They can also leverage data – such as environmental, river flow, and telemetry data – to generate prioritizations that promote functional connectivity <span class="citation">(e.g., Hermoso <em>et al.</em> 2012; Dwyer <em>et al.</em> 2019; Leonard <em>et al.</em> 2017)</span>.</p>
<p>The aim of this tutorial is to show how connectivity can be incorporated into prioritizations using the <em>prioritizr R</em> package. Here we will explore various approaches for incorporating connectivity, and see how they alter the spatial configuration of prioritizations. As you will discover, many of these approaches involve setting threshold or penalty values to specify the relative importance of connectivity compared to other criteria (e.g., overall cost). For more information on calibrating these values, please see the <a href="calibrating_trade-offs_tutorial.html"><em>Calibrating trade-offs tutorial</em></a>.</p>
</div>
<div class="section level2">
<h2 id="data">Data<a class="anchor" aria-label="anchor" href="#data"></a>
</h2>
<p>The dataset used in this tutorial was created for the Coastal Douglas-fir Conservation Partnership <span class="citation">(CDFCP; Morrell <em>et al.</em> 2017)</span>. Although the original dataset covers a much larger area; for brevity, here we focus only on Salt Spring Island, British Columbia. Briefly, Salt Spring Island supports a diverse and globally unique mix of dry forest and savanna habitats. Today, these habitats are critically threatened due to land conversion, invasive species, and altered disturbance regimes. For more information on the data, please refer to the <a href="https://arcese.forestry.ubc.ca/marxan-tool/" class="external-link">Marxan tool portal</a> and the <a href="https://peter-arcese-lab.sites.olt.ubc.ca/files/2016/09/CDFCP_tutorial_2017_05.pdf" class="external-link">tool tutorial</a>.</p>
<center>
<div class="figure">
<img src="figures/map.jpg" alt=""><p class="caption">Extent of Coastal Douglas-fir Conservation Partnership Tool area and location of Salt Spring Island</p>
</div>
</center>
<p>Let’s begin by loading the packages and data for this tutorial. Since this tutorial requires the <em>prioritizrdata R</em> package, please ensure that it is installed. Specifically, two objects underpin the data for this tutorial. The <code>salt_pu</code> object specifies the planning unit data as a raster layer (i.e., <code>RasterLayer</code> object), and the <code>salt_features</code> object contains biodiversity data represented as a multi-band raster stack (i.e., a <code>RasterStack</code> object).</p>
<div class="sourceCode" id="cb1"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># load packages</span></span>
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://prioritizr.net">prioritizr</a></span><span class="op">)</span></span>
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://prioritizr.github.io/prioritizrdata/" class="external-link">prioritizrdata</a></span><span class="op">)</span></span>
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://r-spatial.github.io/sf/" class="external-link">sf</a></span><span class="op">)</span></span>
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://rspatial.org/raster" class="external-link">raster</a></span><span class="op">)</span></span>
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://scales.r-lib.org" class="external-link">scales</a></span><span class="op">)</span></span>
<span></span>
<span><span class="co"># load planning unit data</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/utils/data.html" class="external-link">data</a></span><span class="op">(</span><span class="va">salt_pu</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># load ecological data</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/utils/data.html" class="external-link">data</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span></span></code></pre></div>
<p>Now we will conduct some preliminary processing. Specifically, we will aggregate from the 100 m resolution to the 300 m resolution. This is to reduce the time needed to generate prioritizations in this tutorial. In practice, we generally recommend consider other criteria too – such as the spatial scale that is relevant for decision making and the resolution of available datasets – when deciding on an appropriate scale for planning units.</p>
<div class="sourceCode" id="cb2"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># aggregate data to coarser resolution</span></span>
<span><span class="va">salt_pu</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/stats/aggregate.html" class="external-link">aggregate</a></span><span class="op">(</span><span class="va">salt_pu</span>, fact <span class="op">=</span> <span class="fl">3</span><span class="op">)</span></span>
<span><span class="va">salt_features</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/stats/aggregate.html" class="external-link">aggregate</a></span><span class="op">(</span><span class="va">salt_features</span>, fact <span class="op">=</span> <span class="fl">3</span><span class="op">)</span></span></code></pre></div>
<p>Next, let’s have a look at the <code>salt_pu</code> object. Here each grid cell represents a planning unit, and the grid cell values denote acquisition costs <span class="citation">(BC Assessment 2015)</span>. To aid with visualization, we will log-transform the values when plotting them on a map.</p>
<div class="sourceCode" id="cb3"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># print planning unit data</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">salt_pu</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## class : RasterLayer </span></span>
<span><span class="co">## dimensions : 94, 67, 6298 (nrow, ncol, ncell)</span></span>
<span><span class="co">## resolution : 300, 300 (x, y)</span></span>
<span><span class="co">## extent : 454589.9, 474689.9, 5394414, 5422614 (xmin, xmax, ymin, ymax)</span></span>
<span><span class="co">## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 </span></span>
<span><span class="co">## source : memory</span></span>
<span><span class="co">## names : salt_pu </span></span>
<span><span class="co">## values : 0.02552, 8290.383 (min, max)</span></span></code></pre>
<div class="sourceCode" id="cb5"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot map showing the planning units costs on a log-scale</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/Log.html" class="external-link">log</a></span><span class="op">(</span><span class="va">salt_pu</span><span class="op">)</span>, main <span class="op">=</span> <span class="st">"Planning unit costs (log)"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-5-1.png" width="384" style="display: block; margin: auto;"></p>
<p>Let’s also look at the <code>salt_features</code> object. This object is a stack of raster layers, with each layer corresponding to a different variable that describes a particular aspect of biodiversity. The first four layers correspond to different ecological communities (i.e., <em>Old Forest</em>, <em>Savannah</em>, <em>Wetland</em>, and <em>Shrub</em> communities), and their cell values indicate the probability of encountering a bird species associated a given community. The fifth layer describes the inverse probability of occurrence of human commensal species. In this tutorial, we will use the first four layers as biodiversity features, and the fifth layer to help parameterize connectivity (wherein higher values denote greater connectivity). So, let’s extract the data and visualize them.</p>
<div class="sourceCode" id="cb6"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># print original data</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## class : RasterBrick </span></span>
<span><span class="co">## dimensions : 94, 67, 6298, 5 (nrow, ncol, ncell, nlayers)</span></span>
<span><span class="co">## resolution : 300, 300 (x, y)</span></span>
<span><span class="co">## extent : 454589.9, 474689.9, 5394414, 5422614 (xmin, xmax, ymin, ymax)</span></span>
<span><span class="co">## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 </span></span>
<span><span class="co">## source : memory</span></span>
<span><span class="co">## names : salt_features.1, salt_features.2, salt_features.3, salt_features.4, salt_features.5 </span></span>
<span><span class="co">## min values : 0.3596232, 0.3340984, 0.1420134, 0.4415211, 0.4060181 </span></span>
<span><span class="co">## max values : 0.8951858, 0.6440319, 0.5926431, 0.8065580, 0.8969550</span></span></code></pre>
<div class="sourceCode" id="cb8"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># extract connectivity data</span></span>
<span><span class="va">salt_con</span> <span class="op"><-</span> <span class="va">salt_features</span><span class="op">[[</span><span class="fu"><a href="https://rdrr.io/pkg/raster/man/nlayers.html" class="external-link">nlayers</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span><span class="op">]</span><span class="op">]</span></span>
<span></span>
<span><span class="co"># print connectivity data</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">salt_con</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## class : RasterLayer </span></span>
<span><span class="co">## dimensions : 94, 67, 6298 (nrow, ncol, ncell)</span></span>
<span><span class="co">## resolution : 300, 300 (x, y)</span></span>
<span><span class="co">## extent : 454589.9, 474689.9, 5394414, 5422614 (xmin, xmax, ymin, ymax)</span></span>
<span><span class="co">## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 </span></span>
<span><span class="co">## source : memory</span></span>
<span><span class="co">## names : salt_features.5 </span></span>
<span><span class="co">## values : 0.4060181, 0.896955 (min, max)</span></span></code></pre>
<div class="sourceCode" id="cb10"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot map showing the connectivity data</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">salt_con</span>, main <span class="op">=</span> <span class="st">"Connectivity data"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-7-1.png" width="384" style="display: block; margin: auto;"></p>
<div class="sourceCode" id="cb11"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># extract ecological communities and use these as features</span></span>
<span><span class="va">salt_features</span> <span class="op"><-</span> <span class="va">salt_features</span><span class="op">[[</span><span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq_len</a></span><span class="op">(</span><span class="fl">4</span><span class="op">)</span><span class="op">]</span><span class="op">]</span></span>
<span></span>
<span><span class="co"># assign names to features</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/names.html" class="external-link">names</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"Old_Forest"</span>, <span class="st">"Savannah"</span>, <span class="st">"Wetland"</span>, <span class="st">"Shrub"</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># print features</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## class : RasterBrick </span></span>
<span><span class="co">## dimensions : 94, 67, 6298, 4 (nrow, ncol, ncell, nlayers)</span></span>
<span><span class="co">## resolution : 300, 300 (x, y)</span></span>
<span><span class="co">## extent : 454589.9, 474689.9, 5394414, 5422614 (xmin, xmax, ymin, ymax)</span></span>
<span><span class="co">## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 </span></span>
<span><span class="co">## source : memory</span></span>
<span><span class="co">## names : Old_Forest, Savannah, Wetland, Shrub </span></span>
<span><span class="co">## min values : 0.3596232, 0.3340984, 0.1420134, 0.4415211 </span></span>
<span><span class="co">## max values : 0.8951858, 0.6440319, 0.5926431, 0.8065580</span></span></code></pre>
<div class="sourceCode" id="cb13"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot map showing the distribution of the features</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">salt_features</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/names.html" class="external-link">names</a></span><span class="op">(</span><span class="va">salt_features</span><span class="op">)</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-9-1.png" width="672" style="display: block; margin: auto;"></p>
</div>
<div class="section level2">
<h2 id="baseline-problem">Baseline problem<a class="anchor" aria-label="anchor" href="#baseline-problem"></a>
</h2>
<p>In this tutorial, we will explore a few different ways of incorporating connectivity into prioritizations. To enable comparisons among prioritizations based on different approaches, we will first create a baseline problem formulation that we will subsequently customize to incorporate connectivity. Specifically, we will formulate the baseline problem using the minimum set objective. We will use representation targets of 17% – based on <a href="https://www.cbd.int/sp/targets/" class="external-link">Aichi Biodiversity Target 11</a> – to provide adequate coverage of each ecological community. Additionally, because land properties on Salt Spring Island can either be acquired in their entirety or not at all, we will use binary decision types. This means that planning units are either selected in the solution or not selected in the solution—planning units cannot be partially acquired. Given all these details, let’s formulate the baseline problem.</p>
<div class="sourceCode" id="cb14"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem</span></span>
<span><span class="va">p0</span> <span class="op"><-</span> <span class="fu"><a href="../reference/problem.html">problem</a></span><span class="op">(</span><span class="va">salt_pu</span>, <span class="va">salt_features</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_min_set_objective.html">add_min_set_objective</a></span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_relative_targets.html">add_relative_targets</a></span><span class="op">(</span><span class="fl">0.17</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_binary_decisions.html">add_binary_decisions</a></span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_default_solver.html">add_default_solver</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># print problem</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">p0</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## Conservation Problem</span></span>
<span><span class="co">## planning units: RasterLayer (2389 units)</span></span>
<span><span class="co">## cost: min: 0.02552, max: 8290.38315</span></span>
<span><span class="co">## features: Old_Forest, Savannah, Wetland, Shrub (4 features)</span></span>
<span><span class="co">## objective: Minimum set objective </span></span>
<span><span class="co">## targets: Relative targets [targets (min: 0.17, max: 0.17)]</span></span>
<span><span class="co">## decisions: Binary decision </span></span>
<span><span class="co">## constraints: <none></span></span>
<span><span class="co">## penalties: <none></span></span>
<span><span class="co">## portfolio: default</span></span>
<span><span class="co">## solver: Gurobi [first_feasible (0), gap (0.1), node_file_start (-1), numeric_focus (0), presolve (2), threads (1), time_limit (2147483647), verbose (1)]</span></span></code></pre>
<p>After formulating the baseline problem, we can solve it to generate a prioritization.</p>
<div class="sourceCode" id="cb16"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># solve problem</span></span>
<span><span class="va">s0</span> <span class="op"><-</span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="va">p0</span><span class="op">)</span></span></code></pre></div>
<div class="sourceCode" id="cb17"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># print solution</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">s0</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## class : RasterLayer </span></span>
<span><span class="co">## dimensions : 94, 67, 6298 (nrow, ncol, ncell)</span></span>
<span><span class="co">## resolution : 300, 300 (x, y)</span></span>
<span><span class="co">## extent : 454589.9, 474689.9, 5394414, 5422614 (xmin, xmax, ymin, ymax)</span></span>
<span><span class="co">## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 </span></span>
<span><span class="co">## source : memory</span></span>
<span><span class="co">## names : salt_pu </span></span>
<span><span class="co">## values : 0, 1 (min, max)</span></span></code></pre>
<div class="sourceCode" id="cb19"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot solution</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="va">s0</span>, main <span class="op">=</span> <span class="st">"Baseline prioritization"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span>,</span>
<span> breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-13-1.png" width="384" style="display: block; margin: auto;"></p>
<p>Next, let’s explore some options for incorporating connectivity.</p>
</div>
<div class="section level2">
<h2 id="adding-constraints">Adding constraints<a class="anchor" aria-label="anchor" href="#adding-constraints"></a>
</h2>
<p>Let’s explore approaches for promoting connectivity in prioritizations by adding constraints to the baseline problem formulation. These approaches ensure that prioritizations exhibit certain characteristics <span class="citation">(e.g., ensure prioritizations form a contiguous reserve; Önal & Briers 2006)</span>. This means that, regardless of the optimality gap used to generate a prioritization, the prioritization will always exhibit these characteristics.</p>
<div class="section level3">
<h3 id="neighbor-constraints">Neighbor constraints<a class="anchor" aria-label="anchor" href="#neighbor-constraints"></a>
</h3>
<p>Neighbor constraints can be added to ensure that each selected planning unit has a certain number of neighbors surrounding it (using the <code><a href="../reference/add_neighbor_constraints.html">add_neighbor_constraints()</a></code> function) <span class="citation">(based on Billionnet 2013)</span>. The <code>k</code> parameter can be used to specify the required number of neighbors for each selected planning unit. Let’s generate a prioritization by specifying that each planning unit requires at least two neighbors.</p>
<div class="sourceCode" id="cb20"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added neighbor constraints and solve it</span></span>
<span><span class="va">s1</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_neighbor_constraints.html">add_neighbor_constraints</a></span><span class="op">(</span>k <span class="op">=</span> <span class="fl">2</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s1</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"neighbors constraints"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-15-1.png" width="672" style="display: block; margin: auto;"></p>
</div>
<div class="section level3">
<h3 id="contiguity-constraints">Contiguity constraints<a class="anchor" aria-label="anchor" href="#contiguity-constraints"></a>
</h3>
<p>Contiguity constraints can be added to ensure that all planning units form a single contiguous reserve (using the <code><a href="../reference/add_contiguity_constraints.html">add_contiguity_constraints()</a></code> function) <span class="citation">(similar to Önal & Briers 2006)</span>. These constraints are extremely complex. As such, they can only be applied to small conservation planning problems and the <em>Gurobi</em> solver is required to solve them in a feasible period of time. Since it would take a long time to generate a near-optimal prioritization for this dataset with contiguity constraints, we will also tell the solver to simply return the first solution that it finds which meets the representation targets and the contiguity constraints.</p>
<div class="sourceCode" id="cb21"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added contiguity constraints and solve it</span></span>
<span><span class="va">s2</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_contiguity_constraints.html">add_contiguity_constraints</a></span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_gurobi_solver.html">add_gurobi_solver</a></span><span class="op">(</span>first_feasible <span class="op">=</span> <span class="cn">TRUE</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## Warning in res(x, ...): overwriting previously defined solver</span></span></code></pre>
<div class="sourceCode" id="cb23"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s2</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"contiguity constraints"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-17-1.png" width="672" style="display: block; margin: auto;"></p>
<p>There is also an even more complex version of the contiguity constraints that is available. These constraints – termed feature contiguity constraints <span class="citation">(similar to Cerdeira <em>et al.</em> 2010)</span> – can be added to ensure that all of the selected planning units used to the reach representation targets within a prioritization form a contiguous network for each feature (using the <code><a href="../reference/add_feature_contiguity_constraints.html">add_feature_contiguity_constraints()</a></code> function). In other words, they ensure that each feature can disperse through the prioritization to access a target threshold amount of habitat. However, these constraints are extraordinarily complex, only feasible for small problems, and require preprocessing routines to identify initial solutions. As such, we will not consider them in this tutorial.</p>
</div>
<div class="section level3">
<h3 id="linear-constraints">Linear constraints<a class="anchor" aria-label="anchor" href="#linear-constraints"></a>
</h3>
<p>Linear constraints can be used to specify that the prioritizations must meet an arbitrary set of criteria. As such, they can be used to ensure that prioritizations provide adequate coverage of planning units that have facilitate a high level of connectivity. Recall that the <code>salt_con</code> data are used to describe connectivity across the study area. Since higher values denote planning units with greater connectivity, we could use linear constraints to ensure that the total sum of connectivity values – based on this dataset – meets a particular threshold (e.g. cover at least 30% of the total amount). This would effectively be treating connectivity as an additional feature <span class="citation">(similar to Daigle <em>et al.</em> 2020)</span>.</p>
<div class="sourceCode" id="cb24"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># compute threshold for constraints</span></span>
<span><span class="co">## here we use a threshold of 30% of the total connectivity values</span></span>
<span><span class="va">threshold</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/cellStats.html" class="external-link">cellStats</a></span><span class="op">(</span><span class="va">salt_con</span>, <span class="st">"sum"</span><span class="op">)</span> <span class="op">*</span> <span class="fl">0.3</span></span>
<span></span>
<span><span class="co"># print threshold</span></span>
<span><span class="fu"><a href="../reference/print.html">print</a></span><span class="op">(</span><span class="va">threshold</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## [1] 520.7628</span></span></code></pre>
<div class="sourceCode" id="cb26"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added linear constraints and solve it</span></span>
<span><span class="va">s3</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_linear_constraints.html">add_linear_constraints</a></span><span class="op">(</span></span>
<span> data <span class="op">=</span> <span class="va">salt_con</span>, threshold <span class="op">=</span> <span class="va">threshold</span>, sense <span class="op">=</span> <span class="st">">="</span></span>
<span> <span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s3</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"linear constraints"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-20-1.png" width="672" style="display: block; margin: auto;"></p>
<p>Although using continuous values has the advantage that the prioritization process can explicitly account for differences in the relative amount of connectivity facilitated by different planning units, the disadvantage is that the prioritization could potentially focus on selecting lots of planning units with low connectivity values. To avoid this result, one strategy is to convert the continuous values into binary values using a threshold limit <span class="citation">(similar to Carroll 2021)</span>. By applying such a threshold limit, linear constraints can then be used to ensure that the prioritization selects a minimum amount of planning units with high connectivity values (i.e., those with connectivity values that are equal to or greater than the threshold limit).</p>
<div class="sourceCode" id="cb27"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># calculate threshold limit</span></span>
<span><span class="co">## here we set a threshold limit based on the median</span></span>
<span><span class="va">threshold_limit</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/stats/quantile.html" class="external-link">quantile</a></span><span class="op">(</span><span class="va">salt_con</span>, probs <span class="op">=</span> <span class="fl">0.5</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># convert continuous values to binary values</span></span>
<span><span class="va">salt_con_binary</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/Round.html" class="external-link">round</a></span><span class="op">(</span><span class="va">salt_con</span> <span class="op"><=</span> <span class="va">threshold_limit</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot binary values</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">salt_con_binary</span>, main <span class="op">=</span> <span class="st">"salt_con_binary"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-22-1.png" width="384" style="display: block; margin: auto;"></p>
<div class="sourceCode" id="cb28"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added linear constraints and solve it</span></span>
<span><span class="co">## note that we use the original threshold computed before,</span></span>
<span><span class="co">## to ensure the prioritization covers at least 30% of the total amount</span></span>
<span><span class="co">## connectivity values</span></span>
<span><span class="va">s4</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_linear_constraints.html">add_linear_constraints</a></span><span class="op">(</span></span>
<span> data <span class="op">=</span> <span class="va">salt_con_binary</span>, threshold <span class="op">=</span> <span class="va">threshold</span>, sense <span class="op">=</span> <span class="st">">="</span></span>
<span> <span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s4</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"linear constraints (binary)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-24-1.png" width="672" style="display: block; margin: auto;"></p>
<p>Another strategy is to clamp the continuous values below a threshold limit are assigned a value of zero <span class="citation">(similar to Hanson <em>et al.</em> 2020)</span>. This strategy has the advantage that (i) the prioritization won’t focus on selecting lots of planning units with low connectivity values to meet the constraint threshold, and (ii) the optimization process can use semi-continuous values to distinguish between places that can facilitate a moderate amount and a high amount of connectivity.</p>
<div class="sourceCode" id="cb29"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># clamp continuous values using the threshold limit we computed before</span></span>
<span><span class="va">salt_con_clamp</span> <span class="op"><-</span> <span class="va">salt_con</span></span>
<span><span class="va">salt_con_clamp</span><span class="op">[</span><span class="fu"><a href="https://rdrr.io/pkg/raster/man/which.html" class="external-link">Which</a></span><span class="op">(</span><span class="va">salt_con</span> <span class="op"><=</span> <span class="va">threshold_limit</span><span class="op">)</span><span class="op">]</span> <span class="op"><-</span> <span class="fl">0</span></span>
<span></span>
<span><span class="co"># plot clamped values</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">salt_con_clamp</span>, main <span class="op">=</span> <span class="st">"salt_con_clamp"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-26-1.png" width="384" style="display: block; margin: auto;"></p>
<div class="sourceCode" id="cb30"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added linear constraints and solve it</span></span>
<span><span class="co">## note that we use the original threshold computed before,</span></span>
<span><span class="co">## to ensure the prioritization covers at least 30% of the total amount</span></span>
<span><span class="co">## connectivity values</span></span>
<span><span class="va">s5</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_linear_constraints.html">add_linear_constraints</a></span><span class="op">(</span></span>
<span> data <span class="op">=</span> <span class="va">salt_con_clamp</span>, threshold <span class="op">=</span> <span class="va">threshold</span>, sense <span class="op">=</span> <span class="st">">="</span></span>
<span> <span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s5</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"linear constraints (clamped)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-28-1.png" width="672" style="display: block; margin: auto;"></p>
<p>If we were concerned that the prioritization did not facilitate a high enough level of connectivity, we could increase the <code>threshold</code> value or the <code>threshold_limit</code> value. For example, let’s increase the <code>threshold_limit</code> value used to clamp the continuous connectivity values.</p>
<div class="sourceCode" id="cb31"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># compute threshold limit</span></span>
<span><span class="va">threshold_limit2</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/stats/quantile.html" class="external-link">quantile</a></span><span class="op">(</span><span class="va">salt_con</span>, probs <span class="op">=</span> <span class="fl">0.7</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># clamp continuous values using the threshold limit we computed before</span></span>
<span><span class="va">salt_con_clamp2</span> <span class="op"><-</span> <span class="va">salt_con</span></span>
<span><span class="va">salt_con_clamp2</span><span class="op">[</span><span class="fu"><a href="https://rdrr.io/pkg/raster/man/which.html" class="external-link">Which</a></span><span class="op">(</span><span class="va">salt_con</span> <span class="op"><=</span> <span class="va">threshold_limit2</span><span class="op">)</span><span class="op">]</span> <span class="op"><-</span> <span class="fl">0</span></span>
<span></span>
<span><span class="co"># plot clamped values</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">salt_con_clamp2</span>, main <span class="op">=</span> <span class="st">"salt_con_clamp"</span>, axes <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-30-1.png" width="384" style="display: block; margin: auto;"></p>
<div class="sourceCode" id="cb32"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added linear constraints and solve it</span></span>
<span><span class="co">## note that we use the original threshold computed before,</span></span>
<span><span class="co">## to ensure the prioritization covers at least 30% of the total amount</span></span>
<span><span class="co">## connectivity values</span></span>
<span><span class="va">s6</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_linear_constraints.html">add_linear_constraints</a></span><span class="op">(</span></span>
<span> data <span class="op">=</span> <span class="va">salt_con_clamp2</span>, threshold <span class="op">=</span> <span class="va">threshold</span>, sense <span class="op">=</span> <span class="st">">="</span></span>
<span> <span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s6</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"linear constraints (clamped 2)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-32-1.png" width="672" style="display: block; margin: auto;"></p>
<p>Despite the advantages of clamping the connectivity values, we can see that the prioritization has a relatively high level of spatial fragmentation. In fact, all prioritizations generated using the linear constraints can potentially have this issue. This is because linear constraints do not explicitly account for the spatial arrangement of the planning units. As such, we recommend combining the linear constraints approach with another approach [e.g., the boundary penalties approach discussed below; <span class="citation">Carroll (2021)</span>].</p>
</div>
</div>
<div class="section level2">
<h2 id="adding-penalties">Adding penalties<a class="anchor" aria-label="anchor" href="#adding-penalties"></a>
</h2>
<p>Now let’s explore approaches for promoting connectivity in prioritizations by adding penalties to the baseline problem formulation. These approaches involve penalizing solutions according to exhibit certain <span class="citation">(e.g., penalize spatial fragmentation of prioritizations; Watts <em>et al.</em> 2009)</span>. Unlike constraint-based methods for incorporating connectivity – if the optimality gap used to generate a prioritization is too high – they may not necessarily produce prioritizations that exhibit desirable characteristics.</p>
<div class="section level3">
<h3 id="boundary-penalties">Boundary penalties<a class="anchor" aria-label="anchor" href="#boundary-penalties"></a>
</h3>
<p>Boundary penalties can be added to used to reduce the spatial fragmentation of prioritizations (using the <code><a href="../reference/add_boundary_penalties.html">add_boundary_penalties()</a></code> function). Specifically, these penalties update the problem formulation to penalize solutions that have a high total amount of exposed boundary length <span class="citation">(Ball <em>et al.</em> 2009)</span>. Since boundary data often have large values which can degrade solver performance and result in excessive run times (see the <a href="calibrating_trade-offs_tutorial.html"><em>Calibrating trade-offs tutorial</em></a> for details), we will first precompute rescale the boundary data.</p>
<div class="sourceCode" id="cb33"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># precompute the boundary data</span></span>
<span><span class="va">salt_boundary_data</span> <span class="op"><-</span> <span class="fu"><a href="../reference/boundary_matrix.html">boundary_matrix</a></span><span class="op">(</span><span class="va">salt_pu</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># rescale boundary data</span></span>
<span><span class="va">salt_boundary_data</span><span class="op">@</span><span class="va">x</span> <span class="op"><-</span> <span class="fu"><a href="https://scales.r-lib.org/reference/rescale.html" class="external-link">rescale</a></span><span class="op">(</span><span class="va">salt_boundary_data</span><span class="op">@</span><span class="va">x</span>, to <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0.01</span>, <span class="fl">100</span><span class="op">)</span><span class="op">)</span></span></code></pre></div>
<p>Next, let’s generate a prioritization using boundary penalties. To specify the relative importance reducing spatial fragmentation – compared with the primary objective of a problem (e.g. minimizing cost) – we need to a value for the <code>penalty</code> parameter is used. Setting a higher value for <code>penalty</code> indicates that it is more important to avoid highly fragmented solutions. Let’s generate a prioritization with a <code>penalty</code> value of 0.001.</p>
<div class="sourceCode" id="cb34"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added boundary penalties</span></span>
<span><span class="va">s7</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_boundary_penalties.html">add_boundary_penalties</a></span><span class="op">(</span>penalty <span class="op">=</span> <span class="fl">0.001</span>, data <span class="op">=</span> <span class="va">salt_boundary_data</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s7</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"boundary penalties (0.001)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-35-1.png" width="672" style="display: block; margin: auto;"></p>
<p>We can see that the resulting prioritization is still relatively fragmented, so let’s try generating another prioritization with a higher <code>penalty</code> value.</p>
<div class="sourceCode" id="cb35"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with increased boundary penalties</span></span>
<span><span class="va">s8</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_boundary_penalties.html">add_boundary_penalties</a></span><span class="op">(</span>penalty <span class="op">=</span> <span class="fl">10</span>, data <span class="op">=</span> <span class="va">salt_boundary_data</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s8</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"boundary penalties (10)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-37-1.png" width="672" style="display: block; margin: auto;"></p>
<p>Although the prioritization is now less fragmented, it has also selected a greater number of planning units. Let’s calculate the cost of the prioritizations to see how they vary in overall cost.</p>
<div class="sourceCode" id="cb36"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># calculate cost of baseline prioritization</span></span>
<span><span class="fu"><a href="../reference/eval_cost_summary.html">eval_cost_summary</a></span><span class="op">(</span><span class="va">p0</span>, <span class="va">s0</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## <span style="color: #949494;"># A tibble: 1 × 2</span></span></span>
<span><span class="co">## summary cost</span></span>
<span><span class="co">## <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
<span><span class="co">## <span style="color: #BCBCBC;">1</span> overall 46.0</span></span></code></pre>
<div class="sourceCode" id="cb38"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># calculate cost of prioritization with low boundary penalties (i.e., 0.001)</span></span>
<span><span class="fu"><a href="../reference/eval_cost_summary.html">eval_cost_summary</a></span><span class="op">(</span><span class="va">p0</span>, <span class="va">s7</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## <span style="color: #949494;"># A tibble: 1 × 2</span></span></span>
<span><span class="co">## summary cost</span></span>
<span><span class="co">## <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
<span><span class="co">## <span style="color: #BCBCBC;">1</span> overall 46.0</span></span></code></pre>
<div class="sourceCode" id="cb40"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># calculate cost of prioritization high low boundary penalties (i.e., 0.1)</span></span>
<span><span class="fu"><a href="../reference/eval_cost_summary.html">eval_cost_summary</a></span><span class="op">(</span><span class="va">p0</span>, <span class="va">s8</span><span class="op">)</span></span></code></pre></div>
<pre><code><span><span class="co">## <span style="color: #949494;"># A tibble: 1 × 2</span></span></span>
<span><span class="co">## summary cost</span></span>
<span><span class="co">## <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
<span><span class="co">## <span style="color: #BCBCBC;">1</span> overall 52.3</span></span></code></pre>
<p>We can see that the cost of the prioritizations increase with when we use higher <code>penalty</code> values. This is because there is a trade-off between the cost of a prioritization and the level of spatial fragmentation. Although it can be challenging to find the best balance, there are qualitative and quantitative methods available to help navigate such trade-offs. Please see the <a href="calibrating_trade-offs_tutorial.html"><em>Calibrating trade-offs tutorial</em></a> for a details on these methods.</p>
</div>
<div class="section level3">
<h3 id="connectivity-penalties">Connectivity penalties<a class="anchor" aria-label="anchor" href="#connectivity-penalties"></a>
</h3>
<p>Connectivity penalties can be used to promote connectivity in prioritizations (using the <code><a href="../reference/add_connectivity_penalties.html">add_connectivity_penalties()</a></code> function). These penalties use connectivity scores to parametrize the strength of connectivity between pairs of planning units <span class="citation">(Beger <em>et al.</em> 2010)</span>. Thus higher scores denote a greater level of connectivity between different planning units. For example, previous studies have parametrized connectivity scores using habitat quality, environmental, and river flow data <span class="citation">(e.g. Leonard <em>et al.</em> 2017; Alagador <em>et al.</em> 2012; Hermoso <em>et al.</em> 2012)</span>. Although there are many approaches to calculate connectivity scores, one approach involves using conductance data – data that describe how much each planning unit facilitates movement (opposite of landscape resistance data) – and calculating scores for each pair of planning units by averaging their conductance values (implemented using the <code><a href="../reference/connectivity_matrix.html">connectivity_matrix()</a></code> function).</p>
<p>Let’s compute connectivity scores by treating the <code>salt_con</code> object as conductance data. This means that we assume that neighboring planning units with higher values in the <code>salt_con</code> object are capable of facilitating a greater amount of connectivity. <strong>Note that the data used to compute connectivity scores must conform to the same spatial properties as the planning unit data (e.g., resolution, spatial extent, coordinate reference system).</strong> Also, although we are using raster data here, these scores can also be computed for vector data too (e.g., <code><a href="https://r-spatial.github.io/sf/reference/sf.html" class="external-link">sf::st_sf()</a></code> objects). Similar to the boundary data, we will also rescale the connectivity scores to avoid numerical issues during optimization.</p>
<div class="sourceCode" id="cb42"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># compute connectivity scores</span></span>
<span><span class="va">salt_con_scores</span> <span class="op"><-</span> <span class="fu"><a href="../reference/connectivity_matrix.html">connectivity_matrix</a></span><span class="op">(</span><span class="va">salt_pu</span>, <span class="va">salt_con</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># rescale scores</span></span>
<span><span class="va">salt_con_scores</span><span class="op">@</span><span class="va">x</span> <span class="op"><-</span> <span class="fu"><a href="https://scales.r-lib.org/reference/rescale.html" class="external-link">rescale</a></span><span class="op">(</span><span class="va">salt_con_scores</span><span class="op">@</span><span class="va">x</span>, to <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0.01</span>, <span class="fl">100</span><span class="op">)</span><span class="op">)</span></span></code></pre></div>
<p>After computing the connectivity scores, we can use them to generate prioritizations using connectivity penalties. Similar to the boundary penalties, we use the <code>penalty</code> parameter to specify the relative importance of promoting connectivity relative to the primary objective of a problem (i.e., minimizing overall cost). Let’s generate a prioritization with a <code>penalty</code> value of 0.001.</p>
<div class="sourceCode" id="cb43"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with added connectivity penalties</span></span>
<span><span class="va">s9</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_connectivity_penalties.html">add_connectivity_penalties</a></span><span class="op">(</span>penalty <span class="op">=</span> <span class="fl">0.001</span>, data <span class="op">=</span> <span class="va">salt_con_scores</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s9</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"connectivity penalties (0.001)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-41-1.png" width="672" style="display: block; margin: auto;"></p>
<p>Now let’s try generating another prioritization with a higher <code>penalty</code> value.</p>
<div class="sourceCode" id="cb44"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># create problem with increased connectivity penalties</span></span>
<span><span class="va">s10</span> <span class="op"><-</span> <span class="va">p0</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/add_connectivity_penalties.html">add_connectivity_penalties</a></span><span class="op">(</span>penalty <span class="op">=</span> <span class="fl">0.002</span>, data <span class="op">=</span> <span class="va">salt_con_scores</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="../reference/solve.html">solve</a></span><span class="op">(</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># plot solutions</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/plot.html" class="external-link">plot</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="https://rdrr.io/pkg/raster/man/stack.html" class="external-link">stack</a></span><span class="op">(</span><span class="va">s0</span>, <span class="va">s10</span><span class="op">)</span>, main <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"baseline"</span>, <span class="st">"connectivity penalties (0.002)"</span><span class="op">)</span>,</span>
<span> axes <span class="op">=</span> <span class="cn">FALSE</span>, breaks <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">0</span>, <span class="fl">0.5</span>, <span class="fl">1</span><span class="op">)</span>, col <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="st">"grey70"</span>, <span class="st">"darkgreen"</span><span class="op">)</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p><img src="connectivity_tutorial_files/figure-html/unnamed-chunk-43-1.png" width="672" style="display: block; margin: auto;"></p>
<p>We can see that increasing the <code>penalty</code> parameter causes the prioritizations to select planning units in regions with greater connectivity values (i.e., per the <code>salt_con</code> object). As discussed with the boundary penalties, increasing the <code>penalty</code> value tells the optimization process to focus more on promoting connectivity—meaning that it won’t focus as much on the primary objective (i.e., because the primary objective is to minimize overall costs). For details on calibrating these trade-offs please see the <a href="calibrating_trade-offs_tutorial.html"><em>Calibrating trade-offs tutorial</em></a>. <strong>Note that you will need to the use <code><a href="../reference/eval_connectivity_summary.html">eval_connectivity_summary()</a></code> function – instead of the <code><a href="../reference/eval_boundary_summary.html">eval_boundary_summary()</a></code> function – when adapting the tutorial code for connectivity penalties.</strong></p>
</div>
</div>
<div class="section level2">
<h2 id="conclusion">Conclusion<a class="anchor" aria-label="anchor" href="#conclusion"></a>
</h2>
<p>Hopefully, this tutorial has provided a helpful introduction for incorporating connectivity into prioritizations. Broadly speaking, we recommend using the boundary penalties or the connectivity penalties to ensure that prioritizations explicitly account for the spatial configuration of selected planning units. Additionally, though not fully explored here, the connectivity penalties are a very flexible approach for promoting connectivity. For instance, in addition to parametrizing pair-wise connectivity scores for neighboring planning units, they can also be used to parametrize pair-wise connectivity scores between more distant planning units. Thus connectivity penalties could be used to parametrize connectivity across both small scales and large spatial scales (e.g., using a scaling procedure wherein connectivity scores between pairs of planning units decline with the distance between them).</p>
</div>
<div class="section level2 unnumbered">
<h2 class="unnumbered" id="references">References<a class="anchor" aria-label="anchor" href="#references"></a>
</h2>
<div id="refs" class="references csl-bib-body hanging-indent">
<div id="ref-r63" class="csl-entry">
Alagador, D., Trivino, M., Cerdeira, J.O., Brás, R., Cabeza, M. & Araújo, M.B. (2012). Linking like with like: Optimising connectivity between environmentally-similar habitats. <em>Landscape Ecology</em>, <em>27</em>, 291–301.
</div>
<div id="ref-r56" class="csl-entry">
Balbar, A.C. & Metaxas, A. (2019). The current application of ecological connectivity in the design of marine protected areas. <em>Global Ecology and Conservation</em>, <em>17</em>, e00569.
</div>
<div id="ref-r3" class="csl-entry">
Ball, I.R., Possingham, H. & Watts, M.E. (2009). <span class="nocase">Marxan and relatives: Software for spatial conservation prioritisation</span>. <em><span>Spatial Conservation Prioritisation: Quantitative Methods & Computational Tools</span></em> (eds A. Moilanen, K.A. Wilson & H. Possingham), pp. 185–189. Oxford University Press, Oxford, UK.
</div>
<div id="ref-r28" class="csl-entry">
BC Assessment. (2015). <em><span>Property Information Services</span></em>. URL <a href="https://info.bcassessment.ca/" class="external-link">https://info.bcassessment.ca/</a> [accessed 13 June 2016].
</div>
<div id="ref-r38" class="csl-entry">
Beger, M., Linke, S., Watts, M., Game, E., Treml, E., Ball, I. & Possingham, H.P. (2010). Incorporating asymmetric connectivity into spatial decision making for conservation. <em>Conservation Letters</em>, <em>3</em>, 359–368.
</div>
<div id="ref-r16" class="csl-entry">
Billionnet, A. (2013). Mathematical optimization ideas for biodiversity conservation. <em>European Journal of Operational Research</em>, <em>231</em>, 514–534.
</div>
<div id="ref-r55" class="csl-entry">
Briers, R.A. (2002). Incorporating connectivity into reserve selection procedures. <em>Biological Conservation</em>, <em>103</em>, 77–83.
</div>
<div id="ref-r53" class="csl-entry">
Carroll, K.A. (2021). Systematic prioritization protocol applied to wolverine habitat connectivity. <em><span>STAR</span> Protocols</em>, <em>2</em>, 100882.
</div>
<div id="ref-r64" class="csl-entry">
Cerdeira, J.O., Pinto, L.S., Cabeza, M. & Gaston, K.J. (2010). Species specific connectivity in reserve-network design using graphs. <em>Biological Conservation</em>, <em>143</em>, 408–415.
</div>
<div id="ref-r52" class="csl-entry">
Daigle, R.M., Metaxas, A., Balbar, A.C., McGowan, J., Treml, E.A., Kuempel, C.D., Possingham, H.P. & Beger, M. (2020). Operationalizing ecological connectivity in spatial conservation planning with <span>Marxan Connect</span>. <em>Methods in Ecology and Evolution</em>, <em>11</em>, 570–579.
</div>
<div id="ref-r60" class="csl-entry">
Dixo, M., Metzger, J.P., Morgante, J.S. & Zamudio, K.R. (2009). Habitat fragmentation reduces genetic diversity and connectivity among toad populations in the brazilian atlantic coastal forest. <em>Biological Conservation</em>, <em>142</em>, 1560–1569.
</div>
<div id="ref-r58" class="csl-entry">
Dwyer, R.G., Campbell, H.A., Pillans, R.D., Watts, M.E., Lyon, B.J., Guru, S.M., Dinh, M.N., Possingham, H.P. & Franklin, C.E. (2019). Using individual-based movement information to identify spatial conservation priorities for mobile species. <em>Conservation Biology</em>, <em>33</em>, 1426–1437.
</div>
<div id="ref-r54" class="csl-entry">
Hanson, J.O., Marques, A., Verı́ssimo, A., Camacho-Sanchez, M., Velo-Antón, G., Martı́nez-Solano, Íñigo & Carvalho, S.B. (2020). Conservation planning for adaptive and neutral evolutionary processes. <em>Journal of Applied Ecology</em>, <em>57</em>, 2159–2169.
</div>
<div id="ref-r43" class="csl-entry">
Hermoso, V., Kennard, M.J. & Linke, S. (2012). Integrating multidirectional connectivity requirements in systematic conservation planning for freshwater systems. <em>Diversity and Distributions</em>, <em>18</em>, 448–458.
</div>
<div id="ref-r62" class="csl-entry">
Hodgson, J.A., Thomas, C.D., Wintle, B.A. & Moilanen, A. (2009). Climate change, connectivity and conservation decision making: Back to basics. <em>Journal of Applied Ecology</em>, <em>46</em>, 964–969.
</div>
<div id="ref-r59" class="csl-entry">
Leonard, P.B., Baldwin, R.F. & Hanks, R.D. (2017). Landscape-scale conservation design across biotic realms: Sequential integration of aquatic and terrestrial landscapes. <em>Scientific Reports</em>, <em>7</em>, 1–12.
</div>
<div id="ref-r4" class="csl-entry">
Margules, C.R. & Pressey, R.L. (2000). Systematic conservation planning. <em>Nature</em>, <em>405</em>, 243–253.
</div>
<div id="ref-r29" class="csl-entry">
Morrell, N., Schuster, R., Crombie, M. & Arcese, P. (2017). <em><span class="nocase">A Prioritization Tool for the Conservation of Coastal Douglas-fir Forest and Savannah Habitats of the Georgia Basin</span></em>. <span>The Nature Trust of British Colombia, Coastal Douglas Fir Conservation Partnership, and the Department of Forest and Conservation Sciences, University of British Colombia</span>, URL <a href="https://peter-arcese-lab.sites.olt.ubc.ca/files/2016/09/CDFCP_tutorial_2017_05.pdf" class="external-link">https://peter-arcese-lab.sites.olt.ubc.ca/files/2016/09/CDFCP_tutorial_2017_05.pdf</a> [accessed 9 October 2017].
</div>
<div id="ref-r61" class="csl-entry">
Olds, A.D., Connolly, R.M., Pitt, K.A. & Maxwell, P.S. (2012). Habitat connectivity improves reserve performance. <em>Conservation Letters</em>, <em>5</em>, 56–63.
</div>
<div id="ref-r57" class="csl-entry">
Önal, H. & Briers, R.A. (2006). Optimal selection of a connected reserve network. <em>Operations Research</em>, <em>54</em>, 379–388.
</div>
<div id="ref-r2" class="csl-entry">
Watts, M.E., Ball, I.R., Stewart, R.S., Klein, C.J., Wilson, K., Steinback, C., Lourival, R., Kircher, L. & Possingham, H.P. (2009). <span class="nocase">Marxan with Zones: Software for optimal conservation based land- and sea-use zoning</span>. <em>Environmental Modelling & Software</em>, <em>24</em>, 1513–1521.
</div>
</div>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
<nav id="toc" data-toggle="toc"><h2 data-toc-skip>Contents</h2>
</nav>
</div>
</div>
<footer><div class="copyright">
<p></p>
<p>Developed by <a href="https://jeffrey-hanson.com" class="external-link">Jeffrey O Hanson</a>, <a href="http://www.richard-schuster.com" class="external-link">Richard Schuster</a>, Nina Morrell, <a href="http://strimas.com" class="external-link">Matthew Strimas-Mackey</a>, Brandon P M Edwards, Matthew E Watts, <a href="https://arcese.forestry.ubc.ca" class="external-link">Peter Arcese</a>, <a href="https://josephrbennett.wordpress.com" class="external-link">Joseph Bennett</a>, <a href="http://www.possinghamlab.org" class="external-link">Hugh P Possingham</a>.</p>
</div>
<div class="pkgdown">
<p></p>
<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.6.</p>
</div>
</footer>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/docsearch.js/2.6.1/docsearch.min.js" integrity="sha256-GKvGqXDznoRYHCwKXGnuchvKSwmx9SRMrZOTh2g4Sb0=" crossorigin="anonymous"></script><script>
docsearch({
apiKey: '486efa122ea6783724263412c5f28ab3',
indexName: 'prioritizr',
inputSelector: 'input#search-input.form-control',
transformData: function(hits) {
return hits.map(function (hit) {
hit.url = updateHitURL(hit);
return hit;
});
}
});
</script>
</body>
</html>