在R上使用constroptim对变量进行equals约束
问题很简单 我正在使用constrOptim函数,其中约束/参数a、b、c满足条件a+b+c=1和a>0、b>0、c>0 我能举个例子吗 到目前为止,我可以编写如下代码:在R上使用constroptim对变量进行equals约束,r,optimization,R,Optimization,问题很简单 我正在使用constrOptim函数,其中约束/参数a、b、c满足条件a+b+c=1和a>0、b>0、c>0 我能举个例子吗 到目前为止,我可以编写如下代码: optim(c(0.1,0.1,0.1,0.1,0.1,0.1), optimize_ranks,data=data, lower=c(0.2,0.2,0.2,0.1,0.1,0.2), method="L-BFGS-B", upper=c(1,1,1,1,1,1)) 我想要的是,这6个参数x1、x2
optim(c(0.1,0.1,0.1,0.1,0.1,0.1),
optimize_ranks,data=data,
lower=c(0.2,0.2,0.2,0.1,0.1,0.2),
method="L-BFGS-B",
upper=c(1,1,1,1,1,1))
我想要的是,这6个参数x1、x2、x3、x4、x5、x6加起来必须是1。如果需要在
constrOptim>中的6个参数a
,b
,c
,d
,e
,f
上设置这些约束(总和等于1):
ui = rbind(
c(1,1,1,1,1,1),
c(-1,-1,-1,-1,-1,-1)
)
ci = c(0.999, -1.001)
func = function(x) x[1]-x[2]*x[1]+x[3]**3-x[4]*x[5]
init = c(1,0,0,0,0,0)
#> constrOptim(init, func, grad=NULL, ui=ui, ci=ci)
#$par
#[1] -5744.485 4392.275 -27681.276 14950.497 5945.962 8138.027
#$value
#[1] -2.121093e+13
考虑6个参数的向量x
,这样ui*x>ci
(不等式是严格的,解释了ci
中0.001
的误差范围)。这正是在constrOptim
文档中描述它的方式。因此,如果我有a,b,c,d,e,f和a+b+c+d+e+f=1,我设置ui=rbind(c(1,1,1),c(-1,-1,-1),c(1,0,0),c(0,0,1),c(0,0,1))和ci=c(1,-1,0.00001,0.00001)?关于ci,我得到了ui部分的想法嘿,你能建议这6个变量的初始值吗?当我从c(1,0,0,0,0,0)开始时,它表示“初始值不在可行区域的内部”。参数对于上述调用失败。c(0.1,0.1,0.1,0.1,0.5)。即使这样也不行。我怎么知道可行区域?这个答案这次能满足你的问题吗?