我想知道有没有人能够建议一些包来解决一个非线性优化问题,可以提供整数变量的最优解?该问题是在一些下限和上限约束条件下最小化具有等式约束的函数。
我已经使用了R中的“nloptr”包来解决非线性优化问题,效果很好,但现在希望将该方法扩展为其中一些变量为整数。从我目前对nloptr的使用和理解来看,它只能返回连续的最优解,而不能返回整数变量的最优解。
我认为这种问题需要使用混合整数非线性规划来解决。
以下是一个适用于nloptr的问题示例:
在R中,这个nloptr代码会像这样:
这将输出以下内容:
这是我要找的结果,但如上所述,我需要x和p为整数。
我查看了https://cran.r-project.org/web/views/Optimization.html,其中列出了一些混合整数非线性规划的优秀软件包,但想知道是否有人使用过它们,并认为哪个最适合解决上述问题。
大约7年前在这里发表了一个类似的问题,但最终只得到了指向cran页面的链接,因此认为重新提问是值得的。
非常感谢您的意见。
谢谢,
安德鲁
我已经使用了R中的“nloptr”包来解决非线性优化问题,效果很好,但现在希望将该方法扩展为其中一些变量为整数。从我目前对nloptr的使用和理解来看,它只能返回连续的最优解,而不能返回整数变量的最优解。
我认为这种问题需要使用混合整数非线性规划来解决。
以下是一个适用于nloptr的问题示例:
min f(x) (x-y)^2/y + (p-q)^2/q
so that (x-y)^2/y + (p-q)^2/q = 10.2
where
x and p are positive integers not equal to 0
and
y and q may or may not be positive integers not equal to 0
在R中,这个nloptr代码会像这样:
library('nloptr')
x1 <- c(50,25,20,15)
fn <- function(x) {
(((x[1] - x[2])^2)/x[2]) + (((x[3] - x[4])^2)/x[4])
}
heq <- function(x) {
fn(x)-10.2
}
lower_limit <- c(0,0,0,0)
upper_limit <- c(67.314, 78, 76.11, 86)
slsqp(x1, fn, lower = lower_limit, upper = upper_limit, hin = NULL, heq = heq, control = list(xtol_rel = 1e-8, check_derivatives = FALSE))
这将输出以下内容:
$par
[1] 46.74823 29.72770 18.93794 16.22137
$value
[1] 10.2
$iter
[1] 6
$convergence
[1] 4
$message
[1] "NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs (above) was reached."
这是我要找的结果,但如上所述,我需要x和p为整数。
我查看了https://cran.r-project.org/web/views/Optimization.html,其中列出了一些混合整数非线性规划的优秀软件包,但想知道是否有人使用过它们,并认为哪个最适合解决上述问题。
大约7年前在这里发表了一个类似的问题,但最终只得到了指向cran页面的链接,因此认为重新提问是值得的。
非常感谢您的意见。
谢谢,
安德鲁