产生有趣的组合优化问题


9

我正在教授一门有关元启发式的课程,并且需要为该术语项目生成有趣的经典组合问题实例。让我们专注于TSP。我们正在处理尺寸图200和更大。我当然尝试生成具有成本矩阵的图形,该矩阵的值取自随机U(0,1),并发现(如预期的那样)路径成本的直方图(通过采样大量随机路径得出)的正态分布非常窄(μ 100σ 在附近 4)。在我看来,这意味着问题很容易,因为大多数随机路径都将低于平均值,而最小成本路径非常接近随机路径。

因此,我尝试了以下方法: U(0,1)-矩阵,在图表上随机走很长一段距离,然后随机(Bernoulli与 p=0.5)将边缘的值加倍或减半。这往往会降低所有值,最终达到零,但是如果我采取正确的步骤数,则可以得到μ 周围 2σ 周围 1

我的问题是,首先,这是否是一个有趣问题的良好定义?理想情况下,我需要一个高度多模态的实例(对于最常见的邻域函数),并且在极小值附近只有很少的路径,因此大多数随机解都离最优值很远。第二个问题是,给出此描述后,如何生成具有此类特征的实例?


3
寻找OR中研究的TSP基准测试库(例如,在Applegate等人的网站上搜索TSP的作品,例如在此处)?
Neal Young

2
还有就是TSPLIB有许多实例。
adrianN 2013年

谢谢,我检查了链接,它对您有所帮助,但是我的问题不是生成实例,不是因为我想解决特定的实例,而是因为我寻求对构成最佳组合问题的见解,可以将其扩展到以后。除了TSP以外的其他问题。
亚历杭德罗·皮亚德


1
@Alejandro,隐藏的派系问题可能是您正在寻找的示例。此外,您可能会搜索关于哪些随机可满足性实例被认为很难进行的研究。
Neal Young

Answers:


6

生成较难实例的一种通用方法如下:

  • 从一个随机的问题实例开始。
  • 嵌入“隐藏后门”:随机选择一个好的解决方案(可能比现有的任何解决方案都要好得多)并修改问题实例以将其强制嵌入到问题实例中。

例如,对于TSP,您可以执行以下操作。通过随机选择生成随机问题实例U(0,1)成本矩阵。然后,调整问题实例以在其中隐藏一个更好的解决方案:随机选择一个巡回点,该巡回点恰好访问每个顶点一次,并减少该巡回点的边权重(例如,从U(0,c) 哪里 c<1; 减轻现有重量;或以一定的固定概率修改现有边缘)。此调整过程可确保最佳解决方案很有可能是您选择的特殊游览。如果幸运的话,并且选择了合理的嵌入方式,那么将其隐藏在特殊解决方案的位置也不容易。

这种方法是从密码学的一般思想派生而来的,我们要在其中创建陷阱门单向问题:如果不了解秘密陷阱门很难解决问题,但是有了秘密陷阱门的知识,问题就变得很容易。已经进行了许多尝试,将秘密活板门嵌入到各种困难的问题中(尽管即使在添加活板门之后仍能保持问题的强度),但成功的程度不一。但是对于您的目的,这种通用方法似乎可行。

由此产生的问题实例可能很难,但从任何实际角度来看,它们是否会很有趣?我不知道。甘拜下风。在我看来,它们看起来很虚假,但是我知道什么?

如果您的主要目标是选择与实际相关且可以代表TSP实际应用的问题实例,那么我的建议是采用完全不同的方法。取而代之的是,首先调查TSP的实际应用程序,然后查找那些问题的代表性实例,然后将它们转换为相应的TSP问题实例-因此,您正在处理源自真实问题的问题实例。


我非常喜欢这种方法,的确与我想尝试的方法非常接近,并且似乎可以适应不同的问题。我最初的动机是为学生提出测试问题,因此即使我遇到了真实的问题,但在这种相当人为的情况下(尝试给学生算法评分),我的服务还是不错的。无论如何,我都会尝试使其适应我的研究需求,但是正如您所说,这需要仔细研究,以确定所创建的实例是否足够具有代表性。非常感谢,您获得了我的+1和接受。
Alejandro Piad 2013年

3

一种通常可以使您对解决方案的性质进行高度控制的方法是将一个NP完整问题转换为另一个NP完整问题。现在,您可以以统计方式在问题中定义“有趣”,但是另一种巧妙的方法是使用该领域的经典问题。我最喜欢的是保理/ SAT。找到具有很多因子的“平滑”数或只有两个“因子”(一个和素数)的素数是很容易的。创建SAT实例以解决因式分解,而解决方案就是因素(实际上是因素的排列,但也不难提前计算)。

在这种方法下,自然有一个“有趣的”定义,即很难在P时间内解决的硬实例。并且保证该方法会产生用于分解非光滑数的硬实例,否则它将解决复杂性理论中最重要的开放问题,即分解的硬度

然后,可能会转换成您的问题,在这种情况下为TSP。要填写此答案,最好将SAT直接转换为TSP,认为它们在那里,但不熟悉它们。但是,以下是此问题中有关SAT分解的一些参考:将整数分解问题简化为NP完全问题

如果您不喜欢分解,则出于各种原因,最好还是先在SAT中创建实例。您可以从随机SAT实例开始,将其调整为在“难易”过渡点等处居中。或者您可以使用社区生成的DIMACS硬实例进行工作。或在SAT中创建其他逻辑“程序”。


1
我喜欢转换方法,尽管您没有提供与TSP特别相关的其他链接,但是无论如何,感谢您的想法,我将对其进行更深入的探讨。您得到了我的+1。
Alejandro Piad

1
@alejandro thx好的,这里是一个链接。参见例如从此处的幻灯片28开始[本科课程!],CMSC 451:SAT,着色,哈密顿循环,TSP幻灯片作者:卡尔·金斯福德。转换SAT→哈密顿循环(TSP)。如果需要的话,可能会有更有效的(较少的开销)转换方法或文献中其他定制的方面。希望进一步了解您的工作,如果愿意,可以在这里或在我的博客上回复
vzn

1
我检查了pdf,它的水平很高,但可以理解。尽管暂时我可以通过@DW答案获得所需的信息,但是您的方法对我来说似乎很有趣。我必须自己尝试。之前(在一个复杂的本科课程中)我见过这种减少,但是没有想到专门针对创建硬实例的实际实现。我对优化和元启发法有着长期的兴趣,而我的兴趣领域之一是创建有趣的基准问题。顺便说一句,刚刚检查了您的博客,肯定会回来的!
亚历杭德罗·皮亚德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.