У меня проблемы с созданием рекурсивной функции для правильного перемещения по сети.
Проблема: массив объектов, называемых ячейками, имеет функцию:
whatIwant(wanted value, bucket array)
, которая вызывает сам по себе для каждого соединения с последним «поколением» ячеек.
При количестве ячеек ответа (3 поколения по 2 порядка) + 3) я должен получить 27 рекурсивных вызовов? Я получаю 107200 элементов в моем массиве возврата - вместо 27.
IF i don't call Flat() in the code: the return array is in a weird recursive pattern:
(34) [{…}, {…}, {…}, {…}, Array(34), {…}, {…}, Array(34), {…}, {…}, Array(34), Array(34), {…}, {…}, {…}, Array(34), {…}, {…}, Array(34), {…}, {…}, Array(34), Array(34), {…}, {…}, {…}, Array(34), {…}, {…}, Array(34), {…}, {…}, Array(34), Array(34)]
where each array of 34 is yet another array of exactly this array.
Как я думаю, это должно работать следующим образом: (что я думаю, я написал) объект мозга вызывает whatIWant () для каждого ' answer cell 'в конце, он вычисляет все необходимые корректировки, а затем для каждой из своих предыдущих целей уровня он вызывает объекты. эта активация) и как массив, ссылка на массив, сгенерированный вне этой функции - который начинается пустым, непрерывно выдвигая updateobjectcontainer, который применяется к braincell после того, как мозг вызывает метод answerCell.whatIWant (), и эти массивы суммируются / усредняем вместе.
путь рекурсии в моей голове (с 3gen: 2order) {cell.gen3, order0} вызывает {cell.gen2, order0}, вызывает {cell.gen1.order0} вызывает {cell.gen0.order0), возвращает обратно в {cell.gen1.order0}, который вызывает cell.gen0.order1}, который возвращает обратно в {cell.gen1.order0}, который возвращает urns {cell.gen2.order0}, который вызывает {cell.gen1.order0}, который вызывает {cell.gen0.order0}. и продолжается до тех пор, пока не достигнет верхнего логова, пройдя матрицу несколько раз.
, если я не называю flat, он создает массив объектов, надеюсь, кто-то просто и быстро скажет мне, почему я идиот.
some quick helper function defs:
Flat() = returns an array that has been recursively flattened;
Sigmoid() maps all input to between 0-1;
ArrayMultiply() takes two arrays and multiplies against index return a number;
brain.cellArray is the bucket for all the cells;
//
//recusion logic
whatIwant:function(answerValue, returnArray)
{
//stuff here that calculates an
//objects value(represents the desired
//change to the real cell above this
//abstraction we combine/average duplicates
//entries formed in this return array
if(Array.isArray(cell.lastGenerationTargetKeys) && cell.lastGenerationTargetKeys.length)
{
cell.lastGenerationTargetKeys.forEach(x=> returnArray.push(brain.cellArray[x].whatIwant(desiredObjectChange.activations[x], returnArray)));
return Flat(returnArray);
}
else
{
returnArray.push(desiredObjectChange);
return Flat(returnArray);
}
edit / updated для ясности.