36 lines
848 B
PHP
36 lines
848 B
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace App\Services;
|
||
|
|
|
||
|
|
use App\Models\AiModel;
|
||
|
|
|
||
|
|
class ModelScoringService
|
||
|
|
{
|
||
|
|
public function calculateTotal(int $effectiveness, int $price, int $speed): int
|
||
|
|
{
|
||
|
|
$boundedEffectiveness = $this->boundScore($effectiveness);
|
||
|
|
$boundedPrice = $this->boundScore($price);
|
||
|
|
$boundedSpeed = $this->boundScore($speed);
|
||
|
|
|
||
|
|
return (int) round(($boundedEffectiveness * 0.5) + ($boundedPrice * 0.3) + ($boundedSpeed * 0.2));
|
||
|
|
}
|
||
|
|
|
||
|
|
public function apply(AiModel $model): AiModel
|
||
|
|
{
|
||
|
|
$model->total_score = $this->calculateTotal(
|
||
|
|
$model->effectiveness_score,
|
||
|
|
$model->price_score,
|
||
|
|
$model->speed_score,
|
||
|
|
);
|
||
|
|
|
||
|
|
return $model;
|
||
|
|
}
|
||
|
|
|
||
|
|
private function boundScore(int $score): int
|
||
|
|
{
|
||
|
|
return max(0, min(100, $score));
|
||
|
|
}
|
||
|
|
}
|