git init
This commit is contained in:
38
app/Models/Perceptron.php
Normal file
38
app/Models/Perceptron.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?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; // Add bias weight
|
||||
}
|
||||
|
||||
public function test(array $inputs): int
|
||||
{
|
||||
$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 protected function activationFunction(float $weighted_sum): int;
|
||||
|
||||
public function getSynapticWeights(): array
|
||||
{
|
||||
return $this->synaptic_weights;
|
||||
}
|
||||
|
||||
public function setSynapticWeights(array $synaptic_weights): void
|
||||
{
|
||||
$this->synaptic_weights = $synaptic_weights;
|
||||
}
|
||||
}
|
||||
18
app/Models/SimplePerceptron.php
Normal file
18
app/Models/SimplePerceptron.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
class SimplePerceptron extends Perceptron {
|
||||
|
||||
public function __construct(
|
||||
array $synaptic_weights,
|
||||
) {
|
||||
parent::__construct($synaptic_weights);
|
||||
}
|
||||
|
||||
protected function activationFunction(float $weighted_sum): int
|
||||
{
|
||||
return $weighted_sum >= 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user