【发布时间】:2021-12-05 22:59:07
【问题描述】:
步骤是我需要找到优化(最小化)E(TC)的t(i)
这是我的 n=3 代码,并希望以最佳 t(i) ,i =1,2,3 最小化 E(TC)。请注意,t(1) 必须等于 0,并且具有约束 t(2) 但结果是 有人知道我的代码有什么问题吗? *ps:我也尝试使用 consrtOptim 注意,n=2 的约束条件是 t(1)=0 然后它返回OptExp<-function(te){
mu=0.001299059
sigm=0.00006375925
D=80
K=500
F=0.7
T=40
Po=-0.0208801593
mu=0.001299059
n=3
t=as.vector(n,mode="numeric")
P1=as.vector(n,mode="numeric")
P2=as.vector(n,mode="numeric")
Pt1=as.vector(n,mode="numeric")
Pt2=as.vector(n,mode="numeric")
for (i in 2:(n)){
t[1]=0
t[i]=te[i-1]}
for (i in 1:n){
if(i!=n){
P1[i]=Po*exp((mu+(sigm^2)/2)*t[i])*D*(t[i+1]-t[i])
P2[i]=(1/2)*Po*exp((mu+(sigm^2)/2)*t[i])*F*D*(t[i+1]-t[i])^2}
else {
P1[i]=Po*exp((mu+(sigm^2)/2)*t[i])*D*(T-t[i])
P2[i]=(1/2)*Po*exp((mu+(sigm^2)/2)*t[i])*F*D*(T-t[i])^2}}
Pt1=sum(P1)
Pt2=sum(P2)
E=n*K+Pt1+Pt2
#constraint
if (t[3]<T & t[1]<t[2] & t[2]<t[3]){
return(E)}
}
optmz=optim(c(3,5),fn=OptExp)
Error in optim(c(3, 5), fn = OptExp) :
objective function in optim evaluates to length 0 not 1
n=2
t=as.vector(n,mode="numeric")
t[1]=0
OptExp<-function(te){
mu=0.001299059
sigm=0.00006375925
D=80
K=500
F=0.7
T=40
Po=-0.0208801593
mu=0.001299059
P1=as.vector(n,mode="numeric")
P2=as.vector(n,mode="numeric")
Pt1=as.vector(n,mode="numeric")
Pt2=as.vector(n,mode="numeric")
for (i in 2:(n)){
t[1]=0
t[i]=te[i-1]}
for (i in 1:n){
if(i!=n){
P1[i]=Po*exp((mu+(sigm^2)/2)*t[i])*D*(t[i+1]-t[i])
P2[i]=(1/2)*Po*exp((mu+(sigm^2)/2)*t[i])*F*D*(t[i+1]-t[i])^2}
else {
P1[i]=Po*exp((mu+(sigm^2)/2)*t[i])*D*(T-t[i])
P2[i]=(1/2)*Po*exp((mu+(sigm^2)/2)*t[i])*F*D*(T-t[i])^2}}
Pt1=sum(P1)
Pt2=sum(P2)
E=n*K+Pt1+Pt2
return(E)
}
lb=t[n-1]
u1=cbind(c(1,-1));u1
c1=c(lb,-40)
init=c(3)
value<-constrOptim(init,f=OptExp,ui=u1,ci=c1,grad=NULL)
one-dimensional optimization by Nelder-Mead is unreliable:
use "Brent" or optimize() directly
【问题讨论】:
-
您不能只在 OptExp 函数中返回任何内容。你是从哪里得到这个想法的?您可能需要查看函数:
constrOptim,它允许您指定线性不等式约束。 -
我尝试过使用 constrOptim,请查看我编辑的问题。有什么想法吗?谢谢
标签: r optimization constraints