複数のエリアと船隊を持つ漁業の生物経済モデルを構築しています。目的関数にコスト関数を追加する必要があります。コスト関数導関数は次のとおりです。
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" )