跳到内容

优先级/优先级

存储库文件导航

优先级排序器

R中的系统保护优先级

生命周期 R-CMD-检查Ubuntu R-CMD-检查窗口 R-CMD-checkmacOS 文档 覆盖率状态 CRAN-Status-Badge起重机状态

这个优先级R软件包使用混合整数线性规划(MILP)为构建和解决提供灵活接口的技术保护规划问题。它支持广泛的目标,可用于定制邮件的约束和惩罚保护规划问题对保护的具体需要规划练习。一旦建成,保护规划问题可能会使用各种商业和开源精确算法求解解算器。与通常用于求解的算法不同守恒问题,如启发式或模拟退火这里使用的精确算法可以保证找到最优解。此外,可以构造守恒问题来优化不同管理行动或区域的空间分配,含义保护从业者可以找出有益的解决方案多方利益相关者。最后,此包具有以下功能读取格式化的输入数据马尔克森水土保持规划并在更短的时间内找到更便宜的解决方案时间比马尔克森.

安装

官方版本

最新的官方版本优先级R包可以是从安装综合R档案网络(起重机)使用以下命令R(右)代码。

安装.包("优先级排序器",回购 = "https://cran.rstudio.com/")

开发版

可以安装最新的开发版本以访问新的最新官方版本中尚未提供的功能。请注意,开发版本更有可能包含编码错误比官方版本多。安装开发软件版本,您可以直接从GitHub在线代码储存库或来自R(右)宇宙一般来说,我们建议从安装开发版本R(右)宇宙。这是因为安装通过R(右)宇宙不需要任何附加软件(例如。,R工具适用于Windows系统,或Xcode和gfortran对于macOS系统)。

  • 从安装最新开发版本R(右)宇宙,使用下列的R(右)代码。

    安装.包("优先级排序器",回购 =c(c)("https://prioritizr.r-universe.dev(网址:https://prioritizr.r-universe.dev)","https://cloud.r-project.org"))
  • 从安装最新开发版本github,使用下列的R(右)代码。

    如果(!要求(遥控器))安装.包("遥控器")遥控器::安装github("优先级/优先级")

引用

请引用优先级R在出版物中使用时打包。收件人引用最新官方版本,请使用:

Hanson JO、Schuster R、Morrell N、Strimas-Mackey M、Edwards BPM、WattsME、Arcese P、Bennett J、Possingham HP(2024年)。优先级:系统R.R软件包8.0.4版中的保护优先级。可用https://CRAN.R-project.org/package=优先级.

或者,要引用最新开发版本,请使用:

Hanson JO、Schuster R、Morrell N、Strimas-Mackey M、Edwards BPM、WattsME、Arcese P、Bennett J、Possingham HP(2024年)。优先级:系统R.R软件包8.0.4版中的保护优先级。可用https://github.com/priorizer/priorizer.

此外,我们还保留了的记录出版物使用优先级R包裹。如果您在任何请给我报告或出版物将问题提交给github所以我们可以将其添加到记录中。

用法

在这里,我们提供了一个简短的例子,展示了优先级R包裹可以用来建造和解决保护问题。具体来说,我们将使用通过优先级数据R包裹。此外,我们将使用特拉R要执行的程序包光栅计算。首先,我们将加载包。

#加载程序包图书馆(优先级排序器)图书馆(优先级数据)图书馆(特拉)

在这个例子中,我们将使用华盛顿数据集。要导入规划单位数据,我们将使用获取wa_pu()功能。虽然优先级R包可以支持多种不同类型的计划单元数据,这里我们的规划单位表示为单层光栅(即。,terra::rast()对象)。每个单元格代表不同的规划单位和单元值表示土地征用成本。具体而言,共有10757个规划单元(即,具有非缺失值)。

