【问题标题】:Algorithm to look for optima in huge discrete universe在巨大的离散宇宙中寻找最优的算法
【发布时间】:2016-12-03 16:24:54
【问题描述】:

我目前正在寻找一种算法,该算法将返回给定大小和宇宙(通常在 50 个中的 10-15 个之间,因此大约数百万十亿种可能性...)和一个评分函数,它给出了过去每种组合的性能(优化的函数需要 2 毫秒到 1 秒的时间来运行,具体取决于我选择的复杂性)。 如果我必须测试所有可能的组合(我什至不能将所有组合可能性存储在列表列表中......并且必须使用生成器为每个评估如果我不想用完内存)。 不幸的是,对于某些函数,我不能使用基于迭代的所谓“遗传”算法(从 2 中最好的、3 中最好的、.. n 篮子等等......添加新项目时的篮子)。 这种类型的算法非常快,并且在大多数情况下都能给出很好的结果。

我已经尝试过模拟退火(scipy.basinhopping 版本或我编写的自定义版本),但是如果我在 25-30 中超过 15 次,则每次迭代都会花费太多时间,因为我无法在开始时存储所有组合算法并且必须为每个评估使用生成器。此外,有时我对给定的最优值并不满意。

如果您有想法、建议或提示,我会接受一切。如果你想看看我的模拟退火函数,不要犹豫,问我。

非常感谢!

【问题讨论】:

  • 模拟退火应用于比这更大的问题,我自己每天都使用一个变体。您当前使用的代码库有多大?发布是否合理,或者是否在您可以链接到的某个仓库中?

标签: python algorithm optimization combinations mathematical-optimization


【解决方案1】:

我知道您的问题没有单一的最佳解决方案,但这里有一些建议:

  • 分支和绑定(如果你能设计好的绑定函数)
  • 模拟退火(尝试不同的冷却速率和邻域大小)
  • 蚁丘群落(通常效率低于 SA)
  • 大都市(通常效率低于 SA)
  • 禁忌搜索(没有带来很大的改进,但即使对于困难的问题也很好)
  • 线性规划(如果问题可以用这些术语表述)

在一个非常困难的问题上结合多种技术也很常见。 还有一个 python 库实现了许多这些方法(以及许多其他方法),or-tools。不幸的是,它没有很好的记录

我认为模拟退火不需要一整套组合,因为它是一种局部搜索技术。在典型场景中,您生成一个新状态(例如,通过向随机参数添加随机增量,或在问题空间中选择半径内的随机点),然后使用概率公式决定是否接受此更改. IE。它的优点之一就是内存占用非常小

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2019-04-09
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多