Оптимизация подмножества массивов с составными агрегатными функциями
У меня есть массив P = [1, 5, 3, 6, 4,...]
размера N
и средний A
Я хочу найти наиболее эффективный способ максимизировать следующую трехмерную функцию:
f(x, y) = 1/( (1+e^(-6(x-2))) * (1+e^(-6(y-2))) * (1+e^(-0.1x-0.3y+1.5)) )
где x = c(S) = Count(S)
и y = m(S) = Min(S[0]/A, S[1]/A,..., S[n]/A)
и S
является подмножеством P
Подмножество не обязательно должно быть непрерывным в P
У меня такое чувство, что это может быть сведено к некоторому варианту проблемы с подмножеством, но я действительно не знаю, с чего начать, кроме сортировки P
Цель состоит в том, чтобы реализовать алгоритм в PHP, но на самом деле любой псевдокод очень помог бы.
Ответы
Ответ 1
Если вы ищете умное сокращение математики, согласитесь с другими, место является математическим обменом. В противном случае начните с библиотеки 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 ...
}
}