-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminpatch.html
More file actions
672 lines (643 loc) · 59.4 KB
/
minpatch.html
File metadata and controls
672 lines (643 loc) · 59.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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
671
672
<!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, shrink-to-fit=no">
<title>MinPatch with prioritizr • minpatch</title>
<script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="../deps/bootstrap-5.3.1/bootstrap.min.css" rel="stylesheet">
<script src="../deps/bootstrap-5.3.1/bootstrap.bundle.min.js"></script><link href="../deps/font-awesome-6.5.2/css/all.min.css" rel="stylesheet">
<link href="../deps/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet">
<script src="../deps/headroom-0.11.0/headroom.min.js"></script><script src="../deps/headroom-0.11.0/jQuery.headroom.min.js"></script><script src="../deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js"></script><script src="../deps/clipboard.js-2.0.11/clipboard.min.js"></script><script src="../deps/search-1.0.0/autocomplete.jquery.min.js"></script><script src="../deps/search-1.0.0/fuse.min.js"></script><script src="../deps/search-1.0.0/mark.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="MinPatch with prioritizr">
</head>
<body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
<nav class="navbar navbar-expand-lg fixed-top bg-primary" data-bs-theme="dark" aria-label="Site navigation"><div class="container">
<a class="navbar-brand me-2" href="../index.html">minpatch</a>
<small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.1.0</small>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
<ul class="navbar-nav me-auto">
<li class="active nav-item"><a class="nav-link" href="../articles/minpatch.html">Get started</a></li>
<li class="nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
<button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
<ul class="dropdown-menu" aria-labelledby="dropdown-articles">
<li><a class="dropdown-item" href="../articles/minpatchTasmania.html">MinPatch in Tasmania</a></li>
</ul>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item"><a class="external-link nav-link" href="https://github.com/SpatialPlanning/minpatch/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
<li class="nav-item"><form class="form-inline" role="search">
<input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json">
</form></li>
</ul>
</div>
</div>
</nav><div class="container template-article">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
<h1>MinPatch with prioritizr</h1>
<h4 data-toc-skip class="author">MinPatch
Package Authors</h4>
<h4 data-toc-skip class="date">2025-11-24</h4>
<small class="dont-index">Source: <a href="https://github.com/SpatialPlanning/minpatch/blob/HEAD/vignettes/minpatch.Rmd" class="external-link"><code>vignettes/minpatch.Rmd</code></a></small>
<div class="d-none name"><code>minpatch.Rmd</code></div>
</div>
<div class="section level2">
<h2 id="introduction">Introduction<a class="anchor" aria-label="anchor" href="#introduction"></a>
</h2>
<p>This vignette demonstrates how to use MinPatch with real conservation
planning data from prioritizr. We’ll use the simulated dataset included
with prioritizr to show a complete workflow from problem formulation
through MinPatch post-processing.</p>
<div class="sourceCode" id="cb1"><pre class="downlit sourceCode r">
<code class="sourceCode R"><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://github.com/SpatialPlanning/minpatch" class="external-link">minpatch</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.net" class="external-link">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://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/" class="external-link">terra</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://dplyr.tidyverse.org" class="external-link">dplyr</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://ggplot2.tidyverse.org" class="external-link">ggplot2</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://patchwork.data-imaginist.com" class="external-link">patchwork</a></span><span class="op">)</span></span></code></pre></div>
<div class="section level3">
<h3 id="step-1-load-and-examine-the-data">Step 1: Load and Examine the Data<a class="anchor" aria-label="anchor" href="#step-1-load-and-examine-the-data"></a>
</h3>
<div class="sourceCode" id="cb2"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span></span>
<span><span class="va">dat</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="fu"><a href="https://prioritizr.net/reference/sim_data.html" class="external-link">get_sim_pu_raster</a></span><span class="op">(</span><span class="op">)</span>, <span class="fu"><a href="https://prioritizr.net/reference/sim_data.html" class="external-link">get_sim_features</a></span><span class="op">(</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="https://rspatial.github.io/terra/reference/as.polygons.html" class="external-link">as.polygons</a></span><span class="op">(</span>dissolve <span class="op">=</span> <span class="cn">FALSE</span>, values <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">sf</span><span class="fu">::</span><span class="fu"><a href="https://r-spatial.github.io/sf/reference/st_as_sf.html" class="external-link">st_as_sf</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">dplyr</span><span class="fu">::</span><span class="fu"><a href="https://dplyr.tidyverse.org/reference/rename.html" class="external-link">rename</a></span><span class="op">(</span>cost <span class="op">=</span> <span class="va">layer</span><span class="op">)</span></span>
<span></span>
<span><span class="fu"><a href="https://r-spatial.github.io/sf/reference/st_crs.html" class="external-link">st_crs</a></span><span class="op">(</span><span class="va">dat</span><span class="op">)</span> <span class="op"><-</span> <span class="cn">NA</span></span>
<span></span>
<span><span class="va">features</span> <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/colnames.html" class="external-link">colnames</a></span><span class="op">(</span><span class="va">dat</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span> </span>
<span> <span class="fu">stringr</span><span class="fu">::</span><span class="fu"><a href="https://stringr.tidyverse.org/reference/str_subset.html" class="external-link">str_subset</a></span><span class="op">(</span><span class="st">"feature_"</span><span class="op">)</span></span></code></pre></div>
</div>
<div class="section level3">
<h3 id="step-2-create-and-solve-a-prioritizr-problem">Step 2: Create and Solve a prioritizr Problem<a class="anchor" aria-label="anchor" href="#step-2-create-and-solve-a-prioritizr-problem"></a>
</h3>
<p>We’ll create a simple minimum set problem with 17% targets for all
features:</p>
<div class="sourceCode" id="cb3"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># Create prioritizr problem</span></span>
<span><span class="va">p</span> <span class="op"><-</span> <span class="fu"><a href="https://prioritizr.net/reference/problem.html" class="external-link">problem</a></span><span class="op">(</span><span class="va">dat</span>, <span class="va">features</span>, cost_column <span class="op">=</span> <span class="st">"cost"</span><span class="op">)</span> <span class="op"><a href="../reference/pipe.html">%>%</a></span></span>
<span> <span class="fu"><a href="https://prioritizr.net/reference/add_min_set_objective.html" class="external-link">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="https://prioritizr.net/reference/add_relative_targets.html" class="external-link">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 class="co"># 17% of each feature</span></span>
<span> <span class="fu"><a href="https://prioritizr.net/reference/add_binary_decisions.html" class="external-link">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="https://prioritizr.net/reference/add_default_solver.html" class="external-link">add_default_solver</a></span><span class="op">(</span>verbose <span class="op">=</span> <span class="cn">FALSE</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Solve the problem</span></span>
<span><span class="va">s</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/solve.html" class="external-link">solve</a></span><span class="op">(</span><span class="va">p</span><span class="op">)</span></span></code></pre></div>
<div class="sourceCode" id="cb4"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># plot map of prioritization</span></span>
<span><span class="fu"><a href="../reference/plot_prioritizr.html">plot_prioritizr</a></span><span class="op">(</span><span class="va">s</span><span class="op">)</span></span></code></pre></div>
<p><img src="minpatch_files/figure-html/unnamed-chunk-2-1.png" class="r-plt" width="768"></p>
</div>
<div class="section level3">
<h3 id="step-3-run-minpatch">Step 3: Run MinPatch<a class="anchor" aria-label="anchor" href="#step-3-run-minpatch"></a>
</h3>
<p>Now we can apply MinPatch directly to the prioritizr objects. The
<code><a href="../reference/run_minpatch.html">run_minpatch()</a></code> function automatically extracts all
necessary data from the prioritizr solution object:</p>
<div class="sourceCode" id="cb5"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># Calculate reasonable parameters based on planning unit characteristics</span></span>
<span><span class="va">median_area</span> <span class="op"><-</span> <span class="fu"><a href="https://rspatial.github.io/terra/reference/summarize-generics.html" class="external-link">median</a></span><span class="op">(</span><span class="fu"><a href="https://r-spatial.github.io/sf/reference/geos_measures.html" class="external-link">st_area</a></span><span class="op">(</span><span class="va">dat</span><span class="op">)</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Set minimum patch size to 5x median planning unit area</span></span>
<span><span class="va">min_patch_size</span> <span class="op"><-</span> <span class="va">median_area</span> <span class="op">*</span> <span class="fl">5</span></span>
<span></span>
<span><span class="co"># Set patch radius to encompass approximately 10 planning units</span></span>
<span><span class="va">patch_radius</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/MathFun.html" class="external-link">sqrt</a></span><span class="op">(</span><span class="va">median_area</span> <span class="op">*</span> <span class="fl">10</span><span class="op">)</span></span>
<span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"MinPatch parameters:\n"</span><span class="op">)</span></span>
<span><span class="co">#> MinPatch parameters:</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Minimum patch size:"</span>, <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="va">min_patch_size</span>, <span class="fl">3</span><span class="op">)</span>, <span class="st">"square meters\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Minimum patch size: 0.05 square meters</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Patch radius:"</span>, <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="va">patch_radius</span>,<span class="fl">3</span><span class="op">)</span>, <span class="st">"meters\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Patch radius: 0.316 meters</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- This means patches must be at least"</span>, <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="va">min_patch_size</span><span class="op">/</span><span class="va">median_area</span>, <span class="fl">3</span><span class="op">)</span>,</span>
<span> <span class="st">"times the median planning unit size\n"</span><span class="op">)</span></span>
<span><span class="co">#> - This means patches must be at least 5 times the median planning unit size</span></span></code></pre></div>
<p>Run MinPatch with automatic data extraction from prioritizr
objects</p>
<div class="sourceCode" id="cb6"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span></span>
<span><span class="va">result</span> <span class="op"><-</span> <span class="fu"><a href="../reference/run_minpatch.html">run_minpatch</a></span><span class="op">(</span></span>
<span> prioritizr_problem <span class="op">=</span> <span class="va">p</span>,</span>
<span> prioritizr_solution <span class="op">=</span> <span class="va">s</span>,</span>
<span> min_patch_size <span class="op">=</span> <span class="va">min_patch_size</span>,</span>
<span> patch_radius <span class="op">=</span> <span class="va">patch_radius</span>,</span>
<span> boundary_penalty <span class="op">=</span> <span class="fl">0.001</span>, <span class="co"># Small boundary penalty for connectivity</span></span>
<span> remove_small_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> add_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> whittle_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> verbose <span class="op">=</span> <span class="cn">TRUE</span></span>
<span><span class="op">)</span></span>
<span><span class="co">#> Validating inputs...</span></span>
<span><span class="co">#> Initializing data structures...</span></span>
<span><span class="co">#> Calculating boundary matrix (this may take a while)...</span></span>
<span><span class="co">#> Creating patch radius dictionary...</span></span>
<span><span class="co">#> Calculating initial patch statistics...</span></span>
<span><span class="co">#> Stage 1: Removing small patches...</span></span>
<span><span class="co">#> Stage 2: Adding new patches...</span></span>
<span><span class="co">#> Initial unmet targets: 5 </span></span>
<span><span class="co">#> Unmet feature IDs: 1, 2, 3, 4, 5 </span></span>
<span><span class="co">#> Iteration 1 - Unmet targets: 5 </span></span>
<span><span class="co">#> Found 85 potential patches with scores</span></span>
<span><span class="co">#> Best score: 0.002280652 for unit 90 </span></span>
<span><span class="co">#> Added patch centered on unit 90 </span></span>
<span><span class="co">#> Iteration 2 - Unmet targets: 2 </span></span>
<span><span class="co">#> Found 74 potential patches with scores</span></span>
<span><span class="co">#> Best score: 0.0009039778 for unit 86 </span></span>
<span><span class="co">#> Added patch centered on unit 86 </span></span>
<span><span class="co">#> All conservation targets are now met!</span></span>
<span><span class="co">#> Stage 3: Removing unnecessary planning units...</span></span>
<span><span class="co">#> Edge units found: 27 </span></span>
<span><span class="co">#> Keystone units: 0 </span></span>
<span><span class="co">#> New keystone units: 0 </span></span>
<span><span class="co">#> Scoreable units: 27 </span></span>
<span><span class="co">#> Unit 90 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Edge units found: 26 </span></span>
<span><span class="co">#> Keystone units: 1 </span></span>
<span><span class="co">#> New keystone units: 0 </span></span>
<span><span class="co">#> Scoreable units: 26 </span></span>
<span><span class="co">#> Unit 89 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Edge units found: 25 </span></span>
<span><span class="co">#> Keystone units: 2 </span></span>
<span><span class="co">#> New keystone units: 0 </span></span>
<span><span class="co">#> Scoreable units: 25 </span></span>
<span><span class="co">#> Unit 81 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Edge units found: 24 </span></span>
<span><span class="co">#> Keystone units: 3 </span></span>
<span><span class="co">#> New keystone units: 0 </span></span>
<span><span class="co">#> Scoreable units: 24 </span></span>
<span><span class="co">#> Unit 80 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Edge units found: 23 </span></span>
<span><span class="co">#> Keystone units: 4 </span></span>
<span><span class="co">#> New keystone units: 0 </span></span>
<span><span class="co">#> Scoreable units: 23 </span></span>
<span><span class="co">#> Unit 88 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Unit 79 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Unit 75 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Unit 83 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Unit 73 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> Unit 87 cannot be removed - adding to keystone set</span></span>
<span><span class="co">#> No more edge units to consider - terminating</span></span>
<span><span class="co">#> Calculating final statistics...</span></span>
<span><span class="co">#> MinPatch processing complete!</span></span></code></pre></div>
</div>
<div class="section level3">
<h3 id="step-4-analyze-the-results">Step 4: Analyze the Results<a class="anchor" aria-label="anchor" href="#step-4-analyze-the-results"></a>
</h3>
<p>Let’s examine what MinPatch accomplished:</p>
<div class="sourceCode" id="cb7"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># Print comprehensive summary</span></span>
<span><span class="fu"><a href="../reference/print_minpatch_summary.html">print_minpatch_summary</a></span><span class="op">(</span><span class="va">result</span><span class="op">)</span></span>
<span><span class="co">#> === MinPatch Processing Summary ===</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> Patch Statistics:</span></span>
<span><span class="co">#> Initial patches: 7 (valid: 0)</span></span>
<span><span class="co">#> Final patches: 6 (valid: 2)</span></span>
<span><span class="co">#> Area change: 0.11 (68.7%)</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> Cost Breakdown:</span></span>
<span><span class="co">#> Planning unit cost: 5353.26</span></span>
<span><span class="co">#> Boundary cost: 0.00</span></span>
<span><span class="co">#> Total cost: 5353.26</span></span>
<span><span class="co">#> Selected units: 27</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> Feature Representation:</span></span>
<span><span class="co">#> Total features: 5</span></span>
<span><span class="co">#> Targets met: 5</span></span>
<span><span class="co">#> Targets unmet: 0</span></span>
<span><span class="co">#> Mean proportion: 0.304</span></span>
<span><span class="co">#> Total shortfall: 0.00</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> === End Summary ===</span></span>
<span></span>
<span><span class="co"># Compare original vs MinPatch solutions</span></span>
<span><span class="va">comparison</span> <span class="op"><-</span> <span class="fu"><a href="../reference/compare_solutions.html">compare_solutions</a></span><span class="op">(</span><span class="va">result</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Print overall comparison</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"=== Overall Solution Comparison ===\n"</span><span class="op">)</span></span>
<span><span class="co">#> === Overall Solution Comparison ===</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/print.html" class="external-link">print</a></span><span class="op">(</span><span class="va">comparison</span><span class="op">$</span><span class="va">overall</span><span class="op">)</span></span>
<span><span class="co">#> Metric Original MinPatch Change Percent_Change</span></span>
<span><span class="co">#> 1 Selected Planning Units 16.00000 27.00000 11.00 68.75000</span></span>
<span><span class="co">#> 2 Total Area 0.16000 0.27000 0.11 68.75000</span></span>
<span><span class="co">#> 3 Number of Patches 7.00000 6.00000 -1.00 -14.28571</span></span>
<span><span class="co">#> 4 Valid Patches (>= min size) 0.00000 2.00000 2.00 NA</span></span>
<span><span class="co">#> 5 Median Patch Size 0.01000 0.04000 0.03 300.00000</span></span>
<span><span class="co">#> 6 Planning Unit Cost 5353.25938 5353.25938 0.00 0.00000</span></span>
<span><span class="co">#> 7 Boundary Cost 0.00395 0.00395 0.00 0.00000</span></span>
<span><span class="co">#> 8 Total Cost 5353.26333 5353.26333 0.00 0.00000</span></span>
<span></span>
<span><span class="co"># Print feature-level comparison</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"\n=== Feature-Level Area Comparison ===\n"</span><span class="op">)</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> === Feature-Level Area Comparison ===</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/print.html" class="external-link">print</a></span><span class="op">(</span><span class="va">comparison</span><span class="op">$</span><span class="va">features</span><span class="op">)</span></span>
<span><span class="co">#> Feature_ID Target Original_Area MinPatch_Area Area_Change Percent_Change</span></span>
<span><span class="co">#> 1 1 12.670220 14.083429 24.037947 9.954517 70.68248</span></span>
<span><span class="co">#> 2 2 4.774965 5.124808 7.812367 2.687559 52.44214</span></span>
<span><span class="co">#> 3 3 11.029225 11.707674 19.594225 7.886551 67.36224</span></span>
<span><span class="co">#> 4 4 6.489033 6.863962 10.995588 4.131626 60.19302</span></span>
<span><span class="co">#> 5 5 8.613574 9.482534 16.665588 7.183054 75.75037</span></span>
<span><span class="co">#> Original_Target_Met MinPatch_Target_Met Original_Proportion</span></span>
<span><span class="co">#> 1 TRUE TRUE 1.111538</span></span>
<span><span class="co">#> 2 TRUE TRUE 1.073266</span></span>
<span><span class="co">#> 3 TRUE TRUE 1.061514</span></span>
<span><span class="co">#> 4 TRUE TRUE 1.057779</span></span>
<span><span class="co">#> 5 TRUE TRUE 1.100883</span></span>
<span><span class="co">#> MinPatch_Proportion</span></span>
<span><span class="co">#> 1 1.897200</span></span>
<span><span class="co">#> 2 1.636110</span></span>
<span><span class="co">#> 3 1.776573</span></span>
<span><span class="co">#> 4 1.694488</span></span>
<span><span class="co">#> 5 1.934805</span></span>
<span></span>
<span><span class="co"># Print summary statistics</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"\n=== Feature Change Summary ===\n"</span><span class="op">)</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> === Feature Change Summary ===</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/print.html" class="external-link">print</a></span><span class="op">(</span><span class="va">comparison</span><span class="op">$</span><span class="va">summary</span><span class="op">)</span></span>
<span><span class="co">#> features_improved features_reduced features_unchanged targets_gained</span></span>
<span><span class="co">#> 1 5 0 0 0</span></span>
<span><span class="co">#> targets_lost</span></span>
<span><span class="co">#> 1 0</span></span>
<span></span>
<span><span class="co"># cat("Features with increased area:", comparison$summary$features_improved, "\n")</span></span>
<span><span class="co"># cat("Features with decreased area:", comparison$summary$features_reduced, "\n")</span></span>
<span><span class="co"># cat("Features with unchanged area:", comparison$summary$features_unchanged, "\n")</span></span>
<span><span class="co"># cat("Targets gained:", comparison$summary$targets_gained, "\n")</span></span>
<span><span class="co"># cat("Targets lost:", comparison$summary$targets_lost, "\n")</span></span></code></pre></div>
<div class="section level4">
<h4 id="feature-representation-analysis">Feature Representation Analysis<a class="anchor" aria-label="anchor" href="#feature-representation-analysis"></a>
</h4>
<div class="sourceCode" id="cb8"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span></span>
<span><span class="co"># Create solution data for prioritizr analysis</span></span>
<span><span class="va">minpatch_solution_data</span> <span class="op"><-</span> <span class="va">result</span><span class="op">$</span><span class="va">solution</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">"minpatch"</span><span class="op">)</span><span class="op">]</span></span>
<span></span>
<span><span class="co"># Use prioritizr functions for accurate feature representation analysis</span></span>
<span><span class="va">feature_rep</span> <span class="op"><-</span> <span class="fu">prioritizr</span><span class="fu">::</span><span class="fu"><a href="https://prioritizr.net/reference/eval_feature_representation_summary.html" class="external-link">eval_feature_representation_summary</a></span><span class="op">(</span><span class="va">p</span>, <span class="va">minpatch_solution_data</span><span class="op">)</span></span>
<span><span class="va">target_coverage</span> <span class="op"><-</span> <span class="fu">prioritizr</span><span class="fu">::</span><span class="fu"><a href="https://prioritizr.net/reference/eval_target_coverage_summary.html" class="external-link">eval_target_coverage_summary</a></span><span class="op">(</span><span class="va">p</span>, <span class="va">minpatch_solution_data</span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Summary statistics</span></span>
<span><span class="va">targets_met</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/sum.html" class="external-link">sum</a></span><span class="op">(</span><span class="va">target_coverage</span><span class="op">$</span><span class="va">met</span><span class="op">)</span></span>
<span><span class="va">mean_achievement</span> <span class="op"><-</span> <span class="fu"><a href="https://rspatial.github.io/terra/reference/summarize-generics.html" class="external-link">mean</a></span><span class="op">(</span><span class="va">feature_rep</span><span class="op">$</span><span class="va">relative_held</span>, na.rm <span class="op">=</span> <span class="cn">TRUE</span><span class="op">)</span></span>
<span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"Conservation Performance:\n"</span><span class="op">)</span></span>
<span><span class="co">#> Conservation Performance:</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Targets met:"</span>, <span class="va">targets_met</span>, <span class="st">"out of"</span>, <span class="fu"><a href="https://rspatial.github.io/terra/reference/dimensions.html" class="external-link">nrow</a></span><span class="op">(</span><span class="va">feature_rep</span><span class="op">)</span>, <span class="st">"features\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Targets met: 5 out of 5 features</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Mean target achievement:"</span>, <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="va">mean_achievement</span> <span class="op">*</span> <span class="fl">100</span>, <span class="fl">1</span><span class="op">)</span>, <span class="st">"%\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Mean target achievement: 30.4 %</span></span>
<span></span>
<span><span class="co"># Show features with lowest achievement</span></span>
<span><span class="va">combined_results</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/data.frame.html" class="external-link">data.frame</a></span><span class="op">(</span></span>
<span> feature_id <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="fu"><a href="https://rspatial.github.io/terra/reference/dimensions.html" class="external-link">nrow</a></span><span class="op">(</span><span class="va">feature_rep</span><span class="op">)</span><span class="op">)</span>,</span>
<span> proportion_met <span class="op">=</span> <span class="va">feature_rep</span><span class="op">$</span><span class="va">relative_held</span>,</span>
<span> target_met <span class="op">=</span> <span class="va">target_coverage</span><span class="op">$</span><span class="va">met</span></span>
<span><span class="op">)</span></span>
<span></span>
<span><span class="va">worst_features</span> <span class="op"><-</span> <span class="va">combined_results</span><span class="op">[</span><span class="fu"><a href="https://rdrr.io/r/base/order.html" class="external-link">order</a></span><span class="op">(</span><span class="va">combined_results</span><span class="op">$</span><span class="va">proportion_met</span><span class="op">)</span>, <span class="op">]</span><span class="op">[</span><span class="fl">1</span><span class="op">:</span><span class="fl">5</span>, <span class="op">]</span></span>
<span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"\nFeatures with lowest target achievement:\n"</span><span class="op">)</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> Features with lowest target achievement:</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/print.html" class="external-link">print</a></span><span class="op">(</span><span class="va">worst_features</span><span class="op">)</span></span>
<span><span class="co">#> feature_id proportion_met target_met</span></span>
<span><span class="co">#> 2 2 0.2781387 TRUE</span></span>
<span><span class="co">#> 4 4 0.2880629 TRUE</span></span>
<span><span class="co">#> 3 3 0.3020174 TRUE</span></span>
<span><span class="co">#> 1 1 0.3225241 TRUE</span></span>
<span><span class="co">#> 5 5 0.3289169 TRUE</span></span></code></pre></div>
</div>
<div class="section level4">
<h4 id="spatial-configuration-improvements">Spatial Configuration Improvements<a class="anchor" aria-label="anchor" href="#spatial-configuration-improvements"></a>
</h4>
<div class="sourceCode" id="cb9"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="va">initial_stats</span> <span class="op"><-</span> <span class="va">result</span><span class="op">$</span><span class="va">patch_stats</span><span class="op">$</span><span class="va">initial</span></span>
<span><span class="va">final_stats</span> <span class="op"><-</span> <span class="va">result</span><span class="op">$</span><span class="va">patch_stats</span><span class="op">$</span><span class="va">final</span></span>
<span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"Spatial Configuration Changes:\n"</span><span class="op">)</span></span>
<span><span class="co">#> Spatial Configuration Changes:</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Initial patches:"</span>, <span class="va">initial_stats</span><span class="op">$</span><span class="va">all_patch_count</span>, </span>
<span> <span class="st">"("</span>, <span class="va">initial_stats</span><span class="op">$</span><span class="va">valid_patch_count</span>, <span class="st">"valid)\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Initial patches: 7 ( 0 valid)</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Final patches:"</span>, <span class="va">final_stats</span><span class="op">$</span><span class="va">all_patch_count</span>, </span>
<span> <span class="st">"("</span>, <span class="va">final_stats</span><span class="op">$</span><span class="va">valid_patch_count</span>, <span class="st">"valid)\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Final patches: 6 ( 2 valid)</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Patch consolidation:"</span>, </span>
<span> <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="op">(</span><span class="fl">1</span> <span class="op">-</span> <span class="va">final_stats</span><span class="op">$</span><span class="va">all_patch_count</span><span class="op">/</span><span class="va">initial_stats</span><span class="op">$</span><span class="va">all_patch_count</span><span class="op">)</span> <span class="op">*</span> <span class="fl">100</span>, <span class="fl">1</span><span class="op">)</span>, </span>
<span> <span class="st">"% reduction\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Patch consolidation: 14.3 % reduction</span></span>
<span><span class="fu"><a href="https://rdrr.io/r/base/cat.html" class="external-link">cat</a></span><span class="op">(</span><span class="st">"- Median patch size increase:"</span>, </span>
<span> <span class="fu"><a href="https://rspatial.github.io/terra/reference/math-generics.html" class="external-link">round</a></span><span class="op">(</span><span class="va">final_stats</span><span class="op">$</span><span class="va">median_all_patch</span> <span class="op">/</span> <span class="va">initial_stats</span><span class="op">$</span><span class="va">median_all_patch</span>, <span class="fl">1</span><span class="op">)</span>, <span class="st">"x\n"</span><span class="op">)</span></span>
<span><span class="co">#> - Median patch size increase: 4 x</span></span></code></pre></div>
</div>
</div>
<div class="section level3">
<h3 id="step-5-visualize-the-results">Step 5: Visualize the Results<a class="anchor" aria-label="anchor" href="#step-5-visualize-the-results"></a>
</h3>
<p>Let’s create maps to visualize the changes MinPatch made:</p>
<div class="sourceCode" id="cb10"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="fu"><a href="../reference/plot_minpatch.html">plot_minpatch</a></span><span class="op">(</span><span class="va">result</span>, title <span class="op">=</span> <span class="st">"MinPatch Results"</span><span class="op">)</span></span></code></pre></div>
<p><img src="minpatch_files/figure-html/visualization-1.png" class="r-plt" width="768"></p>
</div>
<div class="section level3">
<h3 id="understanding-the-results">Understanding the Results<a class="anchor" aria-label="anchor" href="#understanding-the-results"></a>
</h3>
<div class="section level4">
<h4 id="lets-check-the-process">Lets check the process<a class="anchor" aria-label="anchor" href="#lets-check-the-process"></a>
</h4>
<div class="sourceCode" id="cb11"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># First remove small patches</span></span>
<span><span class="va">result_remove</span> <span class="op"><-</span> <span class="fu"><a href="../reference/run_minpatch.html">run_minpatch</a></span><span class="op">(</span></span>
<span> prioritizr_problem <span class="op">=</span> <span class="va">p</span>,</span>
<span> prioritizr_solution <span class="op">=</span> <span class="va">s</span>,</span>
<span> min_patch_size <span class="op">=</span> <span class="va">min_patch_size</span>,</span>
<span> patch_radius <span class="op">=</span> <span class="va">patch_radius</span>,</span>
<span> remove_small_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> add_patches <span class="op">=</span> <span class="cn">FALSE</span>,</span>
<span> whittle_patches <span class="op">=</span> <span class="cn">FALSE</span>,</span>
<span> verbose <span class="op">=</span> <span class="cn">FALSE</span></span>
<span><span class="op">)</span></span>
<span><span class="co">#> Warning in run_minpatch(prioritizr_problem = p, prioritizr_solution = s, :</span></span>
<span><span class="co">#> After removing small patches, 5 conservation targets are no longer met.</span></span>
<span><span class="co">#> Consider setting add_patches = TRUE to automatically add patches to meet</span></span>
<span><span class="co">#> targets, or use a smaller min_patch_size.</span></span>
<span></span>
<span><span class="co"># Next add to ensure patches meet minimum size</span></span>
<span><span class="va">result_add</span> <span class="op"><-</span> <span class="fu"><a href="../reference/run_minpatch.html">run_minpatch</a></span><span class="op">(</span></span>
<span> prioritizr_problem <span class="op">=</span> <span class="va">p</span>,</span>
<span> prioritizr_solution <span class="op">=</span> <span class="va">s</span>,</span>
<span> min_patch_size <span class="op">=</span> <span class="va">min_patch_size</span>,</span>
<span> patch_radius <span class="op">=</span> <span class="va">patch_radius</span>,</span>
<span> remove_small_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> add_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> whittle_patches <span class="op">=</span> <span class="cn">FALSE</span>,</span>
<span> verbose <span class="op">=</span> <span class="cn">FALSE</span></span>
<span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Finally, try and remove areas without degrading the solution</span></span>
<span><span class="va">result_whittle</span> <span class="op"><-</span> <span class="fu"><a href="../reference/run_minpatch.html">run_minpatch</a></span><span class="op">(</span></span>
<span> prioritizr_problem <span class="op">=</span> <span class="va">p</span>,</span>
<span> prioritizr_solution <span class="op">=</span> <span class="va">s</span>,</span>
<span> min_patch_size <span class="op">=</span> <span class="va">min_patch_size</span>,</span>
<span> patch_radius <span class="op">=</span> <span class="va">patch_radius</span>,</span>
<span> remove_small_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> add_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> whittle_patches <span class="op">=</span> <span class="cn">TRUE</span>,</span>
<span> verbose <span class="op">=</span> <span class="cn">FALSE</span></span>
<span><span class="op">)</span></span></code></pre></div>
<p>Plot the comparison</p>
<div class="sourceCode" id="cb12"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="fu">patchwork</span><span class="fu">::</span><span class="fu"><a href="https://patchwork.data-imaginist.com/reference/wrap_plots.html" class="external-link">wrap_plots</a></span><span class="op">(</span></span>
<span> <span class="fu"><a href="../reference/plot_minpatch.html">plot_minpatch</a></span><span class="op">(</span><span class="va">result_remove</span>, title <span class="op">=</span> <span class="st">"Remove Small Patches"</span><span class="op">)</span>,</span>
<span> <span class="fu"><a href="../reference/plot_minpatch.html">plot_minpatch</a></span><span class="op">(</span><span class="va">result_add</span>, title <span class="op">=</span> <span class="st">"Add Patches"</span><span class="op">)</span>,</span>
<span> <span class="fu"><a href="../reference/plot_minpatch.html">plot_minpatch</a></span><span class="op">(</span><span class="va">result_whittle</span>, title <span class="op">=</span> <span class="st">"Whittle Planning Units"</span><span class="op">)</span>, </span>
<span> guides <span class="op">=</span> <span class="st">"collect"</span>,</span>
<span> ncol <span class="op">=</span> <span class="fl">3</span></span>
<span><span class="op">)</span> <span class="op">&</span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/theme.html" class="external-link">theme</a></span><span class="op">(</span>legend.position <span class="op">=</span> <span class="st">"bottom"</span><span class="op">)</span></span></code></pre></div>
<p><img src="minpatch_files/figure-html/unnamed-chunk-4-1.png" class="r-plt" width="768"></p>
</div>
<div class="section level4">
<h4 id="what-minpatch-accomplished">What MinPatch Accomplished<a class="anchor" aria-label="anchor" href="#what-minpatch-accomplished"></a>
</h4>
<ol style="list-style-type: decimal">
<li><p><strong>Patch Consolidation</strong>: MinPatch reduced the number
of patches by removing small, inefficient patches and consolidating the
remaining areas into larger, more viable patches.</p></li>
<li><p><strong>Size Constraint Satisfaction</strong>: All final patches
now meet the minimum size threshold, ensuring they are large enough to
be ecologically viable and cost-effective to manage.</p></li>
<li><p><strong>Target Achievement</strong>: Conservation targets are
maintained or improved, demonstrating that MinPatch doesn’t compromise
conservation effectiveness.</p></li>
<li><p><strong>Cost Optimization</strong>: The boundary penalty helps
create more compact patches, potentially reducing management
costs.</p></li>
</ol>
</div>
<div class="section level4">
<h4 id="key-insights">Key Insights<a class="anchor" aria-label="anchor" href="#key-insights"></a>
</h4>
<ul>
<li><p><strong>Efficiency vs. Viability Trade-off</strong>: The original
prioritizr solution was mathematically optimal but contained many small
patches. MinPatch trades some mathematical optimality for practical
viability.</p></li>
<li><p><strong>Context-Dependent Parameters</strong>: The choice of
minimum patch size and patch radius should be based on ecological
requirements, management constraints, and expert knowledge.</p></li>
<li><p><strong>Computational Considerations</strong>: Processing time
scales with the number of planning units and the complexity of the
spatial configuration.</p></li>
</ul>
</div>
</div>
<div class="section level3">
<h3 id="best-practices">Best Practices<a class="anchor" aria-label="anchor" href="#best-practices"></a>
</h3>
<div class="section level4">
<h4 id="parameter-selection">Parameter Selection<a class="anchor" aria-label="anchor" href="#parameter-selection"></a>
</h4>
<ol style="list-style-type: decimal">
<li>
<strong>Minimum Patch Size</strong>: Base this on:
<ul>
<li>Ecological requirements (home range sizes, minimum viable
populations)</li>
<li>Management efficiency (minimum economically viable management
units)</li>
<li>Expert knowledge of the study system</li>
</ul>
</li>
<li>
<strong>Patch Radius</strong>: Should be:
<ul>
<li>Large enough to allow for elongated patches</li>
<li>Not so large as to create unnecessarily large patches</li>
<li>Based on typical dispersal distances or management scales</li>
</ul>
</li>
<li>
<strong>Boundary Penalty</strong>: Use when:
<ul>
<li>Connectivity between patches is important</li>
<li>Compact patches are preferred for management</li>
<li>Edge effects are a concern</li>
</ul>
</li>
</ol>
</div>
<div class="section level4">
<h4 id="validation">Validation<a class="anchor" aria-label="anchor" href="#validation"></a>
</h4>
<p>Always validate your results by:</p>
<ol style="list-style-type: decimal">
<li>
<strong>Checking target achievement</strong>: Ensure conservation
goals are still met</li>
<li>
<strong>Examining spatial patterns</strong>: Verify that patches
make ecological sense</li>
<li>
<strong>Comparing costs</strong>: Understand the trade-offs
involved</li>
<li>
<strong>Expert review</strong>: Have domain experts review the final
configuration</li>
</ol>
</div>
</div>
<div class="section level3">
<h3 id="advanced-usage">Advanced Usage<a class="anchor" aria-label="anchor" href="#advanced-usage"></a>
</h3>
<div class="section level4">
<h4 id="multiple-scenarios">Multiple Scenarios<a class="anchor" aria-label="anchor" href="#multiple-scenarios"></a>
</h4>
<p>You can run MinPatch with different parameters to explore
trade-offs:</p>
<div class="sourceCode" id="cb13"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="co"># Conservative scenario (larger patches)</span></span>
<span><span class="va">result_conservative</span> <span class="op"><-</span> <span class="fu"><a href="../reference/run_minpatch.html">run_minpatch</a></span><span class="op">(</span></span>
<span> prioritizr_problem <span class="op">=</span> <span class="va">p</span>,</span>
<span> prioritizr_solution <span class="op">=</span> <span class="va">s</span>,</span>
<span> min_patch_size <span class="op">=</span> <span class="va">median_area</span> <span class="op">*</span> <span class="fl">10</span>, <span class="co"># Larger minimum size</span></span>
<span> patch_radius <span class="op">=</span> <span class="va">patch_radius</span> <span class="op">*</span> <span class="fl">1.5</span>,</span>
<span> boundary_penalty <span class="op">=</span> <span class="fl">0.01</span>, <span class="co"># Higher boundary penalty</span></span>
<span> verbose <span class="op">=</span> <span class="cn">FALSE</span></span>
<span><span class="op">)</span></span>
<span></span>
<span><span class="co"># Compare scenarios</span></span>
<span><span class="fu"><a href="../reference/compare_solutions.html">compare_solutions</a></span><span class="op">(</span><span class="va">result_conservative</span><span class="op">)</span></span>
<span><span class="co">#> $overall</span></span>
<span><span class="co">#> Metric Original MinPatch Change Percent_Change</span></span>
<span><span class="co">#> 1 Selected Planning Units 16.000 18.000 2.00 12.50000</span></span>
<span><span class="co">#> 2 Total Area 0.160 0.180 0.02 12.50000</span></span>
<span><span class="co">#> 3 Number of Patches 7.000 3.000 -4.00 -57.14286</span></span>
<span><span class="co">#> 4 Valid Patches (>= min size) 0.000 0.000 0.00 NA</span></span>
<span><span class="co">#> 5 Median Patch Size 0.010 0.070 0.06 600.00000</span></span>
<span><span class="co">#> 6 Planning Unit Cost 3535.299 3535.299 0.00 0.00000</span></span>
<span><span class="co">#> 7 Boundary Cost 0.023 0.023 0.00 0.00000</span></span>
<span><span class="co">#> 8 Total Cost 3535.322 3535.322 0.00 0.00000</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> $features</span></span>
<span><span class="co">#> Feature_ID Target Original_Area MinPatch_Area Area_Change Percent_Change</span></span>
<span><span class="co">#> 1 1 12.670220 14.083429 15.583069 1.4996396 10.648256</span></span>
<span><span class="co">#> 2 2 4.774965 5.124808 4.827211 -0.2975976 -5.807000</span></span>
<span><span class="co">#> 3 3 11.029225 11.707674 12.033291 0.3256171 2.781228</span></span>
<span><span class="co">#> 4 4 6.489033 6.863962 8.002595 1.1386334 16.588574</span></span>
<span><span class="co">#> 5 5 8.613574 9.482534 11.419918 1.9373846 20.431086</span></span>
<span><span class="co">#> Original_Target_Met MinPatch_Target_Met Original_Proportion</span></span>
<span><span class="co">#> 1 TRUE TRUE 1.111538</span></span>
<span><span class="co">#> 2 TRUE TRUE 1.073266</span></span>
<span><span class="co">#> 3 TRUE TRUE 1.061514</span></span>
<span><span class="co">#> 4 TRUE TRUE 1.057779</span></span>
<span><span class="co">#> 5 TRUE TRUE 1.100883</span></span>
<span><span class="co">#> MinPatch_Proportion</span></span>
<span><span class="co">#> 1 1.229897</span></span>
<span><span class="co">#> 2 1.010942</span></span>
<span><span class="co">#> 3 1.091037</span></span>
<span><span class="co">#> 4 1.233249</span></span>
<span><span class="co">#> 5 1.325805</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> $summary</span></span>
<span><span class="co">#> features_improved features_reduced features_unchanged targets_gained</span></span>
<span><span class="co">#> 1 4 1 0 0</span></span>
<span><span class="co">#> targets_lost</span></span>
<span><span class="co">#> 1 0</span></span></code></pre></div>
</div>
</div>
<div class="section level3">
<h3 id="conclusion">Conclusion<a class="anchor" aria-label="anchor" href="#conclusion"></a>
</h3>
<p>MinPatch provides a powerful way to post-process prioritizr solutions
to ensure they meet minimum patch size requirements while maintaining
conservation effectiveness. The Tasmania case study demonstrates that
MinPatch can successfully:</p>
<ul>
<li>Handle real-world conservation planning datasets</li>
<li>Consolidate fragmented solutions into viable patch
configurations</li>
<li>Maintain or improve conservation target achievement</li>
<li>Provide transparent reporting of trade-offs and improvements</li>
</ul>
<p>By integrating MinPatch into your conservation planning workflow, you
can bridge the gap between mathematically optimal solutions and
practically implementable conservation strategies.</p>
</div>
<div class="section level3">
<h3 id="session-information">Session Information<a class="anchor" aria-label="anchor" href="#session-information"></a>
</h3>
<div class="sourceCode" id="cb14"><pre class="downlit sourceCode r">
<code class="sourceCode R"><span><span class="fu"><a href="https://rdrr.io/r/utils/sessionInfo.html" class="external-link">sessionInfo</a></span><span class="op">(</span><span class="op">)</span></span>
<span><span class="co">#> R version 4.5.0 (2025-04-11)</span></span>
<span><span class="co">#> Platform: aarch64-apple-darwin20</span></span>
<span><span class="co">#> Running under: macOS 26.1</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> Matrix products: default</span></span>
<span><span class="co">#> BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib </span></span>
<span><span class="co">#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> locale:</span></span>
<span><span class="co">#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> time zone: Australia/Sydney</span></span>
<span><span class="co">#> tzcode source: internal</span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> attached base packages:</span></span>
<span><span class="co">#> [1] stats graphics grDevices utils datasets methods base </span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> other attached packages:</span></span>
<span><span class="co">#> [1] patchwork_1.3.2 ggplot2_4.0.0 dplyr_1.1.4 terra_1.8-80 </span></span>
<span><span class="co">#> [5] sf_1.0-22 prioritizr_8.1.0 minpatch_0.1.0 </span></span>
<span><span class="co">#> </span></span>
<span><span class="co">#> loaded via a namespace (and not attached):</span></span>
<span><span class="co">#> [1] generics_0.1.4 sass_0.4.10 class_7.3-23 </span></span>
<span><span class="co">#> [4] KernSmooth_2.23-26 stringi_1.8.7 lattice_0.22-7 </span></span>
<span><span class="co">#> [7] digest_0.6.38 magrittr_2.0.4 RColorBrewer_1.1-3 </span></span>
<span><span class="co">#> [10] evaluate_1.0.5 grid_4.5.0 fastmap_1.2.0 </span></span>
<span><span class="co">#> [13] jsonlite_2.0.0 Matrix_1.7-4 ape_5.8-1 </span></span>
<span><span class="co">#> [16] e1071_1.7-16 DBI_1.2.3 scales_1.4.0 </span></span>
<span><span class="co">#> [19] codetools_0.2-20 textshaping_1.0.4 jquerylib_0.1.4 </span></span>
<span><span class="co">#> [22] cli_3.6.5 rlang_1.1.6 units_1.0-0 </span></span>
<span><span class="co">#> [25] withr_3.0.2 cachem_1.1.0 yaml_2.3.10 </span></span>
<span><span class="co">#> [28] tools_4.5.0 raster_3.6-32 parallel_4.5.0 </span></span>
<span><span class="co">#> [31] rcbc_0.1.0.9003 assertthat_0.2.1 exactextractr_0.10.0</span></span>
<span><span class="co">#> [34] vctrs_0.6.5 R6_2.6.1 proxy_0.4-27 </span></span>
<span><span class="co">#> [37] lifecycle_1.0.4 classInt_0.4-11 stringr_1.6.0 </span></span>
<span><span class="co">#> [40] fs_1.6.6 htmlwidgets_1.6.4 ragg_1.5.0 </span></span>
<span><span class="co">#> [43] pkgconfig_2.0.3 desc_1.4.3 gtable_0.3.6 </span></span>
<span><span class="co">#> [46] pkgdown_2.2.0 bslib_0.9.0 pillar_1.11.1 </span></span>
<span><span class="co">#> [49] glue_1.8.0 Rcpp_1.1.0 systemfonts_1.3.1 </span></span>
<span><span class="co">#> [52] tidyselect_1.2.1 xfun_0.54 tibble_3.3.0 </span></span>
<span><span class="co">#> [55] dichromat_2.0-0.1 rstudioapi_0.17.1 knitr_1.50 </span></span>
<span><span class="co">#> [58] farver_2.1.2 htmltools_0.5.8.1 nlme_3.1-168 </span></span>
<span><span class="co">#> [61] rmarkdown_2.30 compiler_4.5.0 S7_0.2.0 </span></span>
<span><span class="co">#> [64] sp_2.2-0</span></span></code></pre></div>
</div>
</div>
</main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside>
</div>
<footer><div class="pkgdown-footer-left">
<p>Developed by Jason D. Everett, Anthony J. Richardson, Robert J. Smith.</p>
</div>
<div class="pkgdown-footer-right">
<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
</div>
</footer>
</div>
</body>
</html>