2017-06-29 109 views
-2

我目前正在研究调度pub-crawling的算法(虽然它可以更通用)。 这就是所谓:今天的算法挑战

  • 有一定数量的团队和酒吧,团队 从未超过酒吧
  • 队必须访问所有的酒吧
  • 队不能量的量在同一个酒吧
  • 整个过程是暂时的;团队在Pub-crawl的开始和结束时间之间的相同离散时间间隔内位于酒吧中。

我在想旅行商问题和一些名册计划之间的混合,但现在我试图用蛮力来实现它,因为我无法计算如何实现提到的混合。我希望得到的结果看起来是这样:

Expected result

蛮力的工作,但它只是太慢了。当所有的行和列都是唯一的时候,就可以找到解决方案 - 就像Sudoku一样。然后可以将这些数字映射到特定酒吧的时间间隔/到达和离开时间。 我正在寻找想法和建议,但实施也非常受欢迎(C#)。

目前我暴力破解这样做:

  • 初始化与尽可能多的行作为一个团队和列条二维数组。这些值也被初始化为1列。
  • 检查数组是否是解决方案,如果不是:将数组随机播放并再次检查。

最后,我需要提到的是,当这可以做得足够快时,会引入更多层的复杂性。为特定团队选择的路线必须是最佳的,这意味着所有团队都必须针对旅行时间采取最优化的路线 - 为此,我将使用Google Maps API。我猜如果这个算法的第一部分是相对较快的距离优化可以是强制性的。

期待创意解决方案!

+0

对于我来说恐怕太宽了。 – DavidG

+0

“随机排列数组并再次检查”=>随机性无助于迭代检查所有可能的组合。它引入了重复检查同一阵列的可能性;并且不管是以逻辑顺序对它们进行迭代还是对其进行随机迭代,都没有增加找到正确数组的机会。所以使用RNG会增加一个缺点,而不会增加好处。如果我是你,我不会那样做。 – Flater

+1

你为什么不简单地在每个时间步上将职业转移一次?就像在你的桌子上一样?我没有看到任何会禁止的限制。也就是说,如果我忽略了某些事情,一种解决方案虽然可能不是最好的解决方案,但是将其转化为线性优化问题(应该是可能的),然后使用一些已有的解决方案。编辑:也就是说,线性*整数*的问题当然 – Aziuth

回答

0

好像你应该先解决最佳路线问题。如果你这样做,那么你可以在解决方案的第一个酒吧,第二个酒吧的第二个团队等开始第一个团队,就像你在你的例子中做的那样。

因此,如果您确定通过酒吧的最佳(或几乎最佳)路径是B4,B3,B1,B2,B6,B5,那么您只需重新排列表头中酒吧的顺序以匹配。所以在第一段时间内,团队1会访问第4栏等。