def __init__(self, attributes, decisions, parameters, n=3): self.attributes = attributes self.decisions = decisions self.p = self.normalizeParameters(parameters) self.idomain = linspace(-1.0, 1.0, 1001) self.odomain = linspace( 0.0, 1.0, 1001) self.att1_s1 = IT2FS_RGaussian_UncertStd(self.idomain, params=[self.p[0], 0.25, 0.05, 1.0]) self.att1_s2 = IT2FS_Gaussian_UncertStd(self.idomain, params=[self.p[1], 0.25, 0.05, 1.0]) self.att1_s3 = IT2FS_LGaussian_UncertStd(self.idomain, params=[self.p[2], 0.25, 0.05, 1.0]) self.ATT1_SETS = [self.att1_s1, self.att1_s2, self.att1_s3] self.att2_s1 = IT2FS_RGaussian_UncertStd(self.idomain, params=[self.p[3], 0.25, 0.05, 1.0]) self.att2_s2 = IT2FS_Gaussian_UncertStd(self.idomain, params=[self.p[4], 0.25, 0.05, 1.0]) self.att2_s3 = IT2FS_LGaussian_UncertStd(self.idomain, params=[self.p[5], 0.25, 0.05, 1.0]) self.ATT2_SETS = [self.att2_s1, self.att2_s2, self.att2_s3] self.att3_s1 = IT2FS_RGaussian_UncertStd(self.idomain, params=[self.p[6], 0.25, 0.05, 1.0]) self.att3_s2 = IT2FS_Gaussian_UncertStd(self.idomain, params=[self.p[7], 0.25, 0.05, 1.0]) self.att3_s3 = IT2FS_LGaussian_UncertStd(self.idomain, params=[self.p[8], 0.25, 0.05, 1.0]) self.ATT3_SETS = [self.att3_s1, self.att3_s2, self.att3_s3] self.deci_s1 = IT2FS_RGaussian_UncertStd(self.odomain, params=[self.p[9], 0.25, 0.05, 1.0]) self.deci_s2 = IT2FS_LGaussian_UncertStd(self.odomain, params=[self.p[10], 0.25, 0.05, 1.0]) self.DECI_SETS = [self.deci_s1, self.deci_s2] self.DM = IT2Mamdani(product_t_norm, probabilistic_sum_s_norm) self.DM.add_input_variable("ATT1") self.DM.add_input_variable("ATT2") self.DM.add_input_variable("ATT3") self.DM.add_output_variable("DECI") for i in range(3): for j in range(3): for k in range(3): self.DM.add_rule([("ATT1", self.ATT1_SETS[i]), ("ATT2", self.ATT2_SETS[j]), ("ATT3", self.ATT3_SETS[k])], [("DECI", self.DECI_SETS[int(self.p[11 + i * 9 + j * 3 + k])])])
def IT2FL_v2_fun(x): # print("chenggong") domain = linspace(-1, 1., 100) NB = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) NS = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) MM = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) PS = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) PB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) # IT2FS_plot(NB, NS, MM,PS,PB, legends=["NB", "NS", "NN","PS","PB"], filename="v1_input_$y") LB = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) LS = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) ZO = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) RS = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) RB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) # IT2FS_plot(GB,GS,ZO,BS,BB, legends=["GB", "GS", "ZO","BS","BB"], filename="V1_output") #输入和输出都只有一个,输入为y方向的偏离值,输出为速度大小即前进或者后退的快慢 myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_output_variable("y1") myIT2FLS.add_rule([("x1", NB)], [("y1", LB)]) myIT2FLS.add_rule([("x1", NS)], [("y1", LS)]) myIT2FLS.add_rule([("x1", MM)], [("y1", ZO)]) myIT2FLS.add_rule([("x1", PS)], [("y1", RS)]) myIT2FLS.add_rule([("x1", PB)], [("y1", RB)]) it2out, tr = myIT2FLS.evaluate({"x1": x}, min_t_norm, max_s_norm, domain) # it2out["y1"].plot(filename="y1_out") # TR_plot(domain, tr["y1"], filename="y1_tr") print("v2_output:", crisp(tr["y1"])) if crisp(tr["y1"]) < 0: print("速度方向:左转", crisp(tr["y1"]) * 90) elif crisp(tr["y1"]) == 0: print("速度方向:0") else: print("速度方向:右转", crisp(tr["y1"]) * 90) return (crisp(tr["y1"]) * 90)
def IT2FL_fun(x, y): # print("chenggong") domain = linspace(0., 1., 100) # domain = linspace(-1., 1., 100) Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) Medium = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) # IT2FS_plot(Small, Medium, Large, legends=["Small", "Medium", "large"], filename="asb(x1,x2)_ex_sets") S = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) M = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) L = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) # IT2FS_plot(S, M, L, legends=["S", "M", "L"], filename="y1_ex_sets") myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") myIT2FLS.add_output_variable("y1") #myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", Small), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Medium)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Large)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Medium)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Large)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Small)], [("y1", M)]) myIT2FLS.add_rule([("x1", Large), ("x2", Medium)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Large)], [("y1", L)]) # it2out, tr = myIT2FLS.evaluate({"x1":0.6, "x2":0.8}, min_t_norm, max_s_norm, domain) it2out, tr = myIT2FLS.evaluate({ "x1": x, "x2": y }, min_t_norm, max_s_norm, domain) # it2out["y1"].plot(filename="y1_out") # TR_plot(domain, tr["y1"], filename="y1_tr") print("v1_output:", crisp(tr["y1"]))
@author: arslan """ from pyit2fls import IT2FLS, IT2FS_Gaussian_UncertStd, IT2FS_plot, \ min_t_norm, max_s_norm, TR_plot, crisp from numpy import linspace #domain = linspace(0., 1., 100) domain = linspace(-1., 1., 100) ''' Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) Medium = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) ''' S = IT2FS_Gaussian_UncertStd(domain, [-1., 0.15, 0.1]) Z = IT2FS_Gaussian_UncertStd(domain, [0., 0.15, 0.1]) B = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(S, Z, B, legends=["S", "Z", "B"], filename="x1_simp_ex_sets") SS = IT2FS_Gaussian_UncertStd(domain, [-1., 0.15, 0.1]) ZZ = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) BB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(SS, ZZ, BB, legends=["SS", "ZZ", "BB"], filename="x2_simp_ex_sets") A1 = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) A2 = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) A3 = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(A1, A2, A3, legends=["A1", "A2", "A3"], filename="y1_simp_ex_sets") B1 = IT2FS_Gaussian_UncertStd(domain, [-1., 0.15, 0.1])
myIT2FLS.add_rule([("x1", Medium), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Medium)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Large)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Small)], [("y1", M)]) myIT2FLS.add_rule([("x1", Large), ("x2", Medium)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Large)], [("y1", L)]) it2out, tr = myIT2FLS.evaluate({"x1":0.8, "x2":0.4}, min_t_norm, max_s_norm, domain) it2out["y1"].plot(filename="y1_out") TR_plot(domain, tr["y1"], filename="y1_tr") print(crisp(tr["y1"])) ''' Small = IT2FS_Gaussian_UncertStd(domain, [-1, 0.25, 0.1]) Medium = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) # Medium = zero_mf(domain) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.25, 0.1]) IT2FS_plot(Small, Medium, Large, legends=["Small", "Medium", "large"], filename="asb(x1,x2)_ex_sets") S = IT2FS_Gaussian_UncertStd(domain, [-1, 0.25, 0.1]) M = IT2FS_Gaussian_UncertStd(domain, [0, 0.001, 0.001]) L = IT2FS_Gaussian_UncertStd(domain, [1., 0.25, 0.1]) IT2FS_plot(S, M, L, legends=["S", "M", "L"], filename="y1_ex_sets") LB = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1])
def cost_func(x): A1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[:3], 1)) A2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[3:6], 1)) A3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[6:9], 1)) B1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[9:12], 1)) B2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[12:15], 1)) B3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[15:18], 1)) C1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[18:21], 1)) C2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[21:24], 1)) C3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[24:27], 1)) O1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[27:30], 1)) O2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[30:33], 1)) O3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[33:36], 1)) it2fls.rules[0] = ([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) it2fls.rules[1] = ([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) it2fls.rules[2] = ([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) err = 0 for L in LearningSet: tr = it2fls.evaluate({ "A": L[0][0], "B": L[0][1], "C": L[0][2] }, min_t_norm, max_s_norm, domain, method="Height", algorithm="EIASC") o = tr["O"] err += ((o[0] + o[1]) / 2 - L[1])**2 return err / len(LearningSet)
def calculate(x, i): A1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[:3], 1)) A2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[3:6], 1)) A3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[6:9], 1)) B1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[9:12], 1)) B2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[12:15], 1)) B3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[15:18], 1)) C1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[18:21], 1)) C2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[21:24], 1)) C3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[24:27], 1)) O1 = IT2FS_Gaussian_UncertStd(domain, np.append(x[27:30], 1)) O2 = IT2FS_Gaussian_UncertStd(domain, np.append(x[30:33], 1)) O3 = IT2FS_Gaussian_UncertStd(domain, np.append(x[33:36], 1)) it2fls.rules[0] = ([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) it2fls.rules[1] = ([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) it2fls.rules[2] = ([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) tr = it2fls.evaluate({ "A": i[0], "B": i[1], "C": i[2] }, min_t_norm, max_s_norm, domain, method="Height", algorithm="EIASC") o = tr["O"] return (o[0] + o[1]) / 2
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed May 15 02:40:21 2019 @author: arslan """ from pyit2fls import IT2FLS, IT2FS_Gaussian_UncertStd, IT2FS_plot, \ min_t_norm, max_s_norm, TR_plot, crisp from numpy import linspace domain = linspace(0., 1., 100) Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1, 1.]) Medium = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1, 1.]) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1, 1.]) IT2FS_plot(Small, Medium, Large, legends=["Small", "Medium", "large"], filename="simp_ex_sets") myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") myIT2FLS.add_output_variable("y1") myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", Small), ("x2", Small)], [("y1", Small), ("y2", Large)])
ax = fig.add_subplot(1, 4, 1, projection="3d") surf = ax.plot_surface(X1, X2, Y12, cmap=cm.coolwarm, linewidth=0, antialiased=False) ax = fig.add_subplot(1, 4, 2, projection="3d") surf = ax.plot_surface(X1, X2, Y22, cmap=cm.coolwarm, linewidth=0, antialiased=False) ax = fig.add_subplot(1, 4, 3, projection="3d") surf = ax.plot_surface(X1, X2, Y32, cmap=cm.coolwarm, linewidth=0, antialiased=False) ax = fig.add_subplot(1, 4, 4, projection="3d") surf = ax.plot_surface(X1, X2, Y42, cmap=cm.coolwarm, linewidth=0, antialiased=False) plt.show() Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1, 1.]) Big = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1, 1.]) # IT2FS_plot(Small, Big, title="Sets", # legends=["Small", "Big"]) myIT2FLS = IT2TSK(product_t_norm, max_s_norm) myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") myIT2FLS.add_output_variable("y1") myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", Small), ("x2", Small)], [("y1", {"const":1., "x1":1., "x2":1.}), ("y2", {"const":1., "x1":2., "x2":-1.})]) myIT2FLS.add_rule([("x1", Small), ("x2", Big)],
from matplotlib.ticker import LinearLocator, FormatStrFormatter # Defining the domain of the input variable x1. domain1 = linspace(1., 2., 100) # Defining the domain of the input variable x2. domain2 = linspace(2., 3., 100) # Defining the domain of the output variable y1. domain3 = linspace(3., 4., 100) # Defining the domain of the output variable y2. domain4 = linspace(4., 5., 100) # Defining the Small set for the input variable x1. Small1 = IT2FS_Gaussian_UncertStd(domain1, [1., 0.15, 0.05, 1.]) # Defining the Small set for the input variable x2. Small2 = IT2FS_Gaussian_UncertStd(domain2, [2., 0.15, 0.05, 1.]) # Defining the Medium set for the input variable x1. Medium1 = IT2FS_Gaussian_UncertStd(domain1, [1.5, 0.15, 0.05, 1.]) # Defining the Medium set for the input variable x2. Medium2 = IT2FS_Gaussian_UncertStd(domain2, [2.5, 0.15, 0.05, 1.]) # Defining the Large set for the input variable x1. Large1 = IT2FS_Gaussian_UncertStd(domain1, [2., 0.15, 0.05, 1.]) # Defining the Large set for the input variable x1. Large2 = IT2FS_Gaussian_UncertStd(domain2, [3., 0.15, 0.05, 1.])
check_set=True) IT2FS_plot(Const, Tri, legends=["Const Set", "Triangular Set"]) IT2FS_plot(RTri, LTri, legends=["Right Triangular Set", "Left Triangular Set"]) Trapezoid = IT2FS(domain, trapezoid_mf, [0.1, 0.35, 0.65, 0.9, 1.0], trapezoid_mf, [0.2, 0.4, 0.6, 0.8, 0.8], check_set=True) Trapezoid.plot(legend_text="Trapezoid IT2FS") Gaussian = IT2FS(domain, gaussian_mf, [0.5, 0.1, 1.0], gaussian_mf, [0.5, 0.05, 0.8], check_set=True) Gaussian.plot(legend_text="Gaussian IT2FS") Gaussian_UncertMean = IT2FS_Gaussian_UncertMean(domain, [0.5, 0.1, 0.1, 1.]) Gaussian_UncertMean.plot(legend_text="Gaussian IT2FS with Uncertain Mean") Gaussian_UncertStd = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.1, 0.05, 0.75]) Gaussian_UncertStd.plot(legend_text="Gaussian IT2FS with Uncertain Std") RGaussian_UncertStd = R_IT2FS_Gaussian_UncertStd(domain, [0.5, 0.1, 0.05, 0.8]) RGaussian_UncertStd.plot(legend_text="Right Gaussian IT2FS with Uncertain Std") LGaussian_UncertStd = L_IT2FS_Gaussian_UncertStd(domain, [0.5, 0.1, 0.05, 0.8]) LGaussian_UncertStd.plot(legend_text="Left Gaussian IT2FS with Uncertain Std")
tri_mf, [0, 0.5, 1., 1.], tri_mf, [0.1, 0.5, 0.9, 0.8], ) Medium.plot(filename="Medium") Large = IT2FS( domain, tri_mf, [0, 0.5, 1., 1.], tri_mf, [0.1, 0.5, 0.9, 0.8], ) Large.plot(filename="Large") S = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) M = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) L = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(S, M, L, legends=["S", "M", "L"], filename="y1_ex_sets") myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") myIT2FLS.add_output_variable("y1") #myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", Small), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Medium)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Large)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Small)], [("y1", S)])
myIT2FLS.add_rule([("x1", Medium), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Medium)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Large)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Small)], [("y1", M)]) myIT2FLS.add_rule([("x1", Large), ("x2", Medium)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Large)], [("y1", L)]) it2out, tr = myIT2FLS.evaluate({"x1":0.8, "x2":0.4}, min_t_norm, max_s_norm, domain) it2out["y1"].plot(filename="y1_out") TR_plot(domain, tr["y1"], filename="y1_tr") print(crisp(tr["y1"])) ''' NB = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) NS = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) ZO= IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) PS = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) PB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(NB, NS, ZO,PS,PB, legends=["NB", "NS", "ZO","PS","PB"], filename="asb(x1,x2)_ex_sets") LVB = IT2FS_Gaussian_UncertStd(domain, [-0.875, 0.15, 0.1]) LB = IT2FS_Gaussian_UncertStd(domain, [-0.625, 0.15, 0.1]) LS= IT2FS_Gaussian_UncertStd(domain, [-0.375, 0.15, 0.1]) LVS = IT2FS_Gaussian_UncertStd(domain, [-0.125, 0.15, 0.1]) Z = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) RVS = IT2FS_Gaussian_UncertStd(domain, [0.125, 0.15, 0.1]) RS = IT2FS_Gaussian_UncertStd(domain, [0.375, 0.15, 0.1]) RB= IT2FS_Gaussian_UncertStd(domain, [0.625, 0.15, 0.1]) RVB = IT2FS_Gaussian_UncertStd(domain, [0.875, 0.15, 0.1])
def IT2FL_v2(x,y): #domain = linspace(0., 1., 100) domain = linspace(-1., 1., 100) ''' Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) Medium = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(Small, Medium, Large, legends=["Small", "Medium", "large"], filename="asb(x1,x2)_ex_sets") S = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) M = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) L = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(S, M, L, legends=["S", "M", "L"], filename="y1_ex_sets") myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") myIT2FLS.add_output_variable("y1") #myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", Small), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Medium)], [("y1", S)]) myIT2FLS.add_rule([("x1", Small), ("x2", Large)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Small)], [("y1", S)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Medium)], [("y1", M)]) myIT2FLS.add_rule([("x1", Medium), ("x2", Large)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Small)], [("y1", M)]) myIT2FLS.add_rule([("x1", Large), ("x2", Medium)], [("y1", L)]) myIT2FLS.add_rule([("x1", Large), ("x2", Large)], [("y1", L)]) it2out, tr = myIT2FLS.evaluate({"x1":0.8, "x2":0.4}, min_t_norm, max_s_norm, domain) it2out["y1"].plot(filename="y1_out") TR_plot(domain, tr["y1"], filename="y1_tr") print(crisp(tr["y1"])) ''' NB = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) NS = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) ZO= IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) PS = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) PB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) # IT2FS_plot(NB, NS, ZO,PS,PB, legends=["NB", "NS", "ZO","PS","PB"], filename="asb(x1,x2)_ex_sets") LVB = IT2FS_Gaussian_UncertStd(domain, [-0.875, 0.15, 0.1]) LB = IT2FS_Gaussian_UncertStd(domain, [-0.625, 0.15, 0.1]) LS= IT2FS_Gaussian_UncertStd(domain, [-0.375, 0.15, 0.1]) LVS = IT2FS_Gaussian_UncertStd(domain, [-0.125, 0.15, 0.1]) Z = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) RVS = IT2FS_Gaussian_UncertStd(domain, [0.125, 0.15, 0.1]) RS = IT2FS_Gaussian_UncertStd(domain, [0.375, 0.15, 0.1]) RB= IT2FS_Gaussian_UncertStd(domain, [0.625, 0.15, 0.1]) RVB = IT2FS_Gaussian_UncertStd(domain, [0.875, 0.15, 0.1]) # IT2FS_plot(LVB, LB, LS,LVS,Z,RVS,RS,RB,RVB, legends=["LVB", "LB", "LS","LVS","Z","RVS","RS","RB","RVB"], filename="y2_ex_sets") myIT2FLS = IT2FLS() myIT2FLS.add_input_variable("x1") myIT2FLS.add_input_variable("x2") #myIT2FLS.add_output_variable("y1") myIT2FLS.add_output_variable("y2") myIT2FLS.add_rule([("x1", NB), ("x2", NB)], [("y2", LS)]) myIT2FLS.add_rule([("x1", NB), ("x2", NS)], [("y2", LS)]) myIT2FLS.add_rule([("x1", NB), ("x2", ZO)], [("y2", LS)]) myIT2FLS.add_rule([("x1", NB), ("x2", PS)], [("y2", LB)]) myIT2FLS.add_rule([("x1", NB), ("x2", PB)], [("y2", LVB)]) myIT2FLS.add_rule([("x1", NS), ("x2", NB)], [("y2", LVS)]) myIT2FLS.add_rule([("x1", NS), ("x2", NS)], [("y2", LS)]) myIT2FLS.add_rule([("x1", NS), ("x2", ZO)], [("y2", LS)]) myIT2FLS.add_rule([("x1", NS), ("x2", PS)], [("y2", LVB)]) myIT2FLS.add_rule([("x1", NS), ("x2", PB)], [("y2", LVB)]) myIT2FLS.add_rule([("x1", ZO), ("x2", NB)], [("y2", Z)]) myIT2FLS.add_rule([("x1", ZO), ("x2", NS)], [("y2", Z)]) myIT2FLS.add_rule([("x1", ZO), ("x2", ZO)], [("y2", Z)]) myIT2FLS.add_rule([("x1", ZO), ("x2", PS)], [("y2", LVB)]) myIT2FLS.add_rule([("x1", ZO), ("x2", PB)], [("y2", LVB)]) myIT2FLS.add_rule([("x1", PS), ("x2", NB)], [("y2", RVS)]) myIT2FLS.add_rule([("x1", PS), ("x2", NS)], [("y2", RS)]) myIT2FLS.add_rule([("x1", PS), ("x2", ZO)], [("y2", RB)]) myIT2FLS.add_rule([("x1", PS), ("x2", PS)], [("y2", RVB)]) myIT2FLS.add_rule([("x1", PS), ("x2", PB)], [("y2", RVB)]) myIT2FLS.add_rule([("x1", PB), ("x2", NB)], [("y2", RS)]) myIT2FLS.add_rule([("x1", PB), ("x2", NS)], [("y2", RS)]) myIT2FLS.add_rule([("x1", PB), ("x2", ZO)], [("y2", RB)]) myIT2FLS.add_rule([("x1", PB), ("x2", PS)], [("y2", RB)]) myIT2FLS.add_rule([("x1", PB), ("x2", PB)], [("y2", RVB)]) it2out, tr = myIT2FLS.evaluate({"x1":x, "x2":y}, min_t_norm, max_s_norm, domain) print("v2_output:",crisp(tr["y2"]))
def calculate(x, i): A1 = IT2FS_Gaussian_UncertStd(domain, x[:3]) A2 = IT2FS_Gaussian_UncertStd(domain, x[3:6]) A3 = IT2FS_Gaussian_UncertStd(domain, x[6:9]) B1 = IT2FS_Gaussian_UncertStd(domain, x[9:12]) B2 = IT2FS_Gaussian_UncertStd(domain, x[12:15]) B3 = IT2FS_Gaussian_UncertStd(domain, x[15:18]) C1 = IT2FS_Gaussian_UncertStd(domain, x[18:21]) C2 = IT2FS_Gaussian_UncertStd(domain, x[21:24]) C3 = IT2FS_Gaussian_UncertStd(domain, x[24:27]) O1 = IT2FS_Gaussian_UncertStd(domain, x[27:30]) O2 = IT2FS_Gaussian_UncertStd(domain, x[30:33]) O3 = IT2FS_Gaussian_UncertStd(domain, x[33:36]) it2fls = IT2FLS() it2fls.add_input_variable("A") it2fls.add_input_variable("B") it2fls.add_input_variable("C") it2fls.add_output_variable("O") it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) #it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) #it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) #it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) #it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) #it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) #it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) tr = it2fls.evaluate({"A":i[0], "B":i[1], "C":i[2]}, min_t_norm, max_s_norm, domain, method="Height", algorithm="EIASC") o = tr["O"] return (o[0] + o[1]) / 2
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed May 15 02:40:21 2019 @author: arslan """ from pyit2fls import IT2FLS, IT2FS_Gaussian_UncertStd, IT2FS_plot, \ min_t_norm, max_s_norm, TR_plot, crisp from pyit2fls import IT2FS, trapezoid_mf, tri_mf, zero_mf from numpy import linspace #domain = linspace(0., 1., 100) domain = linspace(-1., 1., 100) NB = IT2FS_Gaussian_UncertStd(domain, [0, 0.25, 0.05]) IT2FS_plot(NB, filename="1") # IT2FS_plot(NB, NS, PS,PB, legends=["NB", "NS", "PS","PB"], filename="asb(x1,x2)_ex_sets")
def cost_func(x): A1 = IT2FS_Gaussian_UncertStd(domain, x[:3]) A2 = IT2FS_Gaussian_UncertStd(domain, x[3:6]) A3 = IT2FS_Gaussian_UncertStd(domain, x[6:9]) B1 = IT2FS_Gaussian_UncertStd(domain, x[9:12]) B2 = IT2FS_Gaussian_UncertStd(domain, x[12:15]) B3 = IT2FS_Gaussian_UncertStd(domain, x[15:18]) C1 = IT2FS_Gaussian_UncertStd(domain, x[18:21]) C2 = IT2FS_Gaussian_UncertStd(domain, x[21:24]) C3 = IT2FS_Gaussian_UncertStd(domain, x[24:27]) O1 = IT2FS_Gaussian_UncertStd(domain, x[27:30]) O2 = IT2FS_Gaussian_UncertStd(domain, x[30:33]) O3 = IT2FS_Gaussian_UncertStd(domain, x[33:36]) it2fls = IT2FLS() it2fls.add_input_variable("A") it2fls.add_input_variable("B") it2fls.add_input_variable("C") it2fls.add_output_variable("O") it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) #it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) #it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) #it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) #it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) #it2fls.add_rule([("A", A1), ("B", B1), ("C", C1)], [("O", O1)]) #it2fls.add_rule([("A", A2), ("B", B2), ("C", C2)], [("O", O2)]) it2fls.add_rule([("A", A3), ("B", B3), ("C", C3)], [("O", O3)]) err = 0 for L in LearningSet: tr = it2fls.evaluate({"A":L[0][0], "B":L[0][1], "C":L[0][2]}, min_t_norm, max_s_norm, domain, method="Height", algorithm="EIASC") o = tr["O"] err += ((o[0] + o[1]) / 2 - L[1]) ** 2 return err / len(LearningSet)
""" Created on Sun Sep 13 10:24:56 2020 @author: arslan """ from pyit2fls import Mamdani, IT2FS_Gaussian_UncertStd, IT2FS_plot, \ product_t_norm, max_s_norm, crisp from numpy import linspace, random, sin, cos, array domainX1 = linspace(-1., 1., 101) domainX2 = linspace(-1., 1., 101) domainY1 = linspace(-0.5, 1.5, 101) domainY2 = linspace(-0.5, 1.5, 101) X1Small = IT2FS_Gaussian_UncertStd(domainX1, [-1., 0.2, 0.1, 1.]) X1Medium = IT2FS_Gaussian_UncertStd(domainX1, [0., 0.2, 0.1, 1.]) X1Large = IT2FS_Gaussian_UncertStd(domainX1, [1., 0.2, 0.1, 1.]) # IT2FS_plot(X1Small, X1Medium, X1Large) X2Small = IT2FS_Gaussian_UncertStd(domainX2, [-1., 0.2, 0.1, 1.]) X2Medium = IT2FS_Gaussian_UncertStd(domainX2, [0., 0.2, 0.1, 1.]) X2Large = IT2FS_Gaussian_UncertStd(domainX2, [1., 0.2, 0.1, 1.]) # IT2FS_plot(X2Small, X2Medium, X2Large) Y1Small = IT2FS_Gaussian_UncertStd(domainY1, [-0.5, 0.2, 0.1, 1.]) Y1Medium = IT2FS_Gaussian_UncertStd(domainY1, [0.5, 0.2, 0.1, 1.]) Y1Large = IT2FS_Gaussian_UncertStd(domainY1, [1.5, 0.2, 0.1, 1.]) # IT2FS_plot(Y1Small, Y1Medium, Y1Large) Y2Small = IT2FS_Gaussian_UncertStd(domainY2, [-0.5, 0.2, 0.1, 1.])
def u(t): return 1. if t > 1. else 0. def u_dot(t): # return 0 a = 10 return (a if 1. < t < (1. + 1. / a) else 0) # %% Interval Type 2 Fuzzy PID Codes ... domain = linspace(-1., 1., 201) N = IT2FS_Gaussian_UncertStd(domain, [-1., 0.5, 0.1, 1.]) Z = IT2FS_Gaussian_UncertStd(domain, [0., 0.2, 0.025, 1.]) P = IT2FS_Gaussian_UncertStd(domain, [1., 0.5, 0.1, 1.]) IT2FS_plot(N, Z, P, legends=["Negative", "Zero", "Positive"], filename="delay_pid_input_sets") NB = IT2FS_Gaussian_UncertStd(domain, [-1., 0.1, 0.05, 1.]) NM = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.1, 0.05, 1.]) ZZ = IT2FS_Gaussian_UncertStd(domain, [0., 0.1, 0.05, 1.]) PM = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.1, 0.05, 1.]) PB = IT2FS_Gaussian_UncertStd(domain, [1., 0.1, 0.05, 1.]) IT2FS_plot(NB, NM,
@author: arslan """ from pyit2fls import IT2FLS, IT2FS_Gaussian_UncertStd, IT2FS_plot, \ min_t_norm, max_s_norm, TR_plot, crisp from numpy import linspace #domain = linspace(0., 1., 100) domain = linspace(-1., 1., 100) ''' Small = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) Medium = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) Large = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) ''' NS = IT2FS_Gaussian_UncertStd(domain, [-1., 0.15, 0.1]) NB = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) ZO = IT2FS_Gaussian_UncertStd(domain, [0., 0.15, 0.1]) PS = IT2FS_Gaussian_UncertStd(domain, [0.5, 0.15, 0.1]) PB = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(NS, NB, ZO,PS,PB, legends=["NS", "NB", "ZO", "PS", "PB"], filename="simp_ex_sets") A1 = IT2FS_Gaussian_UncertStd(domain, [-1, 0.15, 0.1]) A2 = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1]) A3 = IT2FS_Gaussian_UncertStd(domain, [1., 0.15, 0.1]) IT2FS_plot(A1, A2, A3, legends=["A1", "A2", "A3"], filename="y1_simp_ex_sets") B1 = IT2FS_Gaussian_UncertStd(domain, [-1., 0.15, 0.1]) B2 = IT2FS_Gaussian_UncertStd(domain, [-0.25,0.15, 0.1]) B3 = IT2FS_Gaussian_UncertStd(domain, [-0.5, 0.15, 0.1]) B4 = IT2FS_Gaussian_UncertStd(domain, [0, 0.15, 0.1])