相关疑难解决方法(0)

在R中使用`nls.lm`时如何处理边界约束

我刚才问了这个问题.我不确定是否应将此作为答案或新问题发布.我没有答案但是我通过nls.lm在R中应用Levenberg-Marquardt算法"解决"了这个问题,当解决方案在边界时,我运行信任区域反射算法(TRR,在R中实现)来执行远离它.现在我有了新的问题.

根据我的经验,以这种方式,程序达到最佳状态,并且对起始值不那么敏感.但这只是一种实用的方法,可以解决我遇到的问题nls.lm以及R中的其他优化函数.我想知道为什么nls.lm这种方式对于边界约束的优化问题以及如何nls.lm在实践中使用时处理边界约束.

下面我举例说明使用的两个问题nls.lm.

  1. 它对起始值很敏感.
  2. 当某个参数到达边界时停止.

可重复的示例:焦点数据集D.

library(devtools)
install_github("KineticEval","zhenglei-gao")
library(KineticEval)
data(FOCUS2006D)
km <- mkinmod.full(parent=list(type="SFO",M0 = list(ini   = 0.1,fixed = 0,lower = 0.0,upper =Inf),to="m1"),m1=list(type="SFO"),data=FOCUS2006D)
system.time(Fit.TRR <- KinEval(km,evalMethod = 'NLLS',optimMethod = 'TRR'))
system.time(Fit.LM <- KinEval(km,evalMethod = 'NLLS',optimMethod = 'LM',ctr=kingui.control(runTRR=FALSE)))
compare_multi_kinmod(km,rbind(Fit.TRR$par,Fit.LM$par))
dev.print(jpeg,"LMvsTRR.jpeg",width=480)
Run Code Online (Sandbox Code Playgroud)

LM适合vs TRR适合

描述模型/系统的微分方程是:

"d_parent = - k_parent * parent"                                                 
"d_m1 = - k_m1 * m1 + k_parent * f_parent_to_m1 * parent" 
Run Code Online (Sandbox Code Playgroud)

在左边的图中是带有初始值的模型,中间是使用"TRR"的拟合模型(类似于Matlab lsqnonlin函数中的算法),右边是使用"LM"的拟合模型nls.lm.查看拟合参数(Fit.LM$par),您会发现一个拟合参数(f_parent_to_m1)位于边界处1.如果我将一个参数的起始值 …

r mathematical-optimization nls

24
推荐指数
1
解决办法
1430
查看次数

R函数搜索函数

更新:最初的问题是:是否有一个R函数使用在matlab中的"lsqnonlin"函数中实现的相同算法?但是,答案更多与在R中搜索函数有关.我认为答案通常对R用户非常有用.所以我编辑了标题,但在这里再次问了原始问题:在R中,如何进行非线性最小二乘优化,包括求解微分方程?

我做的非线性最小二乘优化和发现功能的MATLAB lsqnonlin进行比所有的优化算法我R中试图更好(包括函数算法optimx,nlm,nlminb,solnp在这个意义上,等等),这是更快,找到了"更正确的"解决方案

但是,我没有找到在Matlab中使用的R中的"信任区域反射"算法的实现.有人知道是否已经实施了吗?此外,"信任区域反射"算法是否更适合这种优化算法?

optimization matlab r nonlinear-optimization

3
推荐指数
1
解决办法
444
查看次数