Refactored into folders

This commit is contained in:
2026-03-22 10:42:08 +01:00
parent 977c259cb9
commit 4717254da4
18 changed files with 258 additions and 44 deletions

View File

@@ -5,12 +5,14 @@ namespace App\Http\Controllers;
use App\Events\PerceptronInitialization;
use App\Models\GradientDescentPerceptronTraining;
use App\Models\SimpleBinaryPerceptronTraining;
use App\Services\DataSetReader;
use App\Services\ISynapticWeightsProvider;
use App\Services\PerceptronIterationEventBuffer;
use App\Services\PerceptronLimitedEpochEventBuffer;
use App\Services\ZeroSynapticWeights;
use App\Services\DatasetReader\IDataSetReader;
use App\Services\DatasetReader\LinearOrderDataSetReader;
use App\Services\IterationEventBuffer\PerceptronIterationEventBuffer;
use App\Services\IterationEventBuffer\PerceptronLimitedEpochEventBuffer;
use App\Services\SynapticWeightsProvider\ISynapticWeightsProvider;
use App\Services\SynapticWeightsProvider\ZeroSynapticWeights;
use Illuminate\Http\Request;
use Tests\Services\IterationEventBuffer\DullIterationEventBuffer;
class PerceptronController extends Controller
{
@@ -23,7 +25,7 @@ class PerceptronController extends Controller
$learningRate = 0.01;
$maxIterations = 200;
$minError = 0.6;
$minError = 0.1;
switch ($perceptronType) {
case 'simple':
@@ -53,7 +55,7 @@ class PerceptronController extends Controller
if (pathinfo($file, PATHINFO_EXTENSION) === 'csv') {
$dataset = [];
$dataset['label'] = str_replace('.csv', '', $file);
$dataSetReader = new DataSetReader($dataSetsDirectory . '/' . $file);
$dataSetReader = new LinearOrderDataSetReader($dataSetsDirectory . '/' . $file);
$dataset['data'] = [];
switch (count($dataSetReader->lines[0])) {
case 3:
@@ -84,6 +86,7 @@ class PerceptronController extends Controller
switch ($perceptronType) {
case 'gradientdescent':
$dataset['defaultLearningRate'] = 0.3;
$dataset['defaultMinError'] = 0.125;
break;
}
break;
@@ -94,7 +97,6 @@ class PerceptronController extends Controller
break;
case 'gradientdescent':
$dataset['defaultLearningRate'] = 0.001;
$dataset['defaultMinError'] = 2.0;
break;
}
break;
@@ -108,10 +110,10 @@ class PerceptronController extends Controller
return $datasets;
}
private function getDataSetReader(string $dataSet): DataSetReader
private function getDataSetReader(string $dataSet): IDataSetReader
{
$dataSetFileName = "data_sets/{$dataSet}.csv";
return new DataSetReader($dataSetFileName);
return new LinearOrderDataSetReader($dataSetFileName);
}
public function run(Request $request, ISynapticWeightsProvider $synapticWeightsProvider)
@@ -141,6 +143,16 @@ class PerceptronController extends Controller
$networkTraining = match ($perceptronType) {
'simple' => new SimpleBinaryPerceptronTraining($dataSetReader, $learningRate, $maxIterations, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId),
'gradientdescent' => new GradientDescentPerceptronTraining($dataSetReader, $learningRate, $maxIterations, $synapticWeightsProvider, $iterationEventBuffer, $sessionId, $trainingId, $minError),
'gradientdescentTest' => new GradientDescentPerceptronTraining(
datasetReader: new LinearOrderDataSetReader(public_path('data_sets/logic_and_gradient.csv')),
learningRate: 0.2,
maxEpochs: 100,
synapticWeightsProvider: new ZeroSynapticWeights(),
iterationEventBuffer: $iterationEventBuffer,
sessionId: 'test-session',
trainingId: 'test-training',
minError: 0.125001,
),
default => null,
};