Коротко
Может ли нейронная сеть эмулировать факториальное декомпозицию (или какой-либо другой метод), чтобы обеспечить перестановку списка с учетом уникального индекса перестановок?
Применение
У меня есть список из 10 вещей, и что они не имеют значения. Меня волнует то, что мои 10 вещей могут быть помещены в 3628800 (или 10!) Уникальных заказов, потому что тогда я могу выразить любой порядок в списке моих 10 вещей, используя целое число без знака и факториальное разложение:
Order 0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Order 1: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8
Order ....
Order 3628799: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
Это позволяет проводить параллельное распределение анализа на разных порядках списка моих 10 вещей.
Общим примером является проблема коммивояжера:
1. I give 500 different computers each a range of unsigned integers:
0 -> 7257 for computer 0,
7257 -> 14516 for computer 1,
etc.
2. Each computer first calculates the list order from it unsigned integer
index by using factorial decomposition.
ie. Order 1 -> 0, 1, 2, 3, 4, 5, 6, 7, 9, 8
3. The distance between the cities placed in the order described is calculated.
4. The shortest distances from each computer is collected, and the shortest
of those is taken. Leaving us with a single unsigned integer index that
describes the shortest possible permutation of cities.
Тот же процесс может быть использован для решения практически любой поверхности с неограниченной ошибкой, которая часто дает гораздо большую, чем возможно, вычислительную мощность.
Рекурсивное алгоритмическое решение
Мы можем вычислить N-ю перестановку любого фиксированного списка (при условии, что нам понадобится большая поддержка целого числа для более крупных списков) с использованием факториальной декомпозиции (указанной здесь в php), и для ясности приведена здесь в javascript:
function ithPermutationOfNElements (n, i)
{
var j, k = 0;
var fact = [];
var perm = [];
// compute factorial numbers
fact[k] = 1;
while (++k < n)
fact[k] = fact[k - 1] * k;
// compute factorial code
for (k = 0; k < n; ++k)
{
perm[k] = Math.floor(i / fact[n - 1 - k]);
i = i % fact[n - 1 - k];
}
// readjust values to obtain the permutation
// start from the end and check if preceding values are lower
for (k = n - 1; k > 0; --k)
for (j = k - 1; j >= 0; --j)
if (perm[j] <= perm[k])
perm[k]++;
return perm;
}
console.log(ithPermutationOfNElements(4, 23)); // [ 3, 2, 1, 0 ]
Решение нейронной сети?
Может ли любая архитектура нейронной сети и обучающая комбинация эмулировать эту функцию, учитывая i, поскольку она только вводит нейронные и n выходные нейроны, представляющие каждый элемент перестановки?