#导入计划单位数据
wa_pu(_pu) <-获取wa_pu()#预览数据打印(wa_pu(_pu))
##类:SpatRaster##尺寸:109、147、1(nrow、ncol、nlyr)##分辨率:4000,4000(x,y)##范围:-1816382,-1228382,247483.5,683483.5(xmin,xmax,ymin,ymax)##咕咕叫。参考:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=球体+单位=m+no_defs##来源:wa_pu.tif##名称:成本##最小值:0.2986647##最大值:1804.1838379
#绘图数据绘图(wa_pu(_pu),主要的 = "成本", = 错误的)

接下来,我们将使用获取wa特性()函数导入保护特征数据。虽然优先级R包装罐支持许多不同类型的特征数据,我们的特征数据如下表示为多层光栅(即。,terra::rast()对象)。每个图层描述要素的空间分布。这里是我们的特色数据对应不同的鸟类种类。解释迁移模式,物种的繁殖和非繁殖分布是表示为不同的特征。具体来说,单元格值表示个体的相对丰度,较高的值表明更丰富。

#输入要素数据
wa功能(_F) <-获取wa特性()#预览数据打印(wa功能(_F))
##类:SpatRaster##尺寸:109、147、396(nrow、ncol、nlyr)##分辨率:4000,4000(x,y)##范围:-1816382,-1228382,247483.5,683483.5(xmin,xmax,ymin,ymax)##协调。参考:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=sphere+units=m+no_defs##来源:wa_features.tif##名称:递归~ding)、Botau~ding(波图~ding。。。##最小值:0.000、0.000、0000、0.000。。。##最大值:0.514、0.812、3.129、0.115、0.296、0.06。。。
#绘制前九个特征绘图(wa_features(_F)[[1:9]],编号 = , = 错误的)

让我们确保您的计算机上安装了解算器。这个非常重要,以便您可以使用优化算法生成空间优先级。如果这是您第一次使用优先级R软件包,请使用下列的R(右)代码。尽管HiGHS解算器相对较快易于安装,请注意,您需要安装古罗比软件套件和古罗比 R(右)包裹以获得最佳性能(请参见Gurobi安装指南详细信息)。

#如果需要,安装HiGHS解算器安装.包("高点",回购 = "https://cran.rstudio.com/")

现在,让我们生成一个空间优先级。为了确保可行性,我们将制定预算。具体来说,优先化的总成本将占研究区域总土地价值的5%。鉴于在这个预算中,我们希望优先考虑增加功能表示,以便每个特征,理想的情况是,优先级覆盖其20%的分布。在这种情况下,我们可以购买给定区域内的所有土地规划单位,或给定规划单位内没有土地。因此,我们将创建一个新的问题()将使用最少的短缺目标(通过添加最小值对象()),具有相对目标20%(通过添加相对目标()),二进制决策(通过添加会议决定()),并指定我们想要接近最优使用安装在我们的电脑(通过add_default_solver()).

#计算预算
预算 <- 特拉::全球(瓦普,"总和",na.rm(毫米) = 真的)[[1]]* 0.05

#制造问题
第1页 <-问题(wa_pu(_pu),特征 = wa功能(_F)) %>%添加最小缩短对象(预算) %>%添加相对目标(0.2) %>%add_binary_decisions()%>%添加默认解决程序(缺口 = 0.1,冗长的 = 错误的)#打印问题打印(第1页)
##守恒问题(<守恒问题>)##●数据##│•特征:“Recurvirostra americana(繁殖)”,……(共396个)##│•规划单位:##││•数据:<SpatRaster>(总计10757)##││•成本:连续值(介于0.2987和1804.1838之间)##│•范围:-1816381.6182247483.5211-1228381.6182683483.5211(xmin,ymin,xmax,ymax)##©©CRS:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=球体+单位=m+no_defs(投影)##●配方##││•目标:最低短缺目标(‘预算’=8748.4908)##││•处罚:无规定##││•目标:相对目标(在0.2和0.2之间)##│•约束:未指定##│•决策:二元决策##⑪•优化##●投资组合:默认投资组合##•solver:gurobi solver(`gap`=0.1,`time_limit`=2147483647,`first_feasible`=FALSE,…)## # 使用“summary(…)”查看完整的公式。

