first commit
This commit is contained in:
1
backend/app.py
Normal file
1
backend/app.py
Normal file
@ -0,0 +1 @@
|
||||
print("ini try")
|
||||
BIN
backend/berat.png
Normal file
BIN
backend/berat.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
17
backend/dataset/dataset.csv
Normal file
17
backend/dataset/dataset.csv
Normal file
@ -0,0 +1,17 @@
|
||||
Usia,Berat,Keliling,Ukuran_batang,Jarak_duri,Keterangan
|
||||
14,753,44,4.5,10.9,Masak
|
||||
18,505,42,4,10,Masak
|
||||
17,750,43,3,10,Masak
|
||||
15,755,44,5,10,Masak
|
||||
14,815,45,4.2,10,Masak
|
||||
17,660,41.5,4.5,10,Masak
|
||||
15,700,42,3,10,Masak
|
||||
16,820,46,4,10,Masak
|
||||
12,850,44,4.5,10,Mentah
|
||||
11,830,42,4.2,10,Mentah
|
||||
10,900,42,3,8.5,Mentah
|
||||
9,900,30,2.5,7.5,Mentah
|
||||
9,850,35,3,7.5,Mentah
|
||||
13,800,40,3.9,9,Mentah
|
||||
11,950,41,3.8,8.5,Mentah
|
||||
13,860,40,4,9.5,Mentah
|
||||
|
13
backend/dataset/himpunan_fuzzy.csv
Normal file
13
backend/dataset/himpunan_fuzzy.csv
Normal file
@ -0,0 +1,13 @@
|
||||
Fungsi,Nama Variabel,Semesta Pembicaraan, Himpunan Fuzzy,Domain
|
||||
Input,Usia,Sini semesta usia,Rendah,domain rendah usia
|
||||
Input,Usia,Sini semesta usia,Tinggi,domain tinggi usia
|
||||
Input,Berat,Sini semesta berat,Rendah,domain rendah berat
|
||||
Input,Berat,Sini semesta berat,Tinggi,domain tinggi berat
|
||||
Input,Keliling,Sini semesta keliling,Rendah,domain rendah keliling
|
||||
Input,Keliling,Sini semesta keliling,Tinggi,domain tinggi keliling
|
||||
Input,Ukurang Batang,Sini semesta ukuran batang,Rendah,domain rendah ukuran batang
|
||||
Input,Ukurang Batang,Sini semesta ukuran batang,Tinggi,domain tinggi ukuran batang
|
||||
Input,Jarak Duri,Sini semesta jarak duri,Rendah,domain rendah jarak duri
|
||||
Input,Jarak Duri,Sini semesta jarak duri,Tinggi,domain tinggi jarak duri
|
||||
Output,Keterangan,Sini semesta keterangan,Rendah (Mentah),domain rendah keterangan
|
||||
Output,Keterangan,Sini semesta keterangan,Tinggi (Masak),domain tinggi keterangan
|
||||
|
33
backend/dataset/rule.csv
Normal file
33
backend/dataset/rule.csv
Normal file
@ -0,0 +1,33 @@
|
||||
No,Rule,Usia,Berat,Keliling,Ukuran Batang,Jarak Duri,Keterangan
|
||||
1,R1,Tinggi,Tinggi,Tinggi,Tinggi,Tinggi,Masak
|
||||
2,R2,Tinggi,Tinggi,Tinggi,Tinggi,Rendah,Masak
|
||||
3,R3,Tinggi,Tinggi,Tinggi,Rendah,Tinggi,Masak
|
||||
4,R4,Tinggi,Tinggi,Tinggi,Rendah,Rendah,Masak
|
||||
5,R5,Tinggi,Tinggi,Rendah,Tinggi,Tinggi,Masak
|
||||
6,R6,Tinggi,Tinggi,Rendah,Tinggi,Rendah,Masak
|
||||
7,R7,Tinggi,Tinggi,Rendah,Rendah,Tinggi,Masak
|
||||
8,R8,Tinggi,Tinggi,Rendah,Rendah,Rendah,Mentah
|
||||
9,R9,Tinggi,Rendah,Tinggi,Tinggi,Tinggi,Masak
|
||||
10,R10,Tinggi,Rendah,Tinggi,Tinggi,Rendah,Masak
|
||||
11,R11,Tinggi,Rendah,Tinggi,Rendah,Tinggi,Masak
|
||||
12,R12,Tinggi,Rendah,Tinggi,Rendah,Rendah,Masak
|
||||
13,R13,Tinggi,Rendah,Rendah,Tinggi,Tinggi,Masak
|
||||
14,R14,Tinggi,Rendah,Rendah,Tinggi,Rendah,Masak
|
||||
15,R15,Tinggi,Rendah,Rendah,Rendah,Tinggi,Masak
|
||||
16,R16,Tinggi,Rendah,Rendah,Rendah,Rendah,Masak
|
||||
17,R17,Rendah,Tinggi,Tinggi,Tinggi,Tinggi,Mentah
|
||||
18,R18,Rendah,Tinggi,Tinggi,Tinggi,Rendah,Mentah
|
||||
19,R19,Rendah,Tinggi,Tinggi,Rendah,Tinggi,Mentah
|
||||
20,R20,Rendah,Tinggi,Tinggi,Rendah,Rendah,Mentah
|
||||
21,R21,Rendah,Tinggi,Rendah,Tinggi,Tinggi,Mentah
|
||||
22,R22,Rendah,Tinggi,Rendah,Tinggi,Rendah,Mentah
|
||||
23,R23,Rendah,Tinggi,Rendah,Rendah,Tinggi,Mentah
|
||||
24,R24,Rendah,Tinggi,Rendah,Rendah,Rendah,Mentah
|
||||
25,R25,Rendah,Rendah,Tinggi,Tinggi,Tinggi,Masak
|
||||
26,R26,Rendah,Rendah,Tinggi,Tinggi,Rendah,Mentah
|
||||
27,R27,Rendah,Rendah,Tinggi,Rendah,Tinggi,Mentah
|
||||
28,R28,Rendah,Rendah,Tinggi,Rendah,Rendah,Mentah
|
||||
29,R29,Rendah,Rendah,Rendah,Tinggi,Tinggi,Mentah
|
||||
30,R30,Rendah,Rendah,Rendah,Tinggi,Rendah,Mentah
|
||||
31,R31,Rendah,Rendah,Rendah,Rendah,Tinggi,Mentah
|
||||
32,R32,Rendah,Rendah,Rendah,Rendah,Rendah,Mentah
|
||||
|
347
backend/fuzzy.py
Normal file
347
backend/fuzzy.py
Normal file
@ -0,0 +1,347 @@
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import csv
|
||||
import skfuzzy as fuzz
|
||||
|
||||
import asyncio
|
||||
|
||||
async def contoh_dulu(data_durian,anggota_usia,anggota_berat,anggota_keliling,anggota_ukuran_batang,anggota_jarak_duri,i):
|
||||
# hitungan fuzzy tsukamoto berdasarkan rule base
|
||||
df = pd.read_csv("dataset/rule.csv")
|
||||
rule_length = len(df.index)
|
||||
list_rule = df
|
||||
hitungan_fuzzy_tsukamoto = []
|
||||
for e in range(i):
|
||||
ket_usia = "Tinggi" if anggota_usia[e][0] < anggota_usia[e][1] else "Rendah"
|
||||
ket_berat = "Tinggi" if anggota_berat[e][0] < anggota_berat[e][1] else "Rendah"
|
||||
ket_keliling = "Tinggi" if anggota_keliling[e][0] <= anggota_keliling[e][1] else "Rendah"
|
||||
ket_ukuran_batang = "Tinggi" if anggota_ukuran_batang[e][0] <= anggota_ukuran_batang[e][1] else "Rendah"
|
||||
ket_jarak_duri = "Tinggi" if anggota_jarak_duri[e][0] < anggota_jarak_duri[e][1] else "Rendah"
|
||||
|
||||
keterangan = None
|
||||
for n in range(rule_length):
|
||||
if str(list_rule.at[n,'Usia']) == ket_usia and str(list_rule.at[n,'Berat']) == ket_berat and str(list_rule.at[n,'Keliling']) == ket_keliling and str(list_rule.at[n,'Ukuran Batang']) == ket_ukuran_batang and str(list_rule.at[n,'Jarak Duri']) == ket_jarak_duri:
|
||||
keterangan = str(list_rule.at[n,'Keterangan'])
|
||||
|
||||
data = {"No" : e, "Usia" : ket_usia, "Berat" : ket_berat, "Keliling" : ket_keliling,
|
||||
"Ukuran Batang" : ket_ukuran_batang, "Jarak Duri" : ket_jarak_duri ,"Variable Linguistic" : keterangan,
|
||||
"Keterangan" : data_durian.at[e,'Keterangan'], "MSE" : 0 if keterangan == data_durian.at[e,'Keterangan'] else 1
|
||||
}
|
||||
hitungan_fuzzy_tsukamoto.append(data)
|
||||
await asyncio.sleep(0.1)
|
||||
return(hitungan_fuzzy_tsukamoto)
|
||||
|
||||
|
||||
def FungsiKeanggotaan(_range, _min , _hi, _nilai):
|
||||
mini = fuzz.interp_membership(_range,_min,_nilai)
|
||||
hi = fuzz.interp_membership(_range,_hi,_nilai)
|
||||
# await asyncio.sleep(0.1)
|
||||
return mini , hi
|
||||
|
||||
def RangeSubjektif(_low, _high, _step):
|
||||
subjektif = np.arange(_low, _high , _step)
|
||||
return subjektif
|
||||
|
||||
def FuzzyShow(_rule, _range_subjektif, _title, _pic_title):
|
||||
lo = fuzz.trapmf(_range_subjektif, _rule[0])
|
||||
hi = fuzz.trapmf(_range_subjektif, _rule[1])
|
||||
|
||||
fig,ax = plt.subplots(nrows=1, figsize=(7,3))
|
||||
ax.plot(_range_subjektif, lo, 'g' , linewidth = 1.5 , label= "Mentah")
|
||||
ax.plot(_range_subjektif, hi, 'r' , linewidth = 1.5 , label= "Masak")
|
||||
|
||||
ax.set_title(_title)
|
||||
ax.legend()
|
||||
|
||||
ax.spines['top'].set_visible(False)
|
||||
ax.spines['right'].set_visible(False)
|
||||
ax.get_xaxis().tick_bottom()
|
||||
ax.get_yaxis().tick_left()
|
||||
|
||||
plt.tight_layout()
|
||||
plt.savefig(_pic_title+'.png')
|
||||
# plt.show()
|
||||
|
||||
|
||||
return lo, hi
|
||||
|
||||
def FuzzyShow1(_rule, _range_subjektif, _title,_pic_title):
|
||||
lo = fuzz.trapmf(_range_subjektif, _rule[0])
|
||||
hi = fuzz.trapmf(_range_subjektif, _rule[1])
|
||||
|
||||
fig,ax = plt.subplots(nrows=1, figsize=(7,3))
|
||||
ax.plot(_range_subjektif, lo, 'r' , linewidth = 1.5 , label= "Masak")
|
||||
ax.plot(_range_subjektif, hi, 'g' , linewidth = 1.5 , label= "Mentah")
|
||||
|
||||
ax.set_title(_title)
|
||||
ax.legend()
|
||||
|
||||
ax.spines['top'].set_visible(False)
|
||||
ax.spines['right'].set_visible(False)
|
||||
ax.get_xaxis().tick_bottom()
|
||||
ax.get_yaxis().tick_left()
|
||||
|
||||
plt.tight_layout()
|
||||
plt.savefig(_pic_title+'.png')
|
||||
# plt.show()
|
||||
|
||||
|
||||
return lo, hi
|
||||
|
||||
def get_average(min,max) :
|
||||
a = (min + max) / 2
|
||||
return a
|
||||
|
||||
async def himpunan_fuzzy(min_usia,mid_usia,max_usia,min_berat,mid_berat,max_berat,min_keliling,mid_keliling,max_keliling,min_ukuran_batang,mid_ukuran_batang,max_ukuran_batang,min_jarak_duri,mid_jarak_duri,max_jarak_duri):
|
||||
a = None
|
||||
himpunan_fuzzy = pd.read_csv("dataset/himpunan_fuzzy.csv")
|
||||
himpunan_fuzzy.loc[0, 'Semesta Pembicaraan'] = f"[ {min_usia} , {max_usia} ]" # Semesta pembicaraan (Rendah) Usia
|
||||
himpunan_fuzzy.loc[1, 'Semesta Pembicaraan'] = f"[ {min_usia} , {max_usia} ]" # Semesta pembicaraan (Tinggi) Usia
|
||||
himpunan_fuzzy.loc[0, 'Domain'] = f"[ {min_usia} , {mid_usia + 0.5} ]" # Domain (Rendah) Usia
|
||||
himpunan_fuzzy.loc[1, 'Domain'] = f"[ {mid_usia - 0.5} , {max_usia} ]" # Domain pembicaraan (Tinggi) Usia
|
||||
|
||||
# Fuzzykasi Berat
|
||||
himpunan_fuzzy.loc[2, 'Semesta Pembicaraan'] = f"[ {min_berat} , {max_berat} ]" # Semesta pembicaraan (Rendah) Berat
|
||||
himpunan_fuzzy.loc[3, 'Semesta Pembicaraan'] = f"[ {min_berat} , {max_berat} ]" # Semesta pembicaraan (Tinggi) Berat
|
||||
himpunan_fuzzy.loc[2, 'Domain'] = f"[ {min_berat} , {mid_berat + 10} ]" # Domain (Rendah) Berat
|
||||
himpunan_fuzzy.loc[3, 'Domain'] = f"[ {mid_berat - 10} , {max_berat} ]" # Domain pembicaraan (Tinggi) Berat
|
||||
|
||||
# Fuzzykasi Keliling
|
||||
himpunan_fuzzy.loc[4, 'Semesta Pembicaraan'] = f"[ {min_keliling} , {max_keliling} ]" # Semesta pembicaraan (Rendah) Keliling
|
||||
himpunan_fuzzy.loc[5, 'Semesta Pembicaraan'] = f"[ {min_keliling} , {max_keliling} ]" # Semesta pembicaraan (Tinggi) Keliling
|
||||
himpunan_fuzzy.loc[4, 'Domain'] = f"[ {min_keliling} , {mid_keliling + 1} ]" # Domain (Rendah) Keliling
|
||||
himpunan_fuzzy.loc[5, 'Domain'] = f"[ {mid_keliling - 1} , {max_keliling} ]" # Domain pembicaraan (Tinggi) Keliling
|
||||
|
||||
# Fuzzykasi Keliling
|
||||
himpunan_fuzzy.loc[4, 'Semesta Pembicaraan'] = f"[ {min_keliling} , {max_keliling} ]" # Semesta pembicaraan (Rendah) Keliling
|
||||
himpunan_fuzzy.loc[5, 'Semesta Pembicaraan'] = f"[ {min_keliling} , {max_keliling} ]" # Semesta pembicaraan (Tinggi) Keliling
|
||||
himpunan_fuzzy.loc[4, 'Domain'] = f"[ {min_keliling} , {mid_keliling + 1} ]" # Domain (Rendah) Keliling
|
||||
himpunan_fuzzy.loc[5, 'Domain'] = f"[ {mid_keliling - 1} , {max_keliling} ]" # Domain pembicaraan (Tinggi) Keliling
|
||||
|
||||
# Fuzzykasi Ukuran Batang
|
||||
himpunan_fuzzy.loc[6, 'Semesta Pembicaraan'] = f"[ {min_ukuran_batang} , {max_ukuran_batang} ]" # Semesta pembicaraan (Rendah) Ukuran Batang
|
||||
himpunan_fuzzy.loc[7, 'Semesta Pembicaraan'] = f"[ {min_ukuran_batang} , {max_ukuran_batang} ]" # Semesta pembicaraan (Tinggi) Ukuran Batang
|
||||
himpunan_fuzzy.loc[6, 'Domain'] = f"[ {min_ukuran_batang} , {mid_ukuran_batang + 0.5} ]" # Domain (Rendah) Ukuran Batang
|
||||
himpunan_fuzzy.loc[7, 'Domain'] = f"[ {mid_ukuran_batang - 0.5} , {max_ukuran_batang} ]" # Domain pembicaraan (Tinggi) Ukuran Batang
|
||||
|
||||
# Fuzzykasi Jarak Duri
|
||||
himpunan_fuzzy.loc[8, 'Semesta Pembicaraan'] = f"[ {min_jarak_duri} , {max_jarak_duri} ]" # Semesta pembicaraan (Rendah) Jarak Duri
|
||||
himpunan_fuzzy.loc[9, 'Semesta Pembicaraan'] = f"[ {min_jarak_duri} , {max_jarak_duri} ]" # Semesta pembicaraan (Tinggi) Jarak Duri
|
||||
himpunan_fuzzy.loc[8, 'Domain'] = f"[ {min_jarak_duri} , {mid_jarak_duri + 0.75} ]" # Domain (Rendah) Jarak Duri
|
||||
himpunan_fuzzy.loc[9, 'Domain'] = f"[ {mid_jarak_duri - 0.25} , {max_jarak_duri} ]" # Domain pembicaraan (Tinggi) Jarak Duri
|
||||
|
||||
# Fuzzykasi Keterangan
|
||||
himpunan_fuzzy.loc[10, 'Semesta Pembicaraan'] = f"[ 0 , 1 ]" # Semesta pembicaraan (Rendah) Keterangan
|
||||
himpunan_fuzzy.loc[11, 'Semesta Pembicaraan'] = f"[ 0 , 1 ]" # Semesta pembicaraan (Tinggi) Keterangan
|
||||
himpunan_fuzzy.loc[10, 'Domain'] = f"[ 0 , 0.5 ]" # Domain (Rendah) Keterangan
|
||||
himpunan_fuzzy.loc[11, 'Domain'] = f"[ 0.5 , 1 ]" # Domain pembicaraan (Tinggi) Keterangan
|
||||
|
||||
# print(himpunan_fuzzy.to_dict())
|
||||
himpunan_fuzzy.to_csv('out.csv',index=False)
|
||||
|
||||
with open("out.csv", "r") as f:
|
||||
reader = csv.DictReader(f)
|
||||
a = list(reader)
|
||||
await asyncio.sleep(0.2)
|
||||
# print(a)
|
||||
return a
|
||||
|
||||
async def fuzzy(status, usianya = None , beratnya = None , kelilingnya = None , ukuran_batangnya = None , jarak_durinya = None):
|
||||
dataset = None
|
||||
data_durian = pd.read_csv("dataset/dataset.csv")
|
||||
# await asyncio.sleep(0.5)
|
||||
with open("dataset/dataset.csv", "r") as f:
|
||||
reader = csv.DictReader(f)
|
||||
dataset = list(reader)
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
# data usia
|
||||
data_usia = pd.DataFrame(data_durian)
|
||||
data_usia = data_usia['Usia'].tolist()
|
||||
_data_usia = data_usia
|
||||
min_usia = min(data_usia) - 1
|
||||
max_usia = max(data_usia) +1
|
||||
mid_usia =np.median(data_usia)
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
# data berat
|
||||
data_berat = pd.DataFrame(data_durian)
|
||||
data_berat = data_berat['Berat'].tolist()
|
||||
_data_berat = data_berat
|
||||
min_berat = min(data_berat) - 50
|
||||
max_berat = max(data_berat) + 50
|
||||
mid_berat =np.median(data_berat)
|
||||
|
||||
# data keliling
|
||||
data_keliling = pd.DataFrame(data_durian)
|
||||
data_keliling = data_keliling['Keliling'].tolist()
|
||||
_data_keliling = data_keliling
|
||||
min_keliling = min(data_keliling) - 1
|
||||
max_keliling = max(data_keliling) + 1
|
||||
# mid_keliling = get_average(min_keliling,max_keliling) #42.0
|
||||
mid_keliling =np.median(data_keliling)
|
||||
|
||||
# data ukuran batang
|
||||
data_ukuran_batang = pd.DataFrame(data_durian)
|
||||
data_ukuran_batang = data_ukuran_batang['Ukuran_batang'].tolist()
|
||||
_data_ukuran_batang = data_ukuran_batang
|
||||
min_ukuran_batang = min(data_ukuran_batang) - 0.5
|
||||
max_ukuran_batang = max(data_ukuran_batang) + 0.5
|
||||
# mid_ukuran_batang = get_average(min_ukuran_batang,max_ukuran_batang) #4.0
|
||||
mid_ukuran_batang = np.median(data_ukuran_batang)
|
||||
|
||||
# data jarak duri
|
||||
data_jarak_duri = pd.DataFrame(data_durian)
|
||||
data_jarak_duri = data_jarak_duri['Jarak_duri'].tolist()
|
||||
_data_jarak_duri = data_jarak_duri
|
||||
# print(data_jarak_duri)
|
||||
min_jarak_duri = min(data_jarak_duri) - 0.5
|
||||
max_jarak_duri = max(data_jarak_duri) + 0.5
|
||||
mid_jarak_duri = get_average(min_jarak_duri,max_jarak_duri)#1.0
|
||||
|
||||
|
||||
var_himpunan_fuzzy = await himpunan_fuzzy(min_usia,mid_usia,max_usia,min_berat,mid_berat,max_berat,min_keliling,mid_keliling,max_keliling,min_ukuran_batang,mid_ukuran_batang,max_ukuran_batang,min_jarak_duri,mid_jarak_duri,max_jarak_duri)
|
||||
|
||||
|
||||
# fuzzy untuk field usia
|
||||
x_usia = RangeSubjektif(min_usia , max_usia , 1)
|
||||
r_usia = np.array([
|
||||
[min_usia,min_usia,mid_usia,mid_usia],
|
||||
[mid_usia,mid_usia,max_usia,max_usia]
|
||||
])
|
||||
lo_usia , hi_usia = FuzzyShow(r_usia , x_usia, 'Umur (minggu)',"usia")
|
||||
|
||||
|
||||
# fuzzy untuk field berat
|
||||
x_berat = RangeSubjektif(min_berat , max_berat , 1)
|
||||
r_berat = np.array([
|
||||
[min_berat,min_berat,mid_berat,mid_berat+10],
|
||||
[mid_berat,mid_berat+10,max_berat,max_berat]
|
||||
])
|
||||
lo_berat , hi_berat = FuzzyShow1(r_berat , x_berat, 'Berat (kg)', "berat")
|
||||
|
||||
# fuzzy untuk field keliling
|
||||
x_keliling = RangeSubjektif(min_keliling , max_keliling , 1)
|
||||
r_keliling = np.array([
|
||||
[min_keliling,min_keliling,mid_keliling,mid_keliling],
|
||||
[mid_keliling,mid_keliling,max_keliling,max_keliling]
|
||||
])
|
||||
lo_keliling , hi_keliling = FuzzyShow(r_keliling , x_keliling, 'Keliling (cm)', "keliling")
|
||||
|
||||
# fuzzy untuk field ukuran batang
|
||||
x_ukuran_batang = RangeSubjektif(min_ukuran_batang , max_ukuran_batang , 1)
|
||||
r_ukuran_batang = np.array([
|
||||
[min_ukuran_batang,min_ukuran_batang,mid_ukuran_batang,mid_ukuran_batang],
|
||||
[mid_ukuran_batang,mid_ukuran_batang,max_ukuran_batang,max_ukuran_batang]
|
||||
])
|
||||
lo_ukuran_batang , hi_ukuran_batang = FuzzyShow(r_ukuran_batang , x_ukuran_batang, 'Keliling (cm)', "ukuran_batang")
|
||||
|
||||
# fuzzy untuk field jarak duri
|
||||
x_jarak_duri = RangeSubjektif(min_jarak_duri , max_jarak_duri , 1)
|
||||
r_jarak_duri = np.array([
|
||||
[min_jarak_duri,min_jarak_duri,mid_jarak_duri,mid_jarak_duri],
|
||||
[mid_jarak_duri,mid_jarak_duri,max_jarak_duri,max_jarak_duri]
|
||||
])
|
||||
lo_jarak_duri , hi_jarak_duri = FuzzyShow(r_jarak_duri , x_jarak_duri, 'Jarak Duri (mm)', "jarak_duri")
|
||||
|
||||
|
||||
# Keanggotaan untuk usia
|
||||
i = 0
|
||||
anggota_usia = []
|
||||
for usia in _data_usia:
|
||||
ini_dia = FungsiKeanggotaan(x_usia,lo_usia,hi_usia,usia)
|
||||
|
||||
anggota_usia.append(ini_dia)
|
||||
i = i+1
|
||||
# print(anggota_usia)
|
||||
|
||||
# Keanggotaan untuk berat
|
||||
anggota_berat = []
|
||||
for berat in _data_berat:
|
||||
ini_dia = FungsiKeanggotaan(x_berat,lo_berat,hi_berat,berat)
|
||||
anggota_berat.append(ini_dia)
|
||||
|
||||
# Keanggotaan untuk keliling
|
||||
anggota_keliling = []
|
||||
for keliling in _data_keliling:
|
||||
ini_dia = FungsiKeanggotaan(x_keliling,lo_keliling,hi_keliling,keliling)
|
||||
anggota_keliling.append(ini_dia)
|
||||
|
||||
# Keanggotaan untuk ukuran batang
|
||||
anggota_ukuran_batang = []
|
||||
for ukuran_batang in _data_ukuran_batang:
|
||||
ini_dia = FungsiKeanggotaan(x_ukuran_batang,lo_ukuran_batang,hi_ukuran_batang,ukuran_batang)
|
||||
# print(ini_dia)
|
||||
anggota_ukuran_batang.append(ini_dia)
|
||||
|
||||
# Keanggotaan untuk jarak duri
|
||||
anggota_jarak_duri = []
|
||||
for jarak_duri in _data_jarak_duri:
|
||||
ini_dia = FungsiKeanggotaan(x_jarak_duri,lo_jarak_duri,hi_jarak_duri,jarak_duri)
|
||||
anggota_jarak_duri.append(ini_dia)
|
||||
|
||||
rule_base = None
|
||||
with open("dataset/rule.csv", "r") as f:
|
||||
reader = csv.DictReader(f)
|
||||
rule_base = list(reader)
|
||||
|
||||
|
||||
keanggotaannya = await contoh_dulu(data_durian,anggota_usia,anggota_berat,anggota_keliling,anggota_ukuran_batang,anggota_jarak_duri,i)
|
||||
|
||||
# print(keanggotaannya)
|
||||
data_usia = {'min':min_usia, 'max':max_usia}
|
||||
data_berat = {'min':min_berat, 'max':max_berat}
|
||||
data_keliling = {'min':min_keliling, 'max':max_keliling}
|
||||
data_ukuran_batang = {'min':min_ukuran_batang, 'max':max_ukuran_batang}
|
||||
data_jarak_duri = {'min':min_jarak_duri, 'max':max_jarak_duri}
|
||||
detail_attribut = {'usia':data_usia, 'berat':data_berat, 'keliling':data_keliling, 'ukuran_batang':data_ukuran_batang, 'jarak_duri':data_jarak_duri}
|
||||
|
||||
if(status == 'ambil_dataset'):
|
||||
context = {'detail_attribute':detail_attribut, 'rule_base':rule_base, 'keanggotaan':keanggotaannya, 'dataset' : dataset, 'himpunan_fuzzy' : var_himpunan_fuzzy}
|
||||
|
||||
elif (status == 'load_fuzzy'):
|
||||
def hitungan_keterangan(usia,berat,keliling,ukuran_batang,jarak_duri):
|
||||
df = pd.read_csv("dataset/rule.csv")
|
||||
rule_length = len(df.index)
|
||||
list_rule = df
|
||||
keterangan = None
|
||||
ket_usia = "Tinggi" if usia[0] < usia[1] else "Rendah"
|
||||
ket_berat = "Tinggi" if berat[0] < berat[1] else "Rendah"
|
||||
ket_keliling = "Tinggi" if keliling[0] <= keliling[1] else "Rendah"
|
||||
ket_ukuran_batang = "Tinggi" if ukuran_batang[0] <= ukuran_batang[1] else "Rendah"
|
||||
ket_jarak_duri = "Tinggi" if jarak_duri[0] < jarak_duri[1] else "Rendah"
|
||||
for n in range(rule_length):
|
||||
if str(list_rule.at[n,'Usia']) == ket_usia and str(list_rule.at[n,'Berat']) == ket_berat and str(list_rule.at[n,'Keliling']) == ket_keliling and str(list_rule.at[n,'Ukuran Batang']) == ket_ukuran_batang and str(list_rule.at[n,'Jarak Duri']) == ket_jarak_duri:
|
||||
keterangan = str(list_rule.at[n,'Keterangan'])
|
||||
break
|
||||
return keterangan
|
||||
|
||||
usia = usianya
|
||||
berat = beratnya
|
||||
keliling = kelilingnya
|
||||
ukuran_batang = ukuran_batangnya
|
||||
jarak_duri = jarak_durinya
|
||||
keanggotaan_usia = FungsiKeanggotaan(x_usia,lo_usia,hi_usia,usia)
|
||||
print(keanggotaan_usia)
|
||||
keanggotaan_berat = FungsiKeanggotaan(x_berat,lo_berat,hi_berat,berat)
|
||||
print(keanggotaan_berat)
|
||||
keanggotaan_keliling = FungsiKeanggotaan(x_keliling,lo_keliling,hi_keliling,keliling)
|
||||
print(keanggotaan_keliling)
|
||||
keanggotaan_ukuran_batang = FungsiKeanggotaan(x_ukuran_batang,lo_ukuran_batang,hi_ukuran_batang,ukuran_batang)
|
||||
print(keanggotaan_ukuran_batang)
|
||||
keanggotaan_jarak_duri =FungsiKeanggotaan(x_jarak_duri,lo_jarak_duri,hi_jarak_duri,jarak_duri)
|
||||
print(keanggotaan_jarak_duri)
|
||||
datanya = hitungan_keterangan(keanggotaan_usia,keanggotaan_berat,keanggotaan_keliling,keanggotaan_ukuran_batang,keanggotaan_jarak_duri)
|
||||
context = datanya
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# hitungan fuzzy tsukamoto berdasarkan data latih
|
||||
|
||||
return context
|
||||
BIN
backend/jarak_duri.png
Normal file
BIN
backend/jarak_duri.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
backend/keliling.png
Normal file
BIN
backend/keliling.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
67
backend/main.py
Normal file
67
backend/main.py
Normal file
@ -0,0 +1,67 @@
|
||||
# from typing import Optional
|
||||
import json
|
||||
import os
|
||||
from fastapi import FastAPI, Form, UploadFile , File , Request,HTTPException
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fuzzy import fuzzy
|
||||
# import asyncio
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
# create the fastapi api
|
||||
@app.get("/")
|
||||
async def read_root():
|
||||
dataset = await fuzzy("ambil_dataset")
|
||||
# dataset.update({"image_usia":FileResponse(image_usia)})
|
||||
return dataset
|
||||
|
||||
# create post request
|
||||
@app.post("/")
|
||||
async def read_root_post(request: Request):
|
||||
body = await request.form()
|
||||
if body:
|
||||
# check if body['data'] is not empty and not None
|
||||
if body['data'] is not None and body['data'] != "":
|
||||
json_data = json.loads(body['data'])
|
||||
|
||||
datanya = await fuzzy("load_fuzzy", json_data['usia'], json_data['berat'], json_data['keliling'], json_data['ukuran_batang'], json_data['jarak_duri'])
|
||||
# print(datanya)
|
||||
return {"ket": datanya}
|
||||
else:
|
||||
raise HTTPException(status_code=400, detail="data is empty")
|
||||
else:
|
||||
# print("ko")
|
||||
raise HTTPException(status_code=404, detail="error")
|
||||
# return {"message": "sini post datanya"}
|
||||
|
||||
# creata a image get
|
||||
@app.get("/image/{image_name}")
|
||||
async def read_image(image_name: str):
|
||||
file_path = os.path.join("", image_name+'.png')
|
||||
if os.path.exists(file_path):
|
||||
return FileResponse(file_path)
|
||||
else:
|
||||
raise HTTPException(status_code=404, detail="File not found")
|
||||
# image = await FileResponse(image_name+".png")
|
||||
# return image
|
||||
|
||||
|
||||
# create post method /fuzzy with form data and return the data
|
||||
# @app.post("/fuzzy")
|
||||
# async def read_item(nama: str = Form(...),
|
||||
# umur: int = Form(...),
|
||||
# alamat: str = Form(...),
|
||||
# foto : UploadFile = File(...)):
|
||||
# return {"nama": nama, "umur": umur, "alamat": alamat, "foto": foto}
|
||||
|
||||
13
backend/out.csv
Normal file
13
backend/out.csv
Normal file
@ -0,0 +1,13 @@
|
||||
Fungsi,Nama Variabel,Semesta Pembicaraan, Himpunan Fuzzy,Domain
|
||||
Input,Usia,"[ 8 , 19 ]",Rendah,"[ 8 , 14.0 ]"
|
||||
Input,Usia,"[ 8 , 19 ]",Tinggi,"[ 13.0 , 19 ]"
|
||||
Input,Berat,"[ 455 , 1000 ]",Rendah,"[ 455 , 827.5 ]"
|
||||
Input,Berat,"[ 455 , 1000 ]",Tinggi,"[ 807.5 , 1000 ]"
|
||||
Input,Keliling,"[ 29.0 , 47.0 ]",Rendah,"[ 29.0 , 43.0 ]"
|
||||
Input,Keliling,"[ 29.0 , 47.0 ]",Tinggi,"[ 41.0 , 47.0 ]"
|
||||
Input,Ukurang Batang,"[ 2.0 , 5.5 ]",Rendah,"[ 2.0 , 4.5 ]"
|
||||
Input,Ukurang Batang,"[ 2.0 , 5.5 ]",Tinggi,"[ 3.5 , 5.5 ]"
|
||||
Input,Jarak Duri,"[ 7.0 , 11.4 ]",Rendah,"[ 7.0 , 9.95 ]"
|
||||
Input,Jarak Duri,"[ 7.0 , 11.4 ]",Tinggi,"[ 8.95 , 11.4 ]"
|
||||
Output,Keterangan,"[ 0 , 1 ]",Rendah (Mentah),"[ 0 , 0.5 ]"
|
||||
Output,Keterangan,"[ 0 , 1 ]",Tinggi (Masak),"[ 0.5 , 1 ]"
|
||||
|
BIN
backend/requirements.txt
Normal file
BIN
backend/requirements.txt
Normal file
Binary file not shown.
BIN
backend/ukuran_batang.png
Normal file
BIN
backend/ukuran_batang.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
backend/usia.png
Normal file
BIN
backend/usia.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user