如何使用R中的constrOptim将解决方案约束到关节参数空间?

时间:2013-10-18 17:56:22

标签: r constraints mathematical-optimization

这是一些假数据和代码,用于最小化受参数方式必须位于每个参数范围范围内的约束的函数。但是,我如何指定约束以确保解决方案位于观察到的联合参数空间的范围内?在下面的示例中,交叉点在解决方案中绘制,显然在联合参数空间之外。

x =(rnorm(1000))
y = (rnorm(1000))
z = sqrt(exp(x)+exp(y))
plot(x,y,pch=19,col=z)
theta = c(.5,.5)
ui = rbind(
        c(1,0)
    ,   c(-1,0)
    ,   c(0,1)
    ,   c(0,-1)
    )
ci = c(
        min(x)
    ,   -max(x)
    ,   min(y)
    ,   -max(y)
    )
f = function(theta){
    x = theta[1]; y=theta[2]
    sqrt(exp(x)+exp(y))
    }
f(theta)
o = constrOptim(theta,f,control=list(fnscale=1),ci = ci,ui=ui,grad=NULL)
plot(x,y,pch=19,col=z)
points(o$par[1],o$par[2],cex=5,pch=3)

joint parameter space

1 个答案:

答案 0 :(得分:0)

目前尚不清楚“联合参数空间”是什么意思。

如果你的意思是“情节中的点”,那就是一组有限的点: 你有一个离散的优化问题。 您可以在所有点评估f,并使用which.min取最小值。

d <- cbind(x,y)[ z >= 1, ]
i <- which.min( apply(d, 1, f) )
points( d[i,,drop=FALSE], pch=3, cex=3 )

但是如果你想用你的点来定义飞机的连接区域, 没有独特的方法可以做到这一点。 凸壳是最明显的选择,但你的情节暗示了一个非凸面区域 - 和 constrOptim无法处理非凸约束。