从函数和包含-infinities的矩阵进行优化。使用R,optim()

时间:2013-12-08 08:39:04

标签: r function optimization recursion infinity

(如果有人建议获得更好的头衔,请告诉我。)

我正在尝试编写一个反向归纳优化问题。 (这可能不重要,但如果有帮助,那很好。)

我有一个函数,它是两个变量x和y的函数。

我有一个矩阵,我只知道终端列,每列需要使用最后一列向后求解并优化x和y。

例如

m.state=matrix(1:16,16,1)
m.valuemat=matrix(0,16,5)
# five is number of periods 
#16 is num of states (rows)

##Suppose i want to make optim avoid chosing a configuration that lands us in states 1-5 at the end
m.valuemat[1:5,5]=-Inf



f.foo0=function(x,y){
        util=2*x^2-y^1.5
    return(util)
}

foo=function(x,y,a){

    footomorrow=function(x,y,a){
        at1=-x+2*y+a

    atround=abs(m.state-at1)
    round2=m.state[which(min(atround)==atround)]
    at1=round2  


        Vtp1=m.valuemat[which(m.state==at1),(5+1)]
                    return(Vtp1)
    }

    valuetoday=f.foo0(x,y)+.9*footomorrow(x,y,a)

    return(valuetoday)
}




# I know the final column should be all 0's 
for(i in 1:4){
print(i)
    i=5-i
    for(j in 1:16){

        tempfunction=function(x){
            foo(x[1],x[2],m.state[j])
        }

        result=optim(c(.001,1), tempfunction, gr = NULL, method = "L-BFGS-B", 
                                                                    lower = c(0.001,0.001), upper = c(5,1),
                                                                    control = list(fnscale=-1,
                                                                    maxit=50000), hessian = FALSE)


    m.valuemat[j,i]=result$value
        print(  m.valuemat)
}


}

你得到的错误是:optim中的错误(c(0.001,1),f.Vt.ext,gr = NULL,method =“L-BFGS-B”,:   L-BFGS-B需要有限值'fn'。

有没有办法让这个更聪明?或者我可以放的条件还是什么?这显然是我的真实代码的简化版本。

0 个答案:

没有答案