在R上使用constroptim对变量进行equals约束

在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

问题很简单

我正在使用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、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)。即使这样也不行。我怎么知道可行区域?这个答案这次能满足你的问题吗?