使用多个解决方案优化R中的功能

时间:2016-09-11 23:39:51

标签: r optimization

我正在尝试使用两个应该具有唯一解决方案的参数来优化(最小化)函数。

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

知道出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

原样,你的函数没有最小值,因为t,u和v随着x1和x2越来越远离三个固定点(0,0),(0,4)和(3,0)而减小。 / p>

似乎你想要找到一个点(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

红点是解决方案: Solution

答案 1 :(得分:1)

主要问题是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)