我正在建立一个具有多个区域和船队的渔业的生物经济模型。我需要在目标函数中添加一个成本函数。成本函数导数为:
dvcost<-(maxeff/(maxeff-(total f))*k*(f/total f)-ln(1-((total f)/maxeff))*k*maxeff/(total f)*(1-(f/total f))
其中:对于每个车队,f 是目标函数最小化的特定区域的努力,总 f 是特定车队跨区域的努力总和。k 和 maxeff 是参数。
我的问题是:如何将此成本函数应用于我的问题?我已经有了总 f(在代码中是“f”),但是我需要找到目标函数正在处理的区域的 f。
任何建议都非常感谢。谢谢!
完整代码如下: CODE
nfleets<-2
nareas<-2
M<-1
M<-array(M,dim=c(nfleets,nareas))
N<-1000
cost<-c(30,30)
cost<-array(cost,dim=c(nfleets,nareas))
Price<-2
Price<-array(Price,dim=c(nfleets,nareas))
q<-array(0.1,dim=c(nfleets,nareas))
f<-1
f<-array(f,dim=c(nfleets,nareas))
init.eff<-array(3,dim=c(nfleets,nareas))
OF<-array(c(q*f), dim=c(nfleets, nareas))
Catch<-array(0,dim=c(nfleets, nareas))
obj<-function(f){
f <- array(f, dim=c(nfleets, nareas))
F <- q*f
Z <- M+sum(F)
S <- exp(-Z)
Catch<- N*F/Z*(1-S)
Tot.Catch <- sum(Catch)
NR<-array(0,dim=c(nfleets,nareas))
NR<-Price*Catch - f*cost
d.NR<-array(0,dim=c(nfleets,nareas))
f <- apply(f, 1, sum)
d.NR<- N*q/Z*(1-S-F/Z+F/Z*S+F*S)*Price - cost
return(sum(d.NR*d.NR))
}
zero.bnd <- rep.int(0, length(f))
opt.eff <- optim( init.eff, obj, method="Nelder-Mead" )