Added ADALINE training
All checks were successful
linter / quality (push) Successful in 3m25s
tests / ci (8.4) (push) Successful in 3m52s
tests / ci (8.5) (push) Successful in 3m35s

This commit is contained in:
2026-03-22 15:54:04 +01:00
parent 29498e45ac
commit abb16aa6c1
6 changed files with 184 additions and 14 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Events\PerceptronInitialization;
use App\Models\NetworksTraining\ADALINEPerceptronTraining;
use App\Models\NetworksTraining\GradientDescentPerceptronTraining;
use App\Models\NetworksTraining\SimpleBinaryPerceptronTraining;
use App\Services\DatasetReader\IDataSetReader;
@@ -32,8 +33,9 @@ class PerceptronController extends Controller
$learningRate = 0.015;
$maxIterations = 150;
break;
case 'gradientdescent':
case 'gradientdescent' || 'adaline':
$learningRate = 0.00003;
break;
}
return inertia('PerceptronViewer', [
@@ -88,6 +90,10 @@ class PerceptronController extends Controller
$dataset['defaultLearningRate'] = 0.3;
$dataset['defaultMinError'] = 0.125;
break;
case 'adaline':
$dataset['defaultLearningRate'] = 0.05;
$dataset['defaultMinError'] = 0.125;
break;
}
break;
case 'table_2_9':
@@ -95,7 +101,7 @@ class PerceptronController extends Controller
case 'simple':
$dataset['defaultLearningRate'] = 0.015;
break;
case 'gradientdescent':
case 'gradientdescent' || 'adaline':
$dataset['defaultLearningRate'] = 0.001;
break;
}
@@ -123,7 +129,7 @@ class PerceptronController extends Controller
$weightInitMethod = $request->input('weight_init_method', 'random');
$dataSet = $request->input('dataset');
$learningRate = $request->input('learning_rate', 0.015);
$maxIterations = $request->input('max_iterations', 100);
$maxEpochs = $request->input('max_iterations', 100);
$sessionId = $request->input('session_id', session()->getId());
$trainingId = $request->input('training_id');
@@ -132,21 +138,22 @@ class PerceptronController extends Controller
}
$iterationEventBuffer = new PerceptronIterationEventBuffer($sessionId, $trainingId);
if ($maxIterations > config('perceptron.limited_broadcast_iterations')) {
$iterationsInterval = (int)($maxIterations / config('perceptron.limited_broadcast_iterations'));
if ($maxEpochs > config('perceptron.limited_broadcast_iterations')) {
$iterationsInterval = (int)($maxEpochs / config('perceptron.limited_broadcast_iterations'));
$iterationEventBuffer = new PerceptronLimitedEpochEventBuffer($sessionId, $trainingId, $iterationsInterval);
}
$dataSetReader = $this->getDataSetReader($dataSet);
$datasetReader = $this->getDataSetReader($dataSet);
$networkTraining = match ($perceptronType) {
'simple' => new SimpleBinaryPerceptronTraining($dataSetReader, $learningRate, $maxIterations, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId),
'gradientdescent' => new GradientDescentPerceptronTraining($dataSetReader, $learningRate, $maxIterations, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId, $minError),
'simple' => new SimpleBinaryPerceptronTraining($datasetReader, $learningRate, $maxEpochs, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId),
'gradientdescent' => new GradientDescentPerceptronTraining($datasetReader, $learningRate, $maxEpochs, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId, $minError),
'adaline' => new ADALINEPerceptronTraining($datasetReader, $learningRate, $maxEpochs, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId, $minError),
default => null,
};
event(new PerceptronInitialization($dataSetReader->lines, $networkTraining->activationFunction, $sessionId, $trainingId));
event(new PerceptronInitialization($datasetReader->lines, $networkTraining->activationFunction, $sessionId, $trainingId));
$networkTraining->start();