【问题标题】:Set constraints in a Matrix - OPTIM in R在矩阵中设置约束 - R 中的优化
【发布时间】:2016-06-20 16:25:00
【问题描述】:

我有一个整数向量作为输入值(优化标准的起始值)

my.data.var <- c(10,0.25,0.25,0.25,0.25,0.25,
             10,0.25,0.25,0.25,0.25,0.25,
             10,0.25,0.25,0.25,0.25,0.25,
             10,0.25,0.25,0.25,0.25,0.25)
  • 优化问题是一个分钟。问题。

  • 误差函数计算 diff 的平方根和 两个矩阵(给定值矩阵与计算矩阵)

  • 计算出的矩阵是使用上述整数向量的矩阵。
    因此,在误差函数中,我将整数向量堆叠成 矩阵为my.data.var.mat &lt;- matrix(my.data.var,nrow = 4,ncol = 6,byrow = TRUE)

我必须引入的约束是colSum(my.data.var.mat) &lt;=1

优化定义为

sols<-optim(my.data.var,Error.func,method="L-BFGS-B",upper=c(Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1),
  lower=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))

误差函数定义为

Error.func <- function(my.data.var){


my.data.var.mat <- matrix(my.data.var,nrow = ncol(my.data.matrix.prod),ncol = ncol(my.data.matrix.inj)+1,byrow = TRUE)

  Calc.Qjk.Value <- Qjk.Cal.func(my.data.timet0,my.data.qo,my.data.matrix.time,
                                 my.data.matrix.inj, my.data.matrix.prod,my.data.var,my.data.var.mat)

  diff.values <- my.data.matrix.prod-Calc.Qjk.Value    #FIND DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL MATRIX

  Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = 1))/nrow(my.data.matrix.inj))^0.5    #sum of square root of the diff

  Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod)   # total avg error

  Error_total
}

给定数据集:my.data.matrix.prod , my.data.timet0, my.data.qo, my.data.matrix.time, my.data.matrix.inj

所以,我的问题是我应该如何以及在哪里引入矩阵列和约束?或者换一种说法,OPTIM 如何在矩阵列和约束下改变整数向量?

【问题讨论】:

  • @ZheyuanLi:谢谢。希望我能得到一些建议!
  • @ZheyuanLi:用“nloptr”试试我的运气。让我们看看!
  • @ZheyuanLi:解决了。我没有使用 Optim,而是使用了 nloptr 求解器。它允许不等式约束。看看这里..stackoverflow.com/questions/37951719/…

标签: r matrix nonlinear-optimization


【解决方案1】:

我意识到nloptr 是比optim 更好的选择,因为我的问题包括“不等式约束”。

我修改了实现,正如我在这篇文章中解释的那样。 "multiple inequality constraints" - Minimization with R nloptr package

因此,关闭此线程。

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2016-03-12
    相关资源
    最近更新 更多