分配给定资源(例如预算)以获得最佳输出的最佳方式

时间:2017-11-25 04:07:49

标签: algorithm

我正在尝试找到一种解决方案,在该解决方案中,给定资源(例如预算)将最佳地分配给不同的选项,从而在所提供的资源上产生不同的结果。

假设我有N = 1200和一些函数。 (a,b,c,d是一些未知变量)

f1(x) = a * x
f2(x) = b * x^c
f3(x) = a*x + b*x^2 + c*x^3
f4(x) = d^x
f5(x) = log x^d
...

而且,假设有n个这些函数根据其输入x生成不同的结果,其中x = 0 or x >= m,其中m是常量。< / p>

虽然我无法找到给定函数的确切公式,但我能够找到输出。这意味着我可以做到:

X = f1(N1) + f2(N2) + f3(N3) + ... + fn(Nn)其中(N1 + ... Nn) = N的次数与将N分配到n次数的方式一样多,并找到X最大的特定情况

我如何使用目前可用的库来实际找到计算能力最小的N的最佳分布?

1 个答案:

答案 0 :(得分:1)

如果您对限制为整数的分配感到满意,那么有一个成本为O(Nn)的动态编程解决方案 - 因此您可以根据需要通过缩放来提高准确性,但这会增加CPU时间。

对于每个i = 1到n维持一个数组,其中元素j仅使用前i个函数给出最大产量,给出它们的总容差j。

对于i = 1,这只是f1()的结果。

对于i = k + 1,考虑在计算j的结果时,考虑在f_ {k + 1}()之间分割j个单位的每种可能方式,以及告诉你从第一个k中的分布得到最佳回报的表函数 - 因此您可以使用为k创建的表计算i = k + 1的表。

最后,您将获得n个功能和N个资源的最佳回报。对于i和k的所有可能值,如果你维护一组数组,告诉在第一个i函数中分配k个单位的最佳方法,它可以更容易地找出最佳答案。然后你可以查找f100()的最佳分配,从N中减去这个分配给f100()的值,在给定结果资源的情况下查找f99()的最佳分配,并继续这样直到你找到了所有f()的最佳分配。

作为示例,假设f1(x)= 2x,f2(x)= x ^ 2并且如果x> 0则f3(x)= 3,否则为0。假设我们有3个单位的资源。

第一个表只是f1(x),0,1,2,3单位为0,2,4,6。

第二个表是使用f1(x)和f2(x)表示0,1,2,3单位的最佳表格,并且是0,2,4,9,在x = 2时从f1切换到f2

第三个表是0,3,5,9。我可以通过使用1个单位获得f3()得到3和5,其余用于第二个表中的最佳解决方案。 9只是第二个表中的最佳解决方案 - 没有更好的解决方案使用3个资源将其中的任何一个赋予f(3)

所以9这是最好的答案。找出如何实现目标的一种方法是保持表格并重新计算答案。 9来自第二个表中的f3(0)+ 9,因此所有3个单位都可用于f2()+ f1()。第二个表9来自f2(3)所以f(1)没有单位,我们得到f1(0)+ f2(3)+ f3(0)。

当您在第i = k + 1阶段使用资源时,您有一个表格形式i = k,它可以告诉您在您决定在舞台上使用某些资源后所剩下的资源所期望的结果I = K + 1。最好的分布不会变得不正确,因为那个阶段i = k你已经根据每个可能的剩余资源数量计算出最佳分布的结果。