使用复合聚合函数的数组子集优化

时间:2018-07-14 00:49:24

标签: php arrays optimization aggregate subset

我有一个数组P = [1, 5, 3, 6, 4, ...],大小为N,平均值为A

我想找到最有效的方法来最大化以下3D功能:

f(x, y) = 1 / ( (1+e^(-6(x-2))) * (1+e^(-6(y-2))) * (1+e^(-0.1x-0.3y+1.5)) )

Function gcontour plot

其中x = c(S) = Count(S)y = m(S) = Min(S[0]/A, S[1]/A, ..., S[n]/A),而SP的子集。该子集在P中不必是连续的。

我觉得可以将其简化为子集和问题的某些变体,但是除了排序P之外,我真的不知道从哪里开始。目的是在PHP中实现该算法,但实际上任何伪代码都会有很大帮助。

1 个答案:

答案 0 :(得分:2)

如果您正在寻找聪明的数学简化方法,请与他人达成共识,这是数学交换的地方。否则,从Math_Combinatorics库开始。然后,您应该可以使用以下方法遍历S的所有唯一组合:

require_once 'Math/Combinatorics.php';
$combos = new Math_Combinatorics;

$P = [1, 5, 3, 6, 4, ...];
for ($n = 1; $n <= count($P); $n++) {
    foreach ($combos->combinations($P, $n) as $S) {
        ... your calculations on S go here ...
    }
}