我们希望通过根据喜欢,不喜欢等从一大组(大约10K)中选择一些(大约10个)一天来为游客规划活动。我认为它属于" { {3}}"一类问题。
(1)用OptaPlanner解决这个问题是否可行? (2)我们应该怎么做? (3)您能参考相关文件吗?
答案 0 :(得分:1)
使用OptaPlanner绝对可以解决这个问题,但在我看来,这并不是最佳选择:OptaPlanner尝试使用各种启发式方法来解决NP难题 - 基本上,它以一种方式清除搜索空间或者其他。它实际上找到绝对全局最大值(或最小值)是不太可能的 - 尽管它可能会非常接近。
据我所知,这个问题不是NP难的,因此可以在O(n^k)
恒定的多项式时间k
内解决。
还有伪多项式算法,这也可能是这种情况 - 复杂性取决于权重和输入大小。例如O(w*n^k)
其中w
是最大权重。
在这种情况下,您可能最好使用动态编程解决方案,如Wiki文章you linked to中所述。另外,不要忘记在权重中引入某种随机化,或者你总是会确定性地选择给定日期和特定游客群体的同一组“最佳”活动。
一些数学总结:
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
中使用此大小的数据(使用相同的估算值)。