使用两个参数(一个连续和一个整数值)优化函数

时间:2019-07-02 17:31:32

标签: r

使用语言R,我正在尝试优化两参数函数f(x,y),以使x,y均为非负且y为整数。但是,我没有一个简单的答案会写在纸上。

定义

f = function(param){
  x=param[1] ; y=round(param[2])
  temp = (x-1.3)^2+(y-1.7)^2
  return(temp)
}

很明显,答案是x = 1.3和y = 2,但是给定设置,(1.5,2.49)中的y值都可以作为round(y)= 2接受。这是我从constrOptim函数得到的:

constrOptim(c(1,4),f,ui=rbind(c(1,0),c(0,1)),ci=c(0,0) , method="Nelder-Mead")

$par
[1] 1.299810 4.016033

$value
[1] 5.29

$counts
function gradient 
      43       NA 

$convergence
[1] 0

$message
NULL

$outer.iterations
[1] 2

$barrier.value
[1] -6.084598e-05

1 个答案:

答案 0 :(得分:1)

我认为这是因为y的起点是4。如果将其设置为2,它将为您带来期望。我认为问题在于您的目标函数在某些区域内完全平坦并且不连续,因此并不总是有一个有意义的梯度可以遵循全局最小值。对于x = 0.1,您的函数如下所示:enter image description here

因此优化过程将很难为您提供正确的结果。一种选择是用更平滑的版本替换round()函数。