解决"加权活动选择" OptaPlanner的问题

时间:2015-09-03 07:39:55

标签: optimization selection scheduling optaplanner planning

我们希望通过根据喜欢,不喜欢等从一大组(大约10K)中选择一些(大约10个)一天来为游客规划活动。我认为它属于" { {3}}"一类问题。

(1)用OptaPlanner解决这个问题是否可行? (2)我们应该怎么做? (3)您能参考相关文件吗?

1 个答案:

答案 0 :(得分:1)

使用OptaPlanner绝对可以解决这个问题,但在我看来,这并不是最佳选择:OptaPlanner尝试使用各种启发式方法来解决NP难题 - 基本上,它以一种方式清除搜索空间或者其他。它实际上找到绝对全局最大值(或最小值)是不太可能的 - 尽管它可能会非常接近。

据我所知,这个问题不是NP难的,因此可以在O(n^k)恒定的多项式时间k内解决。

还有伪多项式算法,这也可能是这种情况 - 复杂性取决于权重和输入大小。例如O(w*n^k)其中w是最大权重。

在这种情况下,您可能最好使用动态编程解决方案,如Wiki文章you linked to中所述。另外,不要忘记在权重中引入某种随机化,或者你总是会确定性地选择给定日期和特定游客群体的同一组“最佳”活动。

一些数学总结:

  • 10K活动根本不大。每项活动所需的一切是:开始时间,结束时间和体重。
    • 如果所有这些都是32位整数并且你创建了一个Java对象,那么所需的内存是(大约)3*4B + 8B (object overhead) = 20B/object,总共200 000B,即~195kB
  • 如果您实施了建议的O(n^3)动态编程算法,则10K活动的运行时间将 10 000^3 / 10^9 (1GHz processor) = 1000 seconds ~ 17 minutes。这是一个非常粗略的估计。此外,O(n log n)算法会在132 ns中使用此大小的数据(使用相同的估算值)。