在我们建立了一个问题(),我们可以解决它以获得解决方案。

#解决问题
s1 <-解决(第1页)#提取目标打印(属性(s1,"客观的"))
##解决方案1##   4.463003
#抽出解决问题的时间打印(属性(s1,"运行时"))
##解决方案1##      4.176
#从解算器中提取状态消息打印(属性(s1,"地位"))
##解决方案1##“最佳”
#绘制解决方案绘图(s1,主要的 = "解决方案", = 错误的)

生成解决方案后,评估它很重要将计算解决方案选择的规划单元数,以及解决方案的总成本。我们还可以检查有多少解决方案满足表示目标。

#通过解决方案计算选定的规划单元数评估_摘要(第1页,s1)
###A台:1×2##摘要n##<chr><dbl>##1个2308
#计算解决方案的总成本评估成本汇总(第1页,s1)
###A兼容:1×2##汇总成本##<chr><dbl>##总共8748人。
#计算解决方案的目标覆盖率
p1_目标覆盖率 <-评估目标平均值摘要(第1页,s1)打印(p1_目标覆盖率)
###A兼容:396×9##功能满足total_amount absolute_target absolute_held absolute_shortfall##<chr><lgl><dbl><dbl><dbl##1 Recurvir…真100。20.0          23.3               0   ##2人马座…正确99.9 20.0 29.1 0##3人马座…真100。20.0          34.0               0   ##4乌鸦b…TRUE 99.9 20.0 20.2 0##5乌鸦b…假99.9 20.0 18.5 1.53##6 Cinclus…真100。20.0          20.5               0   ##7脊椎…正确99.9 20.0 22.2 0##8脊椎…正确99.9 20.0 22.6 0##9 Falco sp.…正确99.9 20.0 24.3 0##10 Falco sp.…真100。20.0          24.2               0   ## # 还有386行## # 还有3个变量:relative_target<dbl>、relative_hold<dbl,###relative_shortfall<数据库>
#在给定解决方案的情况下,检查达到目标的功能的百分比打印(平均值(p1_目标覆盖率$遇见)* 100)
## [1] 96.21212

尽管此解决方案有助于实现表示目标,但它确实做到了不考虑研究区域内现有的保护区。像这样的,它没有考虑到某些功能可能部分甚至全部由现有保护区代表,反过来,可能无法为新的受保护对象确定有意义的优先级地区。为了解决这个问题,我们将使用获得锁定()用于导入研究区域内保护区的空间数据的功能。然后,我们将向问题()以确保他们由解决方案选择(通过添加锁定的in_constraints()).

#导入锁定的数据
wa_locked_in(锁定) <-获得锁定()#打印数据打印(wa_locked_in(锁定))
##类:SpatRaster##尺寸:109、147、1(nrow、ncol、nlyr)##分辨率:4000,4000(x,y)##范围:-1816382,-1228382,247483.5,683483.5(xmin,xmax,ymin,ymax)##协调。参考:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=球体+单位=m+no_defs##来源:wa_locked_in.tif##名称:保护区##最小值:0##最大值:1
#绘图数据绘图(wa_locked_in(锁定),主要的 = "现有保护区", = 错误的)

#使用添加到其中的锁定约束创建新问题
第2页 <-
  第1页%>%添加锁定的in_constraints(wa_locked_in(锁定))#解决问题
s2秒 <-解决(第2页)#绘制解决方案绘图(s2秒,主要的 = "解决方案", = 错误的)

此解决方案是对先前解决方案的改进。然而,研究区内有一些地方不适合保护区建立(例如,由于土地保有权)。作为一个因此,该解决方案可能不适用于实施,因为它可能会选择一些不可用的位置保护。为了解决这个问题,我们将使用获得锁定()用于导入空间数据的函数,该数据描述哪些规划单元不是可用于保护。然后,我们将向问题()确保解决方案没有选择它们(通过添加锁定输出约束()).

