首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R具有潜在警告/错误的全局优化问题和tryCatch的使用

R具有潜在警告/错误的全局优化问题和tryCatch的使用
EN

Stack Overflow用户
提问于 2021-08-31 21:55:42
回答 1查看 54关注 0票数 1

简单地说,我有一个函数f(x, t2),我想找出x的值,使f(x, t2)相对于t2的积分最大化。选择粒子群算法进行优化。可执行代码如下所示

代码语言:javascript
运行
AI代码解释
复制
library(pso)
xl=0; xu=2000; n=1; t2l=100; t2u=2000; t1=1
g<-function(x, t2) t1*x/(t2+x)
h<-function(z) 1/z^n
gdot<-function(x, t2){
  c(x/(t2+x),-t1*x/(t2+x)^2)
}
logdetHinv<-function(dp, dw, t2){
  gmat=mapply(function(x) gdot(x,t2),dp)
  D0=gmat%*%diag(dw)%*%t(gmat)
  D1=gmat%*%diag(1/h(g(dp,t2)))%*%diag(dw)%*%t(gmat)
  2*log(det(D1))-log(det(D0))
}
obj<-function(x){
  dp=x[1:2]; dw=c(x[3],1-x[3])
  fitness_value=-integrate(Vectorize(function(t2) logdetHinv(dp, dw, t2)*1/(t2u-t2l)), t2l, t2u)$value
  return(ifelse(dw[2]>0, fitness_value, fitness_value+1e3))
}

x <- psoptim(rep(1,3), fn = obj, lower = c(rep(xl,2),0.1), upper = c(rep(xu,2), 0.9))$par
x

因为全局优化涉及一些随机过程,所以它有时会报告正确的结果

代码语言:javascript
运行
AI代码解释
复制
> x
[1] 2000.0000  754.4146    0.5000

其他时候它会报告错误

