[英]Optimizing a function in R with more than one solution
我正在嘗試使用應該具有唯一解決方案的兩個參數來優化(最小化)函數。
foo <- function(x) {
x1 <- x[1]
x2 <- x[2]
t=5-sqrt((0-x1)^2+(0-x2)^2);
u=4-sqrt((0-x1)^2+(4-x2)^2);
v=3-sqrt((3-x1)^2+(0-x2)^2);
return(sum(t,u,v))
}
optim(c(0,0), foo)
那些喜歡中學數學的人可能會認識到笛卡爾(x,y)坐標平面上兩點之間的距離公式。 編寫函數foo的目的是使x1為x坐標,x2為我要查找的點的y坐標。 在這種情況下,該點是(3,4)。 但是,我得到了一個奇怪的輸出:
optim(c(0,0), foo)
$par
[1] -3.938866e+54 1.293779e+54
$value
[1] -1.243772e+55
$counts
function gradient
501 NA
$convergence
[1] 1
$message
NULL
知道發生了什么事嗎?
照原樣,您的函數沒有最小值,因為t,u和v隨着x1和x2遠離三個固定點(0,0),(0,4)和(3,0)而減小。
似乎您想找到一個點(x1,x2),以最小化到這三個點的距離。 如果是這樣,則應將f定義為:
foo <- function(x) {
x1 <- x[1]
x2 <- x[2]
t = 5 + sqrt((0-x1)^2+(0-x2)^2);
u = 4 + sqrt((0-x1)^2+(4-x2)^2);
v = 3 + sqrt((3-x1)^2+(0-x2)^2);
return(sum(t,u,v))
}
請注意,唯一的更改是-sqrt
到+sqrt
。
答案不是您期望的點(3,4),最小值是三角形內以這三個點為頂點的點。
解:
> z
$par
[1] 0.7510095 0.6954136
$value
[1] 18.76643
$counts
function gradient
59 NA
$convergence
[1] 0
$message
NULL
主要問題是3和4被翻轉了。 另一個是您的差異已簽名。 但是例程也可以收斂到局部分鍾,這不是絕對分鍾。 代替:
foo <- function(x) {
t=5-sqrt((0-x[1])^2+(0-x[2])^2);
u=3-sqrt((0-x[1])^2+(4-x[2])^2);
v=4-sqrt((3-x[1])^2+(0-x[2])^2);
return(sum(abs(t),abs(u),abs(v)))
}
optim(c(4,0), foo)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.