微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

复杂调度的启发式

如何解决复杂调度的启发式

最近我一直在玩的一个副项目是尝试 调度问题的广义算法。我觉得这很有趣,因为我相信它可以在根本上更复杂的环境中有效地寻路。

到目前为止,我已经实现了 depth-first-search解决这个问题。

唯一的问题是... O'notation 太可怕了 (my question in math exchange about it)(a desmos illustration):

enter image description here

t_{m,n}O(m,n) 同义)

其中 n 是任务数量(例如旅程),m 是代理数量(例如出租车)。


我在添加基本启发式方面做了一些工作,该启发式大大限制了探索的路径数量

有 8 个任务和 5 个代理,通过阻止探索某些路径,在这些路径中,第一条边的移动时间超过给定时间,我可以限制任务产生这样的结果:

Hello,world!
time:   03:874
edges:
        max:     19,237,093,440
        actual:       7,838,526
        inline: 7838526        
        %:      0.040747       
min_time: 1954.00

给定 8 个任务和 5 个代理,图中有 192.3 亿条可能的边,限制导致我们只能探索/构建其中的 783 万条。

虽然只需要探索 0.04% 的可能性似乎不错,但 O'notation 太糟糕了,这还不够好。


正如在 desmos 插图中所见,即使只有少量的代理和任务,我们的 O'notation 也能击败所有其他人,除了 O(n!)O(2^n)(蓝色 = 阶乘,红色 = 指数,大多数显着的黑色虚线代表 n=6m=x):

enter image description here

当我们增加 nm 时,这种情况会呈指数级恶化,因此我们需要一个大规模限制性的启发式方法,能够将 O'notation 压缩到至少 O(n^2) 以实现任何实用性。目前需要手动调整规模,限制不够。


此处的启发式方法是在以下情况下不探索路径:

d > 2.5 * SIZE / NUM_OF_AGENTS

地点:

  • d 是特定代理开始特定任务所需的时间/距离(例如出租车移动到上车地点进行旅程或将内存传递给 GPU 的时间)
  • SIZE 是最大时间/距离 d 的一半。
  • NUM_OF_AGENTS 代码中代理数量的常量 (m)。

因此,我的最终问题是,对于这个问题,什么是更好的启发式方法? (如果你知道它们,甚至是完整的方法


  • The code
  • 对于任何复杂/有趣的问题,我永远不确定最好在哪里问他们,这是我所知道的最好的问题,如果您发现任何问题,请发表评论,我会尽力解决
  • 值得一提的是,这里遗漏了一个概念,即如何将此类调度视为通过多维空间进行寻路,然后可能更容易应用传统算法,我还没有真正尝试或弄清楚如何做到这一点。如果您这样做,我将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。