【问题标题】:Reduce a 2D grid by minimizing number of Blackbox calls using any efficient algorithm通过使用任何有效算法最小化 Blackbox 调用的数量来减少 2D 网格
【发布时间】:2014-09-11 16:04:41
【问题描述】:

我有一个 100 × 100 点的二维网格(总计:10000 点)。 X 从 0 到 99 变化,Y 变化 从 0 到 99。我将每个 (x,y) 发送到 BlackBox 模块 并返回 2 个值 p 和 q。黑盒子 本质上是根据 (x,y) 从其可用函数集中选择一个函数并应用它 on (x,y) 然后返回成本和它使用的函数索引

因此,这个二维空间中的每个点都与 2 个值 (p,q) 相关联。第一个值 'p' 表示 Blackbox 使用哪个函数,第二个值 'q' 是成本。 Blackbox 对每个 (x,y) 使用的函数可能不同,并假设 Blackbox**(V = ~60) 可以使用最多 V 个函数。还假设 **cost 在 X 和 Y 维度上都是单调非递减的

请注意,我们也可以使用三个参数 (x,y,k) 调用 Blackbox,使其在 (x,y) 上执行函数 k 并返回一些 (k,q)。

我想要实现的是这个。 Blackbox 选择了非常多的功能。 我想通过增加点数成本来减少这种情况

我想要做的是减少网格中使用的函数数量。假设 Blackbox 在空间中的某些点使用了所有 60 个函数。我想找到一组最小的函数,这些函数在使用时 评估一个点 (x,y) 不会使该点 (x,y) 的成本增加超过一个因子“s”。

例如:假设因子 's' = 20%。假设我从 (99,99) 开始并检查它的 p。说 p = 5(第 5 个函数) 在那一点上,q = 3000。说在点 (99,98), (p,q) = (8, 2600)。我叫黑盒(99,98,5) 这使黑盒在点 (99,98) 执行函数 5 并让我说 (8,2800) 作为返回 价值。虽然 2800 > 2600, 2800 - 2600 在 2600 的 20% 以内,所以我可以使用函数 5 (99,99) at (99,98) 我也可以忽略函数 8 至少对于点 (99,98)。

同样,我想减少空间中使用的功能数量以降低价值,而无需 将任何点的成本增加超过's'。调用 Blackbox 最少次数 的最佳方法是什么?

蛮力方式:选择每个使用的不同函数并在整个空间中对其进行评估,并根据该函数决定覆盖空间中所有点且满足“s”阈值的最小函数集。

我知道这个问题真的很难读懂,但我已尽我所能问我的 准确地问。

【问题讨论】:

  • 似乎“成本在两个方向上都是单调非递减的”仅适用于“组合”函数,并且各个函数(例如您的示例中的函数 5)不需要遵守该属性.如果是这样,那么使用少于 10000 次函数评估就不可能完全解决该问题,因为您的封面中至少需要 1 个函数,并且在您不评估它的任何时候它都可能是任意糟糕的。您需要对 60 个单独的 BB 函数进行额外条件才能做得更好。
  • @j_random_hacker:各个函数独立地遵守该属性
  • 假设您打算写“我调用 Blackbox (99,98,5),这使 blackbox 在点 (99,98) 执行函数 5 并让我说 (5,3100) 作为返回值。”,这显然不适用于函数 5,因为 3100 > 3000 但 98
  • @j_random_hacker 我的意思是说,如果你在整个空间中评估相同的函数,你将能够看到单调性。我将在我给出的示例中纠正这个错误
  • @j_random_hacker:成本取决于两件事。您使用哪个函数以及在哪个点 (x,y) 使用它。 Blackbox 为成本最低的 (x,y) 选择最佳函数。但我是说我不想在 (x,y) 处对 (x,y) 使用最佳函数。如果我能保证我不会通过空间中的另一个函数将 cost(x,y) 增加超过 's' 以便我用最少数量的唯一函数覆盖整个空间,这对我来说就足够了

标签: c++ c algorithm data-structures


【解决方案1】:

只有在使用三个参数调用黑盒非常昂贵时才可能进行优化,例如黑匣子只能通过网络连接访问,因此本地机器可以在从黑匣子获得一个答案所需的时间内完成 1000 次操作。

在这种情况下,我看到的优化是您可以使用函数的单调性属性推断每个函数在给定点的值。这允许您在网格中的分散位置调用函数,然后按原样“填空”。

例如,假设我在位置 {0,0} {0,4} {4,0} {4,4} 评估函数 5 并得到以下结果

 7 ? ? ? 9
 ? ? ? ? ?
 ? ? ? ? ?
 ? ? ? ? ?
 3 ? ? ? 5

那么我可以推断出函数 5 的最坏情况值是

 7 9 9 9 9
 7 9 9 9 9
 7 9 9 9 9
 7 9 9 9 9
 3 5 5 5 5

我可以推断出函数 5 的最佳案例值是

 7 7 7 7 9
 3 3 3 3 5 
 3 3 3 3 5
 3 3 3 3 5 
 3 3 3 3 5

将这种技术发挥到极致,您可以使用 x 和 y 值 0、50 和 99 来评估每个函数。这会将整个空间划分为 4 个区域,收集到的信息可用于开始剔除列表的有用功能。例如,如果区域 1 中函数 33 的最坏情况值为 100,区域 1 中函数 45 的最佳情况值为 150,则函数 45 可以是从区域 1 中删除。

剔除有用函数列表后,通过评估中点的剩余函数,将每个区域划分为四个子区域。根据需要继续细分。最终,要么一个函数将支配整个区域,要么该区域将被缩减为一个点,剩下的候选函数数量有限。

您还可以通过使用两个参数 (x,y) 调用黑盒来咨询黑盒以获得每个点的最佳可能值。然后应用 fudge 因子 's' 来找到网格中每个点的绝对最大值。细分网格时,可以消除最佳情况值大于绝对最大值的函数。例如,如果在点 {20,22} 处的绝对最大值为 200,而函数 5 在点 {20,22} 的最佳情况值为 210,则可以在点 {20,22} 处将函数 5 从考虑中删除.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多