代码语言:javascript
运行
AI代码解释
复制
Error in integrate(Vectorize(function(t2) logdetHinv(dp, dw, t2) * 1/(t2u -  : 
  non-finite function value
In addition: There were 11 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In log(det(D1)) : NaNs produced
2: In log(det(D0)) : NaNs produced
3: In log(det(D1)) : NaNs produced
4: In log(det(D0)) : NaNs produced

我假设该算法尝试对logdetHinv中的一些负值进行记录,这将返回NaN并显示一条警告消息,而不是错误,最终导致integrate中出现错误。

我想要避免这样的值,可能是使用tryCatch,比如如果在函数logdetHinv中有警告,它返回一个非常小的值,但不是NaN,所以它不会在integrate中导致错误,并且psoptim在最大化目标函数(最小化-integrate(logdetHinv))时不太可能选择这样的值。在如此复杂的情况下,我对tryCatch并不熟悉。我应该把tryCatch放在哪里?谢谢。

此外,我想知道R中是否有一些调试技术可以让我知道在这种情况下是什么随机值(D0/D1)导致了错误。我猜它在log中是一些负值,但它不应该是负值,因为log中是一个正定矩阵的行列式。在回溯模式下,在browse中,如果我键入D0,将找不到对象'D0‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 22:33:19

在这种情况下,我不会使用tryCatch,因为它在测试中通常比在主代码中更合适。为什么不简单地测试函数中的行列式呢?像这样的东西应该是有效的:

代码语言:javascript
运行
AI代码解释
复制
logdetHinv<-function(dp, dw, t2){
    gmat=mapply(function(x) gdot(x,t2),dp)
    D0=gmat%*%diag(dw)%*%t(gmat)
    D1=gmat%*%diag(1/h(g(dp,t2)))%*%diag(dw)%*%t(gmat)
    detD1 <- max(0.01, det(D1))
    detD0 <- max(0.01, det(D0)) 
    2*log(detD1)-log(detD0)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69008454

复制
相关文章
【Python】列表 List ⑦ ( 列表遍历 | 使用 while 循环遍历列表 | 使用 for 循环遍历列表 | while 循环 与 for 循环对比 )
将 列表 容器 中的数据元素 , 依次逐个取出进行处理的操作 , 称为 列表的遍历 ;
韩曙亮
2023/10/11
9730
爬取微博热榜并将其存储为csv文件
基于大数据技术的社交媒体文本情绪分析系统设计与实现,首先需要解决的就是数据的问题,我打算利用Python 语言的Scrapy、Beautiful Soup等工具抓取一段时间内新浪微博用户对于热点事件的博文之后,按照事件、时间等多种方式进行分类,接着利用正则表达式等工具过滤掉微博正文中的超链接、转发信息、表情符号、广告宣传和图片等无效信息之后,将处理完的文本进行手工标注,最终将标注的文本作为训练语料库。今天的主要工作量就是对数据的获取,进行简单的热榜爬虫、和热点爬虫,热榜爬虫代码进行公开,热点爬虫代码需要的欢迎私信有偿获取。
秋名山码神
2023/10/16
3730
爬取微博热榜并将其存储为csv文件
【C++】构造函数初始化列表 ③ ( 构造函数 的 初始化列表 中 为 const 成员变量初始化 )
如果 类 中定义了 被 const 修饰 的 成员变量 , 那么该成员变量 必须被初始化 , 否则会报错 ;
韩曙亮
2023/10/15
2960
【C++】构造函数初始化列表 ③ ( 构造函数 的 初始化列表 中 为 const 成员变量初始化 )
ora-01007变量不在选择列表中_oracle存储过程变量赋值
使用oracle数据库过程中,偶尔遇到 ORA-01008: 并非所有变量都已绑定 这个错误,此时应该查检sql中是否有以下情况:
全栈程序员站长
2022/10/04
1.5K0
python 使用列表和字典存储信息
"""     作者:白     时间:2018年1月9日     需求:假设你很多汽车,通过不断询问您是否要将车辆添加到您的库存中,     如果您这样做,那么它将会询问汽车的细节。如果没有,应用程
py3study
2020/01/10
1.2K0
使用多维存储(全局变量)(二)
$ORDER函数返回给定级别(下标编号)的下一个下标的值。例如,假设定义了以下全局设置:
用户7741497
2022/06/08
3510
使用多维存储(全局变量)(三)
若要将全局变量(全部或部分)的内容复制到另一个全局变量(或局部数组)中,请使用ObjectScript Merge命令。
用户7741497
2022/06/09
8250
使用多维存储(全局变量)(一)
在全局节点中存储数据很简单:像对待任何其他变量一样对待全局变量。 区别在于对全局变量的操作是自动写入数据库的。
用户7741497
2022/06/08
8120
使用多维存储(全局变量)(四)
InterSystems IRIS提供了使用全局变量实现完整事务处理所需的基本操作。 InterSystems IRIS对象和SQL自动利用这些特性。 如果直接将事务性数据写入全局变量,则可以使用这些操作。
用户7741497
2022/06/09
5630
python 的列表遍历删除
python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如
py3study
2020/01/07
2.4K0
arraylist遍历 并删除_js遍历list对象
//第一种遍历 ArrayList 对象的方法 foreach(object o in al) { Console.Write(o.ToString()+” “); }
全栈程序员站长
2022/11/10
7.6K0
mysql存储过程和存储函数的使用
create procedure name(IN | OUT |INOUT str STRING) #定义存储过程名字
93年的老男孩
2019/12/18
2.3K0
pycharm终端提示符_python函数参数为列表
二、设置Editor->General->other->”show quick documentation on mouse move”
全栈程序员站长
2022/09/27
5690
pycharm终端提示符_python函数参数为列表
5.0 Python 定义并使用函数
函数是python程序中的基本模块化单位,它是一段可重用的代码,可以被多次调用执行。函数接受一些输入参数,并且在执行时可能会产生一些输出结果。函数定义了一个功能的封装,使得代码能够模块化和组织结构化,更容易理解和维护。在python中,函数可以返回一个值或者不返回任何值,而且函数的参数可以是任何python对象,包括数字、字符串、列表、元组等。python内置了许多函数,同时也支持用户自定义函数。
王瑞MVP
2023/08/13
2650
5.0 Python 定义并使用函数
函数是python程序中的基本模块化单位,它是一段可重用的代码,可以被多次调用执行。函数接受一些输入参数,并且在执行时可能会产生一些输出结果。函数定义了一个功能的封装,使得代码能够模块化和组织结构化,更容易理解和维护。在python中,函数可以返回一个值或者不返回任何值,而且函数的参数可以是任何python对象,包括数字、字符串、列表、元组等。python内置了许多函数,同时也支持用户自定义函数。
王瑞MVP
2023/10/11
2220
遍历环境变量内容
所有应用程序则运行后都会有一组环境变量值,它是一组指针数组,每一个指针指向的内容都具有 name=value 的结构,其中 name 是环境变量名,value 是环境变量值。在程序中我们可以遍历这组环境变量内容,具体代码如下:
我与梦想有个约会
2023/10/20
1280
遍历环境变量内容
jQuery遍历函数
.closest():从元素本身開始,逐级向上级元素匹配。并返回最先匹配的祖先元素。
全栈程序员站长
2022/07/07
1.1K0
测试结果存储并使用图表展示
数据源来自于pytest执行之后的结果,由于使用allure进行结果的保存,所以直接读取对应的测试结果文件
zx钟
2022/01/18
8430
测试结果存储并使用图表展示
python中列表(list)函数及使用
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 – 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
全栈程序员站长
2022/09/06
1K0
Bash遍历字符串列表
大家知道,通过python可以很容易实现各类数据结构,例如列表。但在bash中,实现一个列表相对来说会比较复杂。
zero000
2021/03/23
7.1K0
Bash遍历字符串列表

相似问题

Vuetify Date Picker -如何设置对话框使用的初始日期

120

Vuetify -date-picker格式不稳定-我如何修复?

126

React Date-Picker不接受日期

111

如何从date time Picker中提取日期和时间?

20

如何从angular material Date picker获取当前时间?

358
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文