R中的优化

R中的优化,r,mathematical-optimization,R,Mathematical Optimization,我有以下优化问题: 我们正在最小化关于y。A是已知矩阵,b是已知向量,c是已知常数 这里有两件重要的事情:当我们试图最小化函数时,它不能小于0。此外,使用不需要初始值的R方法也很理想,因为要获得可行的起始值y,非常复杂 R中是否有允许我实现此问题的包/函数? 任何帮助都将不胜感激!谢谢。使用optim: 此函数允许您使用几种不同的方法优化具有约束的函数 查看示例,了解如何更好地将您的问题纳入optimI second@Stu的“optim”建议。下面是一个在您的案例中使用它的快速示例: se

我有以下优化问题:

我们正在最小化关于
y
。A是已知矩阵,
b
是已知向量,
c
是已知常数

这里有两件重要的事情:当我们试图最小化函数时,它不能小于0。此外,使用不需要初始值的R方法也很理想,因为要获得可行的起始值
y
,非常复杂

R中是否有允许我实现此问题的包/函数? 任何帮助都将不胜感激!谢谢。

使用
optim

此函数允许您使用几种不同的方法优化具有约束的函数


查看示例,了解如何更好地将您的问题纳入
optim

I second@Stu的“optim”建议。下面是一个在您的案例中使用它的快速示例:

set.seed(1001)
c = 1
m = 10
b = runif(m)

loss_fun = function(y_i){
  if (all(y_i>=0)){  # <- Here is where we enforce all y's >=0
    return(c - sum(b*log(y_i)))
  }else{
    return(9e9)      # If any y's are negative, return a very large number
  }
}

y_initial = runif(m)

print(optim(y_initial, loss_fun))
set.seed(1001)
c=1
m=10
b=运行时(m)
失去乐趣=功能(y_i){
如果(全部(y#i>=0)){0)){
return_val=(c-sum(b*log(y_i)))
}否则{
返回值=9e9
}

if((c-sum(b*log(y_i)))感谢您的建议。
optim
的唯一问题是应该提供“可行”的起始值。在这种情况下,很难找到可行的起始值(即使与解决优化问题一样复杂)@Mariam针对该问题表示,您将以y=0作为可行的解决方案。您的实际约束是否与问题中的约束形式不同?无法提供可行的初始起始值是一个重要的约束,因此您应该将其添加到您的问题中。不幸的是,在这种情况下,
y
必须是grea由于涉及到
log
,所以大于零。我已经用更多的信息更新了我的帖子。我忘了提到,当我们试图最小化目标函数时,它不能小于零…还有什么可以控制的吗?我将更新我的帖子。我还需要施加约束
Ay>=0
正收缩int不是在
y
上,而是在
Ay
上,其中A是一个已知矩阵,
=0
表示
A
y
的乘积的每个元素都必须是正的。哈,对不起,把Ay混淆为“所有y”。没问题:)感谢您调整解决方案。那么,如果返回的$value为
9e9
,是否意味着没有可行的解决方案?
set.seed(1001)
c = 1
m = 10
b = runif(m)
A = matrix(runif(m*m), nrow=m)

loss_fun = function(y_i){
  if (all(A%*%y_i>0)){
    return_val = (c - sum(b*log(y_i)))
  }else{
    return_val = 9e9
  }
  if ((c - sum(b*log(y_i)))<0.000001){
    return_val = 9e9
  }
  else{
    return_val = (c - sum(b*log(y_i)))
  }
  return(return_val)
}

y_initial = runif(m)

print(optim(y_initial, loss_fun, method = "L-BFGS-B", lower = 0))