我正在寻找关于搜索算法参数的自适应参数控制的想法/经验/参考/关键字(在线学习 >)在组合优化中。
更详细一点:
我有一个框架,负责优化硬组合优化问题。这是在一些“小启发式”的帮助下完成的,这些“小启发式”以迭代的方式使用(大邻域搜索;破坏和重新创建方法)。这些“小启发式”的每个算法都采用了一些外部参数,这些参数在某种程度上控制了启发式逻辑(此刻:只是随机值;某种噪声;使搜索多样化)。
现在我希望有一个控制框架,用于以尽可能通用的收敛改进方式选择这些参数,以便以后可以在不改变参数控制的情况下添加新的启发式。
至少要做出两个一般性决定:
唯一的反馈是新发现解决方案的评估功能。这让我想到了强化学习的主题。这是正确的方向吗?
不是真正像学习一样的行为,但目前简单化的想法是:
注意事项: - 一个特定算法的良好收敛所需的参数可以显着改变 - >也许更多样化 - 开始时需要的操作,最后需要更多的强化操作。 - 在特定的破坏/重建算法对中有可能产生良好的协同效应(有时称为:耦合邻域)。怎么会认出那样的东西?那仍然在强化学习领域吗? - 不同的算法由不同数量的参数控制(一些参数为1,一些参数为3)。
任何想法,经验,参考文献(论文),关键词(ml-topics)?
如果有关于(b)以离线学习方式决定的想法。不要犹豫,提及。
感谢您的所有意见。
的Sascha
答案 0 :(得分:1)
您有一组参数变量可用于控制算法集。选择算法只是另一个变量。
您可能想要考虑的一种方法是使用遗传算法进化“参数空间”。简而言之,GA使用自然选择过程的类比来连续培育出更好的解决方案。
您需要开发一种编码方案,将您的参数空间表示为字符串,然后创建大量候选解决方案作为您的起始生成。遗传算法本身采用您的集合中最适合的解决方案,然后将各种遗传算子应用于它们(突变,繁殖等),以培育出更好的集合,然后成为下一代。
这个过程中最困难的部分是开发适当的适应度函数:定量测量给定参数空间的质量。您的搜索问题可能过于复杂,无法衡量人口中的每个候选人,因此您需要一个代理模型功能,这可能与理想的解决方案本身一样难以开发。
如果不了解你所写的内容,很难看出这种方法是否可行。 GA通常非常适合这样的多变量优化问题,但它不是灵丹妙药。从维基百科开始参考。
答案 1 :(得分:1)
这听起来像你想要做的 hyper heuristics 。尝试寻找该关键字。
在Drools Planner(开源,java)中,我支持禁忌搜索和模拟退火。 我还没有实现破坏和重建方法(但是),但这应该很容易,尽管我并不期望更好的结果。挑战:证明我错了,把它分叉并添加它并在示例中击败我。 超启发式在我的TODO列表中。