334 lines
14 KiB
PHP
334 lines
14 KiB
PHP
<?php
|
|
// --------------- Fungsi Keanggotaan Waktu Kejadian -------------
|
|
|
|
use App\Models\Kerawanan;
|
|
|
|
if (!function_exists('keanggotaanWaktuKejadian')) {
|
|
function keanggotaanWaktuKejadian($waktu_kejadian)
|
|
{
|
|
$waktu_kejadianA = $waktu_kejadianB = $waktu_kejadianC = $waktu_kejadianD = 0;
|
|
if ($waktu_kejadian <= 5) {
|
|
if ($waktu_kejadian <= 0) {
|
|
$waktu_kejadianA = 1;
|
|
} elseif ($waktu_kejadian >= 0 && $waktu_kejadian <= 5) {
|
|
$waktu_kejadianA = (5 - $waktu_kejadian) / (5 - 0);
|
|
} elseif ($waktu_kejadian >= 5) {
|
|
$waktu_kejadianA = 0;
|
|
}
|
|
$waktu_kejadianRule = 'Dini Hari';
|
|
}
|
|
|
|
if ($waktu_kejadian >= 5 && $waktu_kejadian < 11) {
|
|
if ($waktu_kejadian >= 5 && $waktu_kejadian <= 8) {
|
|
$waktu_kejadianB = ($waktu_kejadian - 5) / (8 - 5);
|
|
} elseif ($waktu_kejadian >= 8 && $waktu_kejadian <= 11) {
|
|
$waktu_kejadianB = (11 - $waktu_kejadian) / (11 - 8);
|
|
} elseif ($waktu_kejadian == 8) {
|
|
$waktu_kejadianB = 1;
|
|
} elseif ($waktu_kejadian <= 5 && $waktu_kejadian >= 11) {
|
|
$waktu_kejadianB = 0;
|
|
}
|
|
$waktu_kejadianRule = 'Pagi';
|
|
}
|
|
|
|
if ($waktu_kejadian >= 11 && $waktu_kejadian < 17) {
|
|
if ($waktu_kejadian >= 11 && $waktu_kejadian <= 14) {
|
|
$waktu_kejadianC = ($waktu_kejadian - 11) / (14 - 11);
|
|
} elseif ($waktu_kejadian >= 14 && $waktu_kejadian <= 17) {
|
|
$waktu_kejadianC = (17 - $waktu_kejadian) / (17 - 14);
|
|
} elseif ($waktu_kejadian == 14) {
|
|
$waktu_kejadianC = 1;
|
|
} elseif ($waktu_kejadian <= 11 && $waktu_kejadian >= 17) {
|
|
$waktu_kejadianC = 0;
|
|
}
|
|
$waktu_kejadianRule = 'Siang-Sore';
|
|
}
|
|
|
|
if ($waktu_kejadian >= 17) {
|
|
if ($waktu_kejadian >= 17 && $waktu_kejadian <= 23.59) {
|
|
$waktu_kejadianD = ($waktu_kejadian - 17) / (23.59 - 17);
|
|
} elseif ($waktu_kejadian >= 23.59) {
|
|
$waktu_kejadianD = 1;
|
|
} elseif ($waktu_kejadian <= 17) {
|
|
$waktu_kejadianD = 0;
|
|
}
|
|
$waktu_kejadianRule = 'Malam';
|
|
}
|
|
|
|
return [
|
|
'waktu_kejadianA' => $waktu_kejadianA,
|
|
'waktu_kejadianB' => $waktu_kejadianB,
|
|
'waktu_kejadianC' => $waktu_kejadianC,
|
|
'waktu_kejadianD' => $waktu_kejadianD,
|
|
'waktu_kejadianRule' => $waktu_kejadianRule
|
|
];
|
|
}
|
|
}
|
|
|
|
//-------------- Fungsi Keanggotaan Kondisi Kecelakaan ------------------//
|
|
if (!function_exists('keanggotaanKondisiKecelakaan')) {
|
|
function keanggotaanKondisiKecelakaan($kondisi_kecelakaan)
|
|
{
|
|
$kondisi_kecelakaanA = $kondisi_kecelakaanB = $kondisi_kecelakaanC = 0;
|
|
if ($kondisi_kecelakaan <= 1) {
|
|
if ($kondisi_kecelakaan <= 1) {
|
|
$kondisi_kecelakaanA = 1;
|
|
} elseif ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan < 2) {
|
|
$kondisi_kecelakaanA = (2 - $kondisi_kecelakaan) / (2 - 1);
|
|
} elseif ($kondisi_kecelakaan >= 2) {
|
|
$kondisi_kecelakaanA = 0;
|
|
}
|
|
$kondisi_kecelakaanRule = 'Ringan';
|
|
}
|
|
|
|
if ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan <= 2) {
|
|
if ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan < 2) {
|
|
$kondisi_kecelakaanB = ($kondisi_kecelakaan - 1) / (2 - 1);
|
|
} elseif ($kondisi_kecelakaan > 2 && $kondisi_kecelakaan < 3) {
|
|
$kondisi_kecelakaanB = (3 - $kondisi_kecelakaan) / (3 - 2);
|
|
} elseif ($kondisi_kecelakaan == 2) {
|
|
$kondisi_kecelakaanB = 1;
|
|
} elseif ($kondisi_kecelakaan <= 1 || $kondisi_kecelakaan >= 3) {
|
|
$kondisi_kecelakaanB = 0;
|
|
}
|
|
$kondisi_kecelakaanRule = 'Sedang';
|
|
}
|
|
|
|
if ($kondisi_kecelakaan > 2) {
|
|
if ($kondisi_kecelakaan >= 2 && $kondisi_kecelakaan < 3) {
|
|
$kondisi_kecelakaanC = ($kondisi_kecelakaan - 2) / (3 - 2);
|
|
} elseif ($kondisi_kecelakaan >= 3) {
|
|
$kondisi_kecelakaanC = 1;
|
|
} elseif ($kondisi_kecelakaan <= 2) {
|
|
$kondisi_kecelakaanC = 0;
|
|
}
|
|
$kondisi_kecelakaanRule = 'Berat';
|
|
}
|
|
|
|
return [
|
|
'kondisi_kecelakaanA' => $kondisi_kecelakaanA,
|
|
'kondisi_kecelakaanB' => $kondisi_kecelakaanB,
|
|
'kondisi_kecelakaanC' => $kondisi_kecelakaanC,
|
|
'kondisi_kecelakaanRule' => $kondisi_kecelakaanRule
|
|
];
|
|
}
|
|
}
|
|
|
|
// ------------- Fungsi Keanggotaan Kondisi Cahaya -------------- //
|
|
|
|
if (!function_exists('keanggotaanKondisiCahaya')) {
|
|
function keanggotaanKondisiCahaya($kondisi_cahaya)
|
|
{
|
|
$kondisi_cahayaA = $kondisi_cahayaB = 0;
|
|
if ($kondisi_cahaya <= 1) {
|
|
if ($kondisi_cahaya <= 1) {
|
|
$kondisi_cahayaA = 1;
|
|
} elseif ($kondisi_cahaya > 1 && $kondisi_cahaya < 2) {
|
|
$kondisi_cahayaA = (2 - $kondisi_cahaya) / (2 - 1);
|
|
} elseif ($kondisi_cahaya >= 2) {
|
|
$kondisi_cahayaA = 0;
|
|
}
|
|
$kondisi_cahayaRule = 'Terang / Jelas';
|
|
}
|
|
|
|
if ($kondisi_cahaya > 1 && $kondisi_cahaya <= 2) {
|
|
if ($kondisi_cahaya > 1 && $kondisi_cahaya < 2) {
|
|
$kondisi_cahayaB = ($kondisi_cahaya - 1) / (2 - 1);
|
|
} elseif ($kondisi_cahaya >= 2) {
|
|
$kondisi_cahayaB = 1;
|
|
} elseif ($kondisi_cahaya <= 1) {
|
|
$kondisi_cahayaB = 0;
|
|
}
|
|
$kondisi_cahayaRule = 'Redup / Samar';
|
|
}
|
|
|
|
return [
|
|
'kondisi_cahayaA' => $kondisi_cahayaA,
|
|
'kondisi_cahayaB' => $kondisi_cahayaB,
|
|
'kondisi_cahayaRule' => $kondisi_cahayaRule
|
|
];
|
|
}
|
|
}
|
|
|
|
// -------------- Fungsi Keanggotaan Bentuk Geometri --------------
|
|
|
|
if (!function_exists('keanggotaanBentukGeometri')) {
|
|
function keanggotaanBentukGeometri($bentuk_geometri)
|
|
{
|
|
$bentuk_geometriA = $bentuk_geometriB = $bentuk_geometriC = $bentuk_geometriD = $bentuk_geometriE = 0;
|
|
if ($bentuk_geometri <= 1) {
|
|
if ($bentuk_geometri <= 1) {
|
|
$bentuk_geometriA = 1;
|
|
} elseif ($bentuk_geometri > 1 && $bentuk_geometri < 2) {
|
|
$bentuk_geometriA = (2 - $bentuk_geometri) / (2 - 1);
|
|
} elseif ($bentuk_geometri >= 2) {
|
|
$bentuk_geometriA = 0;
|
|
}
|
|
$bentuk_geometriRule = 'Lurus';
|
|
}
|
|
|
|
if ($bentuk_geometri > 1 && $bentuk_geometri <= 2) {
|
|
if ($bentuk_geometri > 1 && $bentuk_geometri < 2) {
|
|
$bentuk_geometriB = ($bentuk_geometri - 1) / (2 - 1);
|
|
} elseif ($bentuk_geometri > 2 && $bentuk_geometri < 3) {
|
|
$bentuk_geometriB = (3 - $bentuk_geometri) / (3 - 2);
|
|
} elseif ($bentuk_geometri == 2) {
|
|
$bentuk_geometriB = 1;
|
|
} elseif ($bentuk_geometri <= 1 || $bentuk_geometri >= 3) {
|
|
$bentuk_geometriB = 0;
|
|
}
|
|
$bentuk_geometriRule = 'Jembatan';
|
|
}
|
|
|
|
if ($bentuk_geometri > 2 && $bentuk_geometri <= 3) {
|
|
if ($bentuk_geometri > 2 && $bentuk_geometri < 3) {
|
|
$bentuk_geometriC = ($bentuk_geometri - 2) / (3 - 2);
|
|
} elseif ($bentuk_geometri > 3 && $bentuk_geometri < 4) {
|
|
$bentuk_geometriC = (4 - $bentuk_geometri) / (4 - 3);
|
|
} elseif ($bentuk_geometri == 3) {
|
|
$bentuk_geometriC = 1;
|
|
} elseif ($bentuk_geometri <= 2 || $bentuk_geometri >= 4) {
|
|
$bentuk_geometriC = 0;
|
|
}
|
|
$bentuk_geometriRule = 'Tikungan';
|
|
}
|
|
|
|
if ($bentuk_geometri > 3 && $bentuk_geometri <= 4) {
|
|
if ($bentuk_geometri > 3 && $bentuk_geometri < 4) {
|
|
$bentuk_geometriD = ($bentuk_geometri - 3) / (4 - 3);
|
|
} elseif ($bentuk_geometri > 4 && $bentuk_geometri < 5) {
|
|
$bentuk_geometriD = (5 - $bentuk_geometri) / (5 - 4);
|
|
} elseif ($bentuk_geometri == 4) {
|
|
$bentuk_geometriD = 1;
|
|
} elseif ($bentuk_geometri <= 3 || $bentuk_geometri >= 5) {
|
|
$bentuk_geometriD = 0;
|
|
}
|
|
$bentuk_geometriRule = 'Simpang Tiga';
|
|
}
|
|
|
|
if ($bentuk_geometri > 4) {
|
|
if ($bentuk_geometri >= 4 && $bentuk_geometri < 5) {
|
|
$bentuk_geometriE = ($bentuk_geometri - 4) / (5 - 4);
|
|
} elseif ($bentuk_geometri >= 5) {
|
|
$bentuk_geometriE = 1;
|
|
} elseif ($bentuk_geometri <= 4) {
|
|
$bentuk_geometriE = 0;
|
|
}
|
|
$bentuk_geometriRule = 'Simpang Empat';
|
|
}
|
|
|
|
return [
|
|
'bentuk_geometriA' => $bentuk_geometriA,
|
|
'bentuk_geometriB' => $bentuk_geometriB,
|
|
'bentuk_geometriC' => $bentuk_geometriC,
|
|
'bentuk_geometriD' => $bentuk_geometriD,
|
|
'bentuk_geometriE' => $bentuk_geometriE,
|
|
'bentuk_geometriRule' => $bentuk_geometriRule
|
|
];
|
|
}
|
|
}
|
|
|
|
|
|
// Defuzzifikasi
|
|
if (!function_exists('hitungLuasMoment')) {
|
|
function hitungLuasMoment($tingkat_kerawanan, $minRule)
|
|
{
|
|
if ($tingkat_kerawanan == 'Aman') {
|
|
// Keanggotaaan berdasarkan fungsi keanggotaan
|
|
// $keanggotaan = 20;
|
|
// $keanggotaanAkhir = 30;
|
|
$kerawanan = Kerawanan::where('himpunan', 'Aman')->first();
|
|
|
|
if ($kerawanan) {
|
|
|
|
$keanggotaan = $kerawanan->keanggotaan_awal;
|
|
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
|
|
}
|
|
|
|
// Batas bawah dan batas atas dari fungsi keanggotaan
|
|
$batasBawah = 0;
|
|
$batasAtas = $keanggotaanAkhir - $minRule * ($keanggotaanAkhir - $keanggotaan);
|
|
|
|
// Menghitung luas
|
|
$luasA1 = $batasAtas * $minRule;
|
|
$luasA2 = (($keanggotaanAkhir - $batasAtas) * $minRule) / 2;
|
|
$totalLuas = $luasA1 + $luasA2;
|
|
|
|
// Menghitung moment
|
|
$momentSatu = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
|
|
$momentDua = (3 / 2) * pow($keanggotaanAkhir, 2) - (0.1 / 3) * pow($keanggotaanAkhir, 3) - ((3 / 2) * pow($batasAtas, 2) - (0.1 / 3) * pow($batasAtas, 3));
|
|
$totalMoment = $momentSatu + $momentDua;
|
|
} elseif ($tingkat_kerawanan == 'Rawan') {
|
|
// Keanggotaaan berdasarkan fungsi keanggotaan
|
|
// $keanggotaan = 30;
|
|
// $keanggotaanTengah = 50;
|
|
// $keanggotaanAkhir = 70;
|
|
$kerawanan = Kerawanan::where('himpunan', 'Rawan')->first();
|
|
|
|
if ($kerawanan) {
|
|
|
|
$keanggotaan = $kerawanan->keanggotaan_awal;
|
|
$keanggotaanTengah = $kerawanan->keanggotaan_tengah;
|
|
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
|
|
}
|
|
|
|
// Batas bawah dan batas atas dari fungsi keanggotaan
|
|
$batasBawah = $minRule * ($keanggotaanTengah - $keanggotaan) + $keanggotaan;
|
|
$batasAtas = $keanggotaanAkhir - $minRule * ($keanggotaanAkhir - $keanggotaanTengah);
|
|
|
|
// Menghitung luas
|
|
$luasA1 = (($batasBawah - $keanggotaan) * $minRule) / 2;
|
|
$luasA2 = ($batasAtas - $batasBawah) * $minRule;
|
|
$luasA3 = (($keanggotaanAkhir - $batasAtas) * $minRule) / 2;
|
|
$totalLuas = $luasA1 + $luasA2 + $luasA3;
|
|
|
|
// Menghitung moment
|
|
$momentSatu = (0.05 / 3) * pow($batasBawah, 3) - (1.5 / 2) * pow($batasBawah, 2) - ((0.05 / 3) * pow($keanggotaan, 3) - (1.5 / 2) * pow($keanggotaan, 2));
|
|
$momentDua = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
|
|
$momentTiga = (3.5 / 2) * pow($keanggotaanAkhir, 2) - (0.05 / 3) * pow($keanggotaanAkhir, 3) - ((3.5 / 2) * pow($batasAtas, 2) - (0.05 / 3) * pow($batasAtas, 3));
|
|
$totalMoment = $momentSatu + $momentDua + $momentTiga;
|
|
} elseif ($tingkat_kerawanan == 'Sangat Rawan') {
|
|
// Keanggotaaan berdasarkan fungsi keanggotaan
|
|
// $keanggotaan = 70;
|
|
// $keanggotaanAkhir = 90;
|
|
$kerawanan = Kerawanan::where('himpunan', 'Sangat Rawan')->first();
|
|
|
|
if ($kerawanan) {
|
|
|
|
$keanggotaan = $kerawanan->keanggotaan_awal;
|
|
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
|
|
}
|
|
|
|
// Batas bawah dan batas atas dari fungsi keanggotaan
|
|
$batasBawah = $minRule * ($keanggotaanAkhir - $keanggotaan) + $keanggotaan;
|
|
$batasAtas = $kerawanan->keanggotaan_akhir;
|
|
|
|
// Menghitung luas
|
|
$luasA1 = (($batasBawah - $keanggotaan) * $minRule) / 2;
|
|
$luasA2 = ($batasAtas - $batasBawah) * $minRule;
|
|
$totalLuas = $luasA1 + $luasA2;
|
|
|
|
// Menghitung moment
|
|
$momentSatu = (0.05 / 3) * pow($batasBawah, 3) - (3.5 / 2) * pow($batasBawah, 2) - ((0.05 / 3) * pow($keanggotaan, 3) - (3.5 / 2) * pow($keanggotaan, 2));
|
|
$momentDua = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
|
|
$totalMoment = $momentSatu + $momentDua;
|
|
}
|
|
|
|
return [
|
|
'keanggotaan' => $keanggotaan ?? 0,
|
|
'keanggotaanTengah' => $keanggotaanTengah ?? 0,
|
|
'keanggotaanAkhir' => $keanggotaanAkhir ?? 0,
|
|
'batasBawah' => $batasBawah ?? 0,
|
|
'batasAtas' => $batasAtas ?? 0,
|
|
'luasA1' => $luasA1 ?? 0,
|
|
'luasA2' => $luasA2 ?? 0,
|
|
'luasA3' => $luasA3 ?? 0,
|
|
'momentSatu' => $momentSatu ?? 0,
|
|
'momentDua' => $momentDua ?? 0,
|
|
'momentTiga' => $momentTiga ?? 0,
|
|
'totalLuas' => $totalLuas ?? 0,
|
|
'totalMoment' => $totalMoment ?? 0,
|
|
];
|
|
}
|
|
}
|