#导入锁定的数据
wa_锁定_关闭 <-获得锁定()#打印数据打印(wa_锁定_关闭)
##类:SpatRaster##尺寸:109、147、1(nrow、ncol、nlyr)##分辨率:4000,4000(x,y)##范围:-1816382,-1228382,247483.5,683483.5(xmin,xmax,ymin,ymax)##协调。参考:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=球体+单位=m+no_defs##来源:wa_locked\out.tif##名称:市区##最小值:0##最大值:1
#绘图数据绘图(wa_锁定,主要的 = "无法保护的区域", = 错误的)

#使用添加到其中的锁定约束创建新问题
第3页 <-
  第2页%>%添加锁定输出约束(wa_锁定_关闭)#解决问题
第3页 <-解决(第3页)#绘制解决方案绘图(第3页,主要的 = "解决方案", = 错误的)

这个解决方案甚至比以前的解决方案更好。然而,我们是尚未完成。解决方案选择的规划单位相当支离破碎。这可能会导致问题,因为碎片增加管理成本和通过边缘效应降低保护效益。为了解决这个问题,我们可以通过添加惩罚过度分散的解决方案(通过添加边界启用()). 这里我们将使用惩罚因子(即。,边界长度修改器)为0.003,边缘系数为50%,以便位于研究区域外边缘的规划单元不是过度惩罚。

#增加边界惩罚,产生新问题
第4页 <-
  第3页%>%添加边界支持(处罚 = 0.003,边缘系数 = 0.5)#解决问题
第4节 <-解决(第4页)#绘制解决方案绘图(第4节,主要的 = "解决方案", = 错误的)

现在,让我们研究解决方案选择的规划单元是最重要的是成本效益达到目标。为了实现这样,我们将使用费里法。虽然此方法会为每个特征生成分数我们将分别检查总结总体得分的总分所有功能的重要性。

#计算重要性得分
钢筋混凝土 <-
  第4页%>%评估运送者重要性(第4节)#打印分数打印(钢筋混凝土)
##类:SpatRaster##尺寸:109、147、397(nrow、ncol、nlyr)##分辨率:4000,4000(x,y)##范围:-1816382、-1228382、247483.5、683483.5(xmin、xmax、ymin、ymax)##协调。参考:+proj=laea+lat_0=45+lon_0=-100+x_0=0+y_0=0+ellps=球体+单位=m+no_defs##源:内存##变量名:wa_pu##wa_pu(_pu)##wa_pu(_pu)##               ...##名称:Recur~ding),Botau~ding),Botau~ding),Corvu~ding),Corvu~ding),Cincl~full)。。。##最小值:0.00000000000.0000000000.00000000000.00000000000,0.00000000e+00,0.000000e+00,0.00000e+00。。。##最大值:0.0003227724、0.0002213034、0.0006622152、7.771815e-05、8.974447e-05、8.483296e-05。。。
#绘制总重要性得分
##注意,灰色单元格不是按优先级选择的绘图(钢筋混凝土[["全部的"]],主要的 = "重要性得分", = 错误的,打破 =c(c)(0,1e-10,0.005,0.01,0.025),科尔 =c(c)("#电子5e5e5","#fff7秒","#fc8d59型","#7f0000个"))

这个简短的示例演示了优先级R包可以是用于构建和定制保护问题,然后解决它们生成解决方案。虽然我们只探索了几个不同的用于修改守恒问题的函数,该包提供用于指定目标、约束、惩罚和决策变量,以便您可以构建和自定义尾缆保护规划问题以适应您的规划场景。

学习资源

这个程序包网站包含有关的信息优先级R包裹。在这里你可以找到每个功能和内置的文档数据集、和新闻描述每个包中的更新版本。它还包含以下文章和教程。

其他资源也可以在中找到在线存储库优先级排序器组织.这些资源包括演讲和研讨会的幻灯片包裹此外,车间材料也可用(例如卡尔顿2023车间).

获取帮助

如果您对优先级R包装或请提出改进建议在代码上发布问题储存库.