r - 为什么函数 `GenSA` 不遵守组件的下限?
问题描述
从 CRAN 的包中引用函数的官方文档GenSA
GenSA
:
用法
GenSA(par, fn, lower, upper, control=list(), ...)
论据
par
向量。要优化的组件的初始值。默认为NULL
,在这种情况下,将自动生成默认值。fn
要最小化的函数,第一个参数是要进行最小化的参数向量。它应该返回一个标量结果。lower
长度为 的向量par
。组件的下限。upper
长度为 的向量par
。组件的上限。
很好。因此,如果我理解正确,传递给的参数fn
永远不应低于或高于我在lower
and中指定的界限higher
。
情况似乎并非如此:
library(GenSA)
GenSA(c(1.0/90, 1.0, 0.02), function(args){
arg1 = args[1]; arg2 = args[2]; arg3 = args[3]
print(args)
if(arg2 <= 0) stop("WTF")
0
}, lower=c(0, 1.0, 0), upper=c(Inf, Inf, 0.4))
运行此代码的结果是不可原谅的:
[1] 0.01111111 1.00000000 0.02000000
[1] 0.0000000 0.0000000 0.2891973
Error in fn(par, ...) : WTF
Calls: GenSA -> <Anonymous> -> fn
Execution halted
为什么GenSA
用第二个组件调用我的函数等于0.0
?我以为我说的很清楚:lower=c(0, 1.0, 0)
!
我是不是误会了什么?我的错误是什么?如何强制它正常工作?
解决方案
罪魁祸首:
upper=c(Inf, Inf, 0.4)
删除Inf
s 并将其设置为upper=c(100, 100, 0.4)
和下限似乎终于得到尊重。
不知道为什么。
推荐阅读
- angular - 如何在有角材料中一次打开多个垫底片
- windows - 删除除 windows 框中最新的 3 或 3 个文件夹之外的所有文件夹
- linux - 在调用 NASM 中的函数之前,%rsp 是否应该与 16 字节边界对齐?
- php - 根据当前帖子类型搜索不同的按钮
- google-maps - Flutter - 获取粗略的位置以改善搜索结果 - 无需明确权限
- angular - HeaderComponent.html:313 错误类型错误:_co.logout 不是函数
- c# - 尝试为 MenuStrip 着色,左侧出现白色边框
- python-3.x - Python3 pika channel.basic_consume() 导致 MySQL 连接过多
- c++ - 独特的科学软件在 Windows 10 上更新后出现 0xc00007b 错误
- paypal - 在 PayPal 中自动捕获订单