(如果有人建议获得更好的头衔,请告诉我。)
我正在尝试编写一个反向归纳优化问题。 (这可能不重要,但如果有帮助,那很好。)
我有一个函数,它是两个变量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'。
有没有办法让这个更聪明?或者我可以放的条件还是什么?这显然是我的真实代码的简化版本。