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))