我有一个 100×100 点的2D网格(总计:10000点)。 X从0到99变化,Y变化 从0到99.我将每个(x,y)发送到 BlackBox模块并返回2个值 p和q 。黑盒子 基本上从(x,y)基于其可用函数集合中选择一个函数并应用它 on(x,y)然后返回成本及其使用的函数索引。
因此,该2维空间中的每个点与2个值(p,q)相关联。第一个值'p'表示Blackbox使用哪个功能,第二个值'q'表示费用。 Blackbox对每个(x,y)使用的函数可以不同,并假设Blackbox **(V = ~60)可以使用最大V函数。还假设**成本在 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)处说。我叫Blackbox(99,98,5) 这使得blackbox在点(99,98)处执行功能5并且让我说(8,2800)作为返回 值。虽然2800> 2600,2800 - 2600在2600的20%之内,所以因为我可以使用功能5 (99,98)at(99,98)我也可以忽略函数8至少为点(99,98)。
同样明智的我想要减少空间中使用的函数数量以降低值 增加任何一点的成本超过's'。通过调用 Blackbox最少次数来实现此目的的最佳方式是什么?
Bruteforce方式:选择使用的每个不同功能,并在整个空间内进行评估,并根据该决定哪个是覆盖空间中所有点的最小功能集合,并且满足's'阈值。
我知道这个问题真的很难读,但我已经尽了最大的努力来问我的问题 准确地提问。
答案 0 :(得分:2)
只有在调用带有三个参数的黑匣子时,例如非常昂贵才能实现优化,例如:黑匣子只能通过网络连接访问,这样本地机器可以在从黑匣子中获得一个答案的时间内进行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
将此技术发挥到极致,您可以使用0和50以及0和50的x和y值来评估每个函数。这会将整个空间划分为4个区域,并且收集的信息可用于开始剔除列表有用的功能。例如,如果区域1中的函数33的最坏情况值为100,并且区域1中的函数45的最佳情况值为150,则函数45可以是在区域1中被删除。
在剔除有用函数列表后,通过评估中点的剩余函数将每个区域划分为四个子区域。根据需要继续细分。最终,单个函数将占据整个区域,或者该区域将减少到单个点,剩余的候选函数数量有限。
您还可以通过使用两个参数(x,y)调用黑匣子,在每个点咨询黑匣子以获得最佳值。然后应用软糖因子's'来找到网格中每个点的绝对最大值。在细分网格时,可以消除最佳大小写值大于绝对最大值的函数。例如,如果绝对最大值在点{20,22}处为200,并且在点{20,22}处函数5的最佳情况值为210,则可以在点{20,22}处从函数5中删除函数5。