我想知道R处理非线性整数优化是否存在一个包。
“基本上”,我想解决以下问题:
max f(x) s.t x in (0,10) and x is integer
。
我知道有些分支算法能够处理这个问题的线性版本,但是我的函数f()
可能会更复杂。 (我甚至无法确保它是f(x)=xQx
形式的二次方。)
我想总有蛮力解决方案来测试所有可能性,只要它们有限,但我想知道是否有更聪明的东西。
答案 0 :(得分:8)
我有几个选择,但它们都不是银弹,虽然看起来你的银弹正在rino
项目下工作:http://r-forge.r-project.org/projects/rino/。
由于您的功能很复杂,您可能希望使用遗传算法(即,基于梯度的优化器可能不可靠)。 genoud
库中的rgenoud
可以解决问题(link text)。如果设置data.type.int=TRUE
,它应该可以解决问题。我没有使用过这个库,但是在matlab中有一些GA的经验,而且收敛时间对设置很敏感,所以你可以通过几次阅读手册页来获得很好的服务。
或者,如果您的函数严格凹陷(不太可能,因为您说它可能很复杂)您可以使用渐变求解器求解(例如,optim
)然后检查最佳周围的邻域(不可能)超过2 ^ n点检查)。
抱歉,我无法提供更多帮助。
答案 1 :(得分:4)
如果它几乎不是非线性的,那么没有比暴力更好的方法(你永远不会知道最小值是局部的还是一些看起来平坦的碎片没有任何狭窄和深谷),当然除了符号计算(这可能不会起作用,因为功能太复杂了)或软计算,我的意思是像遗传算法,蒙特卡罗,群等等(这里你没有保证它会找到全局最小值和因为你有整数x它可能比蛮力慢。
答案 2 :(得分:3)
http://cran.r-project.org/web/views/Optimization.html列出了可能合适的软件包Rdonlp2
和Rsolnp
。
答案 3 :(得分:2)
离散填充函数方法是最近的方法之一,可以找到具有约100个约束和变量的非线性整数规划的全局解。