簡體   English   中英

使用多個解決方案優化R中的功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM