39 lines
1.0 KiB
PHP
39 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
abstract class Perceptron extends Model
|
|
{
|
|
public function __construct(
|
|
private array $synaptic_weights,
|
|
) {
|
|
$this->synaptic_weights = $synaptic_weights;
|
|
}
|
|
|
|
public function test(array $inputs): float
|
|
{
|
|
$inputs = array_merge([1], $inputs); // Add bias input
|
|
|
|
if (count($inputs) !== count($this->synaptic_weights)) { // Check
|
|
throw new \InvalidArgumentException("Number of inputs must match number of synaptic weights.");
|
|
}
|
|
|
|
$weighted_sum = array_sum(array_map(fn($input, $weight) => $input * $weight, $inputs, $this->synaptic_weights));
|
|
return $this->activationFunction($weighted_sum);
|
|
}
|
|
|
|
abstract public function activationFunction(float $weighted_sum): float;
|
|
|
|
public function getSynapticWeights(): array
|
|
{
|
|
return $this->synaptic_weights;
|
|
}
|
|
|
|
public function setSynapticWeights(array $synaptic_weights): void
|
|
{
|
|
$this->synaptic_weights = $synaptic_weights;
|
|
}
|
|
}
|