【发布时间】:2023-03-25 19:55:01
【问题描述】:
问题描述
- 有不同的
categories,其中包含任意数量的elements。 - 共有三个不同的
attributesA、B 和 C。每个元素都有这些attributes的其他分布。此分布通过正整数值表示。例如,元素 1 具有属性A: 42 B: 1337 C: 18。这些属性的总和在元素上不一致。有些元素比其他元素拥有更多。
现在的问题:
我们希望从每个类别中准确选择一个元素,以便
- 我们在属性 A 和 B 上达到了一定的阈值(超过它也是可能的,但不是必需的)
- 同时获得最大数量的 C.
示例:我们希望在所有选定元素上的总和至少达到 80 A 和 150 B,并希望尽可能多的 C。
我已经考虑过这个问题,无法想象一个有效的解决方案。样本量约为 15 个类别,每个类别最多包含约 30 个元素,因此暴力破解似乎不是很有效,因为可能存在 30^15 种可能性。
我的模型是我将其视为具有深度的树类别数。每个深度级别代表一个类别,让我们可以选择从该类别中选择一个元素。当传递一个节点时,我们将表示元素的属性添加到我们想要优化的总和中。
如果我们在同一级别上多次点击相同的属性组合,我们会将它们合并,以便我们可以剥离已计算值的多次计算。如果我们达到一个路径在所有三个属性中的价值都较低的水平,我们就不再从那里遵循它。
但是,在最坏的情况下,这棵树中仍然有大约 30^15 个节点。
你们中有人能想出一种算法来帮助我解决这个问题吗?或者你能解释一下为什么你认为不存在这样的算法吗?
【问题讨论】:
-
如果您可以创建一个场景,这样我就可以看到您在说什么,这将有所帮助。我认为这是一个优化问题,但是如果你有一个满足要求的非最优解决方案,那是否足够?
-
我正在寻找最佳解决方案。但是,也可以接受接近最佳的解决方案。满足要求是必须的。
标签: algorithm performance