data = []; $this->nextSizeIncreaseThreshold = $sizeIncreaseStart; } public function flush(): void { event(new \App\Events\PerceptronTrainingIteration($this->data, $this->sessionId, $this->trainingId)); $this->data = []; } public function addIteration(int $iteration, int $exampleIndex, float $error, array $synaptic_weights): void { $this->data[] = [ "iteration" => $iteration, "exampleIndex" => $exampleIndex, "error" => $error, "weights" => $synaptic_weights, ]; if ($this->underSizeIncreaseCount <= $this->sizeIncreaseStart) { // We can still send a single date because we are under the increase start threshold $this->underSizeIncreaseCount++; $this->flush(); } else if (count($this->data) >= $this->nextSizeIncreaseThreshold) { $this->flush(); $this->nextSizeIncreaseThreshold *= $this->sizeIncreaseFactor; if ($this->nextSizeIncreaseThreshold > $this->MAX_SIZE) { $this->nextSizeIncreaseThreshold = $this->MAX_SIZE; // Cap the threshold to the maximum size } } } }