FIX BUAT SIDANG

This commit is contained in:
daffarahman11 2025-05-18 21:47:21 +07:00
parent 7cfe92dcec
commit df989d1551
3 changed files with 43 additions and 11 deletions

View File

@ -6,6 +6,7 @@
use App\Models\Klaster;
use App\Models\Curanmor;
use Illuminate\Http\Request;
use App\Services\KMeansService;
class LandingController extends Controller
{
@ -18,5 +19,23 @@ public function index()
$tanggalCuranmor = \Carbon\Carbon::parse($updateCuranmor->updated_at)->translatedFormat('d F Y');
return view('landing', compact('klasters', 'tanggalCuras', 'tanggalCuranmor'));
}
public function runKmeans()
{
$serviceKMeans = new KMeansService();
$serviceKMeans->SSEElbowCuranmor();
$serviceKMeans->SSEElbowCuras();
$serviceKMeansCuras = new KMeansService();
$hasilKMeansCuras = $serviceKMeansCuras->hitungKMeansCuras();
file_put_contents(storage_path('app/public/hasil_kmeans_curas.json'), json_encode($hasilKMeansCuras));
$serviceKmeansCuranmor = new KMeansService();
$hasilKMeansCuranmor = $serviceKmeansCuranmor->hitungKMeansCuranmor();
file_put_contents(storage_path('app/public/hasil_kmeans_curanmor.json'), json_encode($hasilKMeansCuranmor));
return redirect('/dashboard/curanmor');
}
}

View File

@ -15,7 +15,6 @@ public function hitungKMeansCuras()
$k = Klaster::count('id');
$maxIterasi = 100;
// Ambil centroid awal yang unik
$minValue = $data->min('jumlah_curas');
$maxValue = $data->max('jumlah_curas');
@ -88,9 +87,6 @@ public function hitungKMeansCuras()
// Update ke database
foreach ($data as $item) {
Curas::where('id', $item->id)->update([
'klaster_id' => $centroidToKlaster[$item->temp_klaster],
@ -232,9 +228,17 @@ public function SSEElbowCuranmor()
// Loop untuk setiap nilai k dari 2 hingga maxK
for ($k = 2; $k <= $maxK; $k++) {
$centroids = collect(range(1, $k))->map(function () use ($min, $max) {
return ['jumlah_curanmor' => mt_rand($min, $max)];
});
$usedValues = [];
$centroids = collect();
while ($centroids->count() < $k) {
$randVal = mt_rand($min, $max);
if (!in_array($randVal, $usedValues)) {
$centroids->push(['jumlah_curanmor' => $randVal]);
$usedValues[] = $randVal;
}
}
$prevAssignment = [];
@ -301,7 +305,7 @@ public function SSEElbowCuranmor()
public function SSEElbowCuras()
{
$data = Curas::select('id', 'jumlah_curas')->get();
$maxK = 10;
$maxK = 4;
$maxIterasi = 100;
$elbowData = [];
@ -310,9 +314,17 @@ public function SSEElbowCuras()
// Loop untuk setiap nilai k dari 2 hingga maxK
for ($k = 2; $k <= $maxK; $k++) {
$centroids = collect(range(1, $k))->map(function () use ($min, $max) {
return ['jumlah_curas' => mt_rand($min, $max)];
});
$usedValues = [];
$centroids = collect();
while ($centroids->count() < $k) {
$randVal = mt_rand($min, $max);
if (!in_array($randVal, $usedValues)) {
$centroids->push(['jumlah_curas' => $randVal]);
$usedValues[] = $randVal;
}
}
$prevAssignment = [];

View File

@ -14,6 +14,7 @@
use App\Http\Controllers\TampilHitunganController;
// Route Landing
Route::get('/kmeans', [LandingController::class, 'runKmeans']);
Route::get('/', [LandingController::class, 'index']);
Route::get('/blank', function () {
return view('admin.dashboardBlank');