【问题标题】:Non Linear Integer Programming非线性整数规划
【发布时间】:2010-07-13 07:21:11
【问题描述】:

我想知道R中是否有处理非线性整数优化的包。

“基本上”,我想解决以下问题:

max f(x) s.t x in (0,10) and x is integer.

我知道一些分支算法能够处理这个问题的线性版本,但这里我的函数f() 可能更复杂。 (我什至不能确定它是f(x)=xQx 形式的二次方)。

我想总是有蛮力解决方案来测试所有可能性,只要它们是有界的,但我想知道是否没有更聪明的方法。

【问题讨论】:

  • 请注意,“下午”是主观的 - 例如。当我读到这里时,现在是上午 10 点 :-) 这可能是 SO 约定在帖子中省略问候等的原因之一。
  • @Péter Török:注意到了。谢谢。抱歉,我不知道这个约定。
  • @JSmaga:在这种情况下x只有9个可能的值,那么暴力破解有什么问题?
  • @Richie:这是一个例子......我可能想优化几个整数,范围更大。
  • 我认为这种情况下的问题是,要获得一个可以处理整数约束的良好、稳定的开源非线性求解器还有很长的路要走。写这样的野兽需要很多时间和技巧,通常需要很多钱。 coin-or 项目可能会有所帮助 - 但他们的大部分东西仍在大力开发中。

标签: r mathematical-optimization nonlinear-optimization


【解决方案1】:

我有几个选择给你,但没有一个是灵丹妙药,虽然看起来你的灵丹妙药正在 rino 项目下的作品中:http://r-forge.r-project.org/projects/rino/

由于您的函数很复杂,您可能希望使用遗传算法(即,基于梯度的优化器可能不可靠)。 genoud 库中的 genoud 可以解决问题 (link text)。如果您设置data.type.int=TRUE 它应该可以解决问题。我没有使用过这个库,但对 matlab 中的 GA 有一些经验,并且收敛时间对设置很敏感,所以你会很好地阅读手册页几次。

或者,如果你的函数是严格凹的(不太可能,因为你说它可能很复杂)你可以用梯度求解器(例如,optim)求解,然后检查最优值附近的邻域(不能超过2^n 点检查)。

对不起,我帮不上忙。

【讨论】:

  • 我想这最终是正确的解决方案。或者使用一些 SLA 来尝试获得可能的最佳解决方案。否则,就是蛮力。感谢您的链接。出色的功能。
  • 刚刚在您的个人资料中查看了您的背景。没想到你能帮到我!
【解决方案2】:

如果它几乎不是非线性的,那么没有比蛮力更好的方法(您永远不会知道最小值是否是局部的,或者某些看起来平坦的片段是否没有任何狭窄和深谷),当然除了符号计算(这可能不起作用,因为函数太复杂了)或软计算,我的意思是遗传算法、蒙特卡洛、群等(在这里你不能保证它会找到非常全局的最小值和因为你有整数 x 它可能比蛮力慢)。

【讨论】:

  • 哦,有比蛮力或符号计算更好的方法。这里只是一个例子:projects.coin-or.org/Couenne
  • @Gilead 记住这是一维的;对于这种情况和非常非线性的函数,它不会比 bf 快。 确定没有最小隐藏的唯一方法是查看每个值。
  • 是的,在上述情况下,枚举是最简单的。但是 OP 说上面是一个玩具示例,他有兴趣在更大范围内优化多个整数。一般来说,蛮力不是最好的方法。您可以使用确定性全局求解器(将搜索空间划分为被低估的凸区域,并执行 B&B 以消除非最优区域)来严格找到经过验证的全局最优值。现在,它并不快,但平均而言,它比穷举枚举要快。理论见这里:www.lehigh.edu/~pib208/papers/belotti-etal-couenne.pdf
  • @Gilead 我错过了那条评论;在大多数实际情况下,您可能是对的,但仍然存在每个函数的类别,它要么不起作用(假设),要么不比 bf 更好。平均而言,总是有一个问题;-)
  • 是的,当我说平均时,它更多的是基于经验而不是数学事实的陈述。整数问题是 NP 难题,因此总有可能遇到需要完整枚举 (bf) 的情况。但是您会看到,通过进行分支定界,在不进行完全枚举的情况下获得解决方案的概率是非零的(实际上,通常非常高)。如果一个人从 bf 开始,那么做得更好的机会绝对为零。如果 B&B >= Brute force... 所以我总是会选择 B&B。反正我就是这么想的。 ;-)
【解决方案3】:

http://cran.r-project.org/web/views/Optimization.html 列出了可能合适的包Rdonlp2Rsolnp

【讨论】:

  • 第一个不处理整数约束。第二个看起来确实不错,但也没有处理当前状态下的整数约束
【解决方案4】:

离散填充函数法是最近可以找到具有约100个约束和变量的非线性整数规划的全局解的方法之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多