gpt4 book ai didi

r - R 中的优化

转载 作者:行者123 更新时间:2023-12-02 09:36:48 25 4
gpt4 key购买 nike

我有以下优化问题:

enter image description here

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

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

R 中是否有任何包/函数可以让我实现这个问题?任何帮助将不胜感激!谢谢。

最佳答案

我赞同 @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))

希望有帮助。

更新:抱歉,您将“Ay”与“For All y”混淆了。尝试这样的事情:

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

您可能需要尝试不同的方法和 y 的界限才能使其正常运行。

这里的总体思想是强制约束(损失函数中的“if”条件),如果它们被破坏,则返回大值。

更新2:如果函数返回错误值“9e9”,它会说它收敛了,因为它满足损失函数。例如。所有其他可行的解决方案都会给出高于 9e9 的值。这意味着您所拥有的方法/约束没有解决方案。

关于r - R 中的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com