Oct-21-2019, 03:28 AM
hi I have a problem with my app, I tried making an app to determine the condition of the transformer but when it starts, it can't do computing, can anyone help me?
I use the Scikit Fuzzy module
I use the Scikit Fuzzy module
import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl from skfuzzy.control.visualization import FuzzyVariableVisualizer from PyQt5.QtWidgets import QApplication, QDialog from PyQt5.QtCore import QTimer, QDate, Qt from time import strftime import sys from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas import matplotlib.pyplot as plt from Desktop import Ui_DiagnosaTrafo class Fuzzy(QDialog): def __init__(self): super(Fuzzy,self).__init__() self.ui = Ui_DiagnosaTrafo() self.ui.setupUi(self) #set clock timer = QTimer(self) timer.timeout.connect(self.showTime) timer.start(1000) self.ppmMax = 100 self.gasMax = 4 self.ppm_min = [0, 10, 20, 30] self.ppm_max = [80, 85, 90, 100] self.gas_min = [0, 0, 1, 1.5] self.gas_max = [3, 3, 3.5, 4.] self.ui.SET.toggled.connect(self.SET) self.ui.SET.setCheckable(True) self.ui.calculate.toggled.connect(self.calculate) self.ui.calculate.setCheckable(True) def showTime(self): now = QDate.currentDate() date = now.toString(Qt.DefaultLocaleLongDate) waktu = strftime('%H:%M:%S %p') self.ui.dates.setText(date) self.ui.clock.setText(waktu) def SET(self): try : V_ppm_min = float (self.ui.line_ppm_min.text()) except: V_ppm_min = 10.0 try: V_ppm_max = float (self.ui.line_ppm_max.text()) except: V_ppm_max = 100.0 try : V_gas_min = float (self.ui.line_gas_min.text()) except: V_gas_min = 1.0 try: V_gas_max = float (self.ui.line_gas_max.text()) except: V_gas_max = 4.0 try: normal = float (self.ui.line_KNormal.text()) except: normal = 25.0 try: mulai_tinggi = float (self.ui.line_KMulai.text()) except: mulai_tinggi = 50.0 try: tingkat_tinggi = float (self.ui.line_KTingkat.text()) except: tingkat_tinggi = 75.0 try: sangat_tinggi = float (self.ui.line_KSangat.text()) except: sangat_tinggi = 100.0 self.ppm_rendah = [0,0, V_ppm_min] self.ppm_tinggi =[0,0,V_ppm_max] self.gas_rendah = [0,0,V_gas_min] self.gas_tinggi = [0,0,V_gas_max] self.normal = [0,0,normal] self.mulai_tinggi = [0,0, mulai_tinggi] self.tingkat_tinggi = [0,0,tingkat_tinggi] self.sangat_tinggi = [0,0,sangat_tinggi] self.ppm1 = V_ppm_max self.gas1 = V_gas_max self.kondisi = sangat_tinggi #give value to default setting self.ui.lbl_ppm_min.setText('{}'.format(V_ppm_min)) self.ui.lbl_ppm_max.setText('{}'.format(V_ppm_max)) self.ui.lbl_gas_min.setText('{}'.format(V_gas_min)) self.ui.lbl_gas_max.setText('{}'.format(V_gas_max)) self.ui.lbl_kondisi_normal.setText('{}'.format(normal)) self.ui.lbl_kondisi_MTinggi.setText('{}'.format(mulai_tinggi)) self.ui.lbl_kondisi_TTinggi.setText('{}'.format(tingkat_tinggi)) self.ui.lbl_kondisi_STinggi.setText('{}'.format(sangat_tinggi)) def calculate (self): # The universe of variables and membership functions print("X=") ppm = ctrl.Antecedent(np.arange(10, self.ppm1, 1), 'ppm') gas = ctrl.Antecedent(np.arange(1, self.gas1, 1), 'gas') kondisi = ctrl.Consequent(np.arange(0, self.kondisi, 1), 'kondisi') #custom membership function can be built interactive with a familiar ppm['rendah'] = fuzz.trimf(ppm.universe, self.ppm_rendah) ppm['tinggi'] = fuzz.trimf(ppm.universe, self.ppm_tinggi) gas['rendah'] = fuzz.trimf(gas.universe, self.gas_rendah) gas['tinggi'] = fuzz.trimf(gas.universe, self.gas_tinggi) kondisi['normal'] = fuzz.trimf(kondisi.universe, self.normal) kondisi['mulai tinggi'] = fuzz.trimf(kondisi.universe, self.mulai_tinggi) kondisi['tingkat tinggi'] = fuzz.trimf(kondisi.universe, self.tingkat_tinggi) kondisi['sangat tinggi'] = fuzz.trimf(kondisi.universe, self.sangat_tinggi) print("X1= ") """ ============================= DECLARE THE RULES ============================= """ rule1 = ctrl.Rule(ppm['rendah'] & gas['rendah'], kondisi['normal']) rule2 = ctrl.Rule(ppm['rendah'] & gas['tinggi'], kondisi['mulai tinggi']) rule3 = ctrl.Rule(ppm['tinggi'] & gas['rendah'], kondisi['tingkat tinggi']) rule4 = ctrl.Rule(ppm['tinggi'] & gas['tinggi'], kondisi['sangat tinggi']) print("X2= ") kondisi_ctrl = ctrl.ControlSystem( [rule1, rule2, rule3, rule4 ]) condition = ctrl.ControlSystemSimulation(kondisi_ctrl) """ ============================= SIMULATION ============================= Pass inputs to the ControlSystem using Antecedent labels with Pythonic API Note: if you like passing many inputs all at once, use .inputs(dict_of_data) """ try: x_ppm = float (self.ui.line_input_ppm.text()) x_gas = float (self.ui.line_input_gas.text()) condition.input['PPM'] = x_ppm condition.input['GAS'] = x_gas except: condition.input['PPM'] = 0 condition.input['GAS'] = 0 x_ppm = 0 x_gas = 0 print(x_ppm) print(x_gas) condition.compute() self.ui.layout_output.setText("{0:.2f} ".format(condition.output['kondisi'])) #defuzzyfikasi for i in reversed(range(self.ui.layout_1.count())): self.ui.layout_1.itemAt(i).widget().setParent(None) for i in reversed(range(self.ui.layout_2.count())): self.ui.layout_2.itemAt(i).widget().setParent(None) plt.rcParams['figure.constrained_layout.use'] = True a1, b1 = FuzzyVariableVisualizer(ppm).view() a2, b2 = FuzzyVariableVisualizer(gas).view() a3, b3 = FuzzyVariableVisualizer(kondisi).view() b1.axvline(x=x_ppm, linewidth=3, color = 'k') b2.axvline(x=x_gas, linewidth=3, color = 'k') self.ui.canvas1 = FigureCanvas(a1) self.toolbar1 = NavigationToolbar(self.ui.canvas1, self) self.ui.canvas2 = FigureCanvas(a2) self.ui.toolbar2 = NavigationToolbar(self.ui.canvas2, self) self.ui.canvas3 = FigureCanvas(a3) self.toolbar3 = NavigationToolbar(self.ui.canvas3, self) self.ui.layout_1.addWidget(self.ui.canvas1) self.ui.layout_2.addWidget(self.ui.canvas2) a4, b= FuzzyVariableVisualizer(kondisi).view(sim=condition) self.ui.canvas4 = FigureCanvas(a4) self.toolbar4 = NavigationToolbar(self.ui.canvas4, self) self.ui.layout_3.addWidget(self.ui.canvas4) self.ui.layout_3.addWidget(self.toolbar4) kondisi = None condition = None if __name__ == "__main__": app = QApplication(sys.argv) Window = Fuzzy() Window.setWindowTitle("Diagnosa Trafo") Window.show() sys.exit(app.exec_())