def plot_truncnorm_cdf(): import matplotlib.pyplot as plt H = 100. # mm B = 300. # mm fig, axs = plt.subplots(1, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) x = np.linspace(0, 5, 200) t = phuzzy.TruncNorm(alpha0=[1, 5], number_of_alpha_levels=25) p = t.pdf(x) P = t.cdf(x) axs[0].plot(x, p, label="pdf ana", lw=1) axs[1].plot(x, P, label="cdf ana", lw=1) f = phuzzy.FuzzyNumber(alpha0=[1, 2], alpha1=[1.1, 1.4], number_of_alpha_levels=5) f.df = t.df.copy() print(f.df) pf = f.pdf(x) Pf = f.cdf(x) mix_mpl(f) f.plot(show=False, ppf=[0, 0.01, .5, .99, 1]) axs[0].plot(x, pf, label="pdf num", lw=3, c="r", alpha=.5) axs[1].plot(x, Pf, label="cdf num", lw=3, c="r", alpha=.5) axs[0].legend(loc="best") axs[1].legend(loc="best") plt.show()
def plot_xy(x, y, height=100, width=200): """plot two fuzzy numbers :param x: first fuzzy number :param y: second fuzzy number :param height: figure height :param width: figure width :return: fig, axs (1x2) """ if not hasattr(x, "plot"): x = x.copy() mix_mpl(x) if not hasattr(y, "plot"): y = y.copy() mix_mpl(y) fig, axs = plt.subplots(1, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(width / 25.4, height / 25.4)) x.plot(ax=axs[0]) y.plot(ax=axs[1]) fig.tight_layout() return fig, axs
def normal_estimator(): import matplotlib.pyplot as plt H = 100. # mm B = 300. # mm fig, axs = plt.subplots(1, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) alpha0 = [-3, 8] alpha1 = [-1] size = 5000 data = np.random.triangular(alpha0[0], alpha1[0], alpha0[1], size) p0 = phuzzy.Triangle(name="org", alpha0=alpha0, alpha1=alpha1) p = phuzzy.Triangle.from_data(data=data, name="estimate") print(p.df) mix_mpl(p) mix_mpl(p0) p0.plot(ax=axs[1]) p.plot(ax=axs[1], labels=False) print(data.mean()) print(data.shape) p.plot(ax=axs[0]) h = axs[0].hist(data, bins=50, normed=True, alpha=.5) fig.tight_layout() plt.show()
def plot_xy_3d(x, y, height=200, width=200): """plot two fuzzy numbers :param x: first fuzzy number :param y: second fuzzy number :return: fig, axs (2x2) """ if not hasattr(x, "plot"): x = x.copy() mix_mpl(x) if not hasattr(y, "plot"): y = y.copy() mix_mpl(y) fig, axs = plt.subplots(2, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(width / 25.4, height / 25.4)) axx = axs[0, 0] axy = axs[1, 1] axxy = axs[1, 0] ax3d_ = axs[0, 1] axxy.set_xlabel("x") axxy.set_ylabel("y") axx.get_shared_x_axes().join(axx, axxy) axy.get_shared_y_axes().join(axy, axxy) x.plot(ax=axx) y.vplot(ax=axy) for i, xi in x.df.iterrows(): yi = y.df.loc[i] axxy.plot([xi.l, xi.r, xi.r, xi.l, xi.l], [yi.l, yi.l, yi.r, yi.r, yi.l], c="k", alpha=.5, lw=.5, dashes=[2, 2]) fig.tight_layout() bbox = ax3d_.get_position() ax3d = fig.gca(projection='3d') ax3d.set_position(bbox) ax3d_.axis('off') ax3d = plot_3d(x, y, ax=ax3d) axs[0, 1] = ax3d return fig, axs
def test_pow_zero(): # p = phuzzy.Trapezoid(alpha0=[-1, 4], alpha1=[2, 3], number_of_alpha_levels=5, name="p") # y = p ** 0 x = phuzzy.Trapezoid(alpha0=[-1, 4], alpha1=[.5, .8], number_of_alpha_levels=5, name="p") y = x**0 mix_mpl(y) y.plot() print(y.df.values.tolist()) assert np.isclose(y.min(), 1) assert np.isclose(y.max(), 1)
def plot_xy(x, y, show=False, ftype=True): H = 100. # mm B = 300. # mm for i in [x,y]: phm.mix_mpl(i) fig, axs = plt.subplots(1, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) if ftype is True: axs[0].set_title(x.__class__.__name__) axs[1].set_title(y.__class__.__name__) x.plot(ax=axs[0]) y.plot(ax=axs[1]) fig.tight_layout() # fig.savefig("A.png") if show==True: plt.show()
def plot_mul(x, y, z): H = 100. # mm B = 300. # mm for i in [x, y, z]: phm.mix_mpl(i) fig, axs = plt.subplots(1, 3, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) x.plot(ax=axs[0]) y.plot(ax=axs[1]) z.plot(ax=axs[2]) fig.tight_layout() # fig.savefig("A.png") plt.show()
def plot_sub(): H = 100. # mm B = 300. # mm fig, axs = plt.subplots(1, 3, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) x = phuzzy.Trapezoid(alpha0=[0, 4], alpha1=[2, 3], number_of_alpha_levels=5) mix_mpl(x) x.plot(ax=axs[0]) y = phuzzy.TruncNorm(alpha0=[1, 3], number_of_alpha_levels=15, name="y") mix_mpl(y) y.plot(ax=axs[1]) z = x - y z.name = "x-y" mix_mpl(z) z.plot(ax=axs[2]) fig.tight_layout() fig.savefig("x-y.png") plt.show()
def atest_div(): t = phuzzy.TruncNorm(alpha0=[2, 3], alpha1=[], number_of_alpha_levels=15, name="t") print(t) assert len(t.df) == 15 p = phuzzy.Trapezoid(alpha0=[0, 4], alpha1=[2, 3], number_of_alpha_levels=5, name="p") print(p) assert len(p.df) == 5 a = t ** p a = p ** t a.name = "t**p" print(a) print(a.df) mix_mpl(t) mix_mpl(p) mix_mpl(a) t.plot() p.plot() a.plot() print(a.df) # a.df.iloc[10, a.df.columns.get_loc("max")] = 8.5 # a.make_convex() a.name += "!" print(a.df) a.plot(show=True)
def atest_sub(): t = phuzzy.TruncNorm(alpha0=[1, 3], alpha1=[2], number_of_alpha_levels=15, name="t") print(t) assert len(t.df) == 15 p = phuzzy.Trapezoid(alpha0=[1, 4], alpha1=[2, 3], number_of_alpha_levels=5, name="p") print(p) assert len(p.df) == 5 a = t - p a.name = "t-p" print(a) print(a.df) mix_mpl(t) mix_mpl(p) mix_mpl(a) t.plot() p.plot() a.plot() print(a.df) a.df.iloc[10, a.df.columns.get_loc("r")] = 1.5 a.make_convex() a.name += "!" print(a.df) a.plot(show=True)
def plot_op_x(x, show=False, ftype=True): H = 250. # mm B = 300. # mm fig, axs = plt.subplots(3, 3, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) ys = [x, -x, abs(x), x+2, 2+x, x-2, x*2, x/2, x**2] ys[4].name = "2+x" for i, y in enumerate(ys): phm.mix_mpl(y) ax = axs.ravel()[i] y.plot(ax=ax) if ftype is True: ax.set_title(y.__class__.__name__) fig.tight_layout() fig.savefig("operations_%s.png" % x.__class__.__name__) if show==True: plt.show()
def plot_gennorm_mix(): n = 50 p = phuzzy.TruncGenNorm(alpha0=[1, 4], alpha1=[2, 3], number_of_alpha_levels=n, beta=1) p2 = phuzzy.TruncGenNorm(alpha0=[1, 4], alpha1=[2, 3], number_of_alpha_levels=n, beta=2) p10 = phuzzy.TruncGenNorm(alpha0=[1, 4], alpha1=[2, 3], number_of_alpha_levels=n, beta=5) print(p) # print(p.df) # # p.convert_df(5) # print(p.df) mix_mpl(p) mix_mpl(p2) mix_mpl(p10) H = 100. # mm B = 300. # mm fig, axs = plt.subplots(1, 3, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) p.plot(ax=axs[0]) p2.plot(ax=axs[1]) p10.plot(ax=axs[2]) ps = [p, p2, p10] for p, ax in zip(ps, axs): ax.set_title(r"$\beta=%.1f$" % p.beta) fig.tight_layout() fig.savefig("truncgennorm.png") plt.show()
def plot_pow2(): H = 300. # mm B = 300. # mm fig, axs = plt.subplots(3, 3, dpi=90, facecolor='w', edgecolor='k', figsize=(B / 25.4, H / 25.4)) for i in range(3): axs[0, i].get_shared_x_axes().join(axs[0, i], axs[1, i], axs[2, i]) for i in range(1, 3): axs[i, 0].set_xlabel("x") axs[i, 1].set_xlabel("y") axs[i, 2].set_xlabel("x^y") i = 2 axs[i, 0].get_shared_y_axes().join(axs[i, 0], axs[i, 1], axs[i, 2]) x = phuzzy.Trapezoid(alpha0=[0, 4], alpha1=[2, 3], number_of_alpha_levels=5) mix_mpl(x) x.plot(ax=axs[0, 0]) y = phuzzy.TruncNorm(alpha0=[1, 3], number_of_alpha_levels=15, name="y") mix_mpl(y) y.plot(ax=axs[0, 1]) z = x**y z.name = "x^y" mix_mpl(z) z.plot(ax=axs[0, 2]) b = np.linspace(-1, 5, 200) px = x.pdf(b) Px = x.cdf(b) axs[1, 0].fill_between(b, 0, px, alpha=.2) axs[1, 0].plot(b, px, label="pdf", lw=1) axs[2, 0].fill_between(b, 0, Px, alpha=.2) axs[2, 0].plot(b, Px, label="cdf", lw=1) py = y.pdf(b) Py = y.cdf(b) axs[1, 1].fill_between(b, 0, py, alpha=.2) axs[1, 1].plot(b, py, label="pdf", lw=1) axs[2, 1].fill_between(b, 0, Py, alpha=.2) axs[2, 1].plot(b, Py, label="cdf", lw=1) b = np.linspace(z.alpha0["low"], z.alpha0["high"], 200) pz = z.pdf(b) Pz = z.cdf(b) axs[1, 2].fill_between(b, 0, pz, alpha=.2) axs[1, 2].plot(b, pz, label="pdf", lw=1) axs[2, 2].fill_between(b, 0, Pz, alpha=.2) axs[2, 2].plot(b, Pz, label="cdf", lw=1) for i in range(3): axs[2, i].axhline(1, alpha=.4, c="k", lw=.5) # axs[1,i].set_ylabel("pdf") # axs[2,i].set_ylabel("cdf") axs[1, i].annotate('pdf', (0.01, 0.99), xycoords='axes fraction', size=8, ha='left', va='top', textcoords='axes fraction') axs[2, i].annotate('cdf', (0.01, 0.99), xycoords='axes fraction', size=8, ha='left', va='top', textcoords='axes fraction') # axs[1,1].sharex = axs[0,1] # axs[2,1].sharex = axs[0,1] # axs[1,1].share_x_axes(axs[0,1]) for ax in axs.ravel(): ax.set_ylim(0, None) fig.tight_layout() fig.savefig("x**y_pdf_cdf.png") plt.show()
# exact reference solution z = f(x, y) z.name = "z" # create Expression object expr = phuzzy.approx.doe.Expression(designvars=[x, y], function=f, name="f(x,y)") # expr.generate_training_doe(name="train", n=10, method="cc") expr.generate_training_doe(name="train", n=10, method="lhs") expr.eval() z_a = expr.get_fuzzynumber_from_results() expr.fit_model() print(expr.model) # expr.generate_prediction_doe(name="prediction", n=10000, method="lhs") expr.generate_prediction_doe(name="prediction", n=10000, method="meshgrid") z_b = expr.predict(name="z_b") print(z_b) mix_mpl(z_b) fig, axs = phuzzy.mpl.plots.plot_xy(z, z_b) mix_mpl(z) z.plot(axs[1], labels=False) samples = expr.results_training axs[1].scatter(samples.res, samples.alpha) plt.show() # z.plot(show=True)
print("w = {} mm".format(w)) # w = FuzzyNumber(P*L^3/E*48*W*H^3/12.0:[[5.594629603627992, 8.024370049019725], [6.666666666666667, 6.666666666666667]]) mm w_mean = w.mean() dw_l = w_mean - w.min() dw_r = w.max() - w_mean print("w = {:.4g} mm (- {:.4g}|+ {:.4g})".format(w_mean, dw_l, dw_r)) # w = 6.703 mm (- 1.109|+ 1.321) print("w = {:.4g} mm [{:.4g},{:.4g}]".format(w_mean, w.min(), w.max())) # w = 6.703 mm [5.595,8.024] from phuzzy.mpl import mix_mpl import matplotlib.pyplot as plt mix_mpl(I) mix_mpl(w) H_ = 100. # mm B_ = 300. # mm fig, axs = plt.subplots(1, 2, dpi=90, facecolor='w', edgecolor='k', figsize=(B_ / 25.4, H_ / 25.4)) axs[0].axvline(I0, lw=2, alpha=.4, c="r", label="$I_0$") axs[1].axvline(w0, lw=2,
axl.add_collection(pl) pr = PatchCollection([polygon], alpha=1, color=sm.to_rgba(zi.r)) axr.add_collection(pr) axl.plot([xi.l, xi.r, xi.r, xi.l, xi.l], [yi.l, yi.l, yi.r, yi.r, yi.l], c="k", alpha=.5, lw=.5, dashes=[2, 2]) axr.plot([xi.l, xi.r, xi.r, xi.l, xi.l], [yi.l, yi.l, yi.r, yi.r, yi.l], c="k", alpha=.5, lw=.5, dashes=[2, 2]) # # csr = axr.contourf(Xs, Ys, Zs, alpha=.2, cmap="hot") # csr2 = axr.contour(Xs, Ys, Zs, color="k", cmap=cmap) # axr.clabel(csr2, fontsize=9, inline=1, alpha=1) axl.scatter([1], [-.4]) axr.scatter([1], [-.4]) axc.scatter([1], [-.4]) mix_mpl(z) z.plot(ax=axz, show=False) axz.set_title(z) axc.set_title("f(x,y)") fig.tight_layout() plt.show()
import streamlit as st import phuzzy from phuzzy.mpl import mix_mpl import matplotlib.pyplot as plt add_selectbox = st.sidebar.selectbox("phuzzy numbers", ("Triangle", "Uniform", "Trapezoid")) st.text('phuzzy') p1_slot = st.empty() uniform = phuzzy.Uniform(alpha0=[1, 2]) mix_mpl(uniform) trapezoid = phuzzy.Trapezoid(alpha0=[1, 2], alpha1=[1.2, 1.5]) mix_mpl(trapezoid) triangle = phuzzy.Triangle(alpha0=[1, 2], alpha1=[1.8]) mix_mpl(triangle) p_dict = {"Triangle": triangle, "Uniform": uniform, "Trapezoid": trapezoid} print(add_selectbox) p = p_dict.get(add_selectbox, triangle) def plot_phuzzy_number(p): H = 170. #mm B = 270. #mm fig, ax = plt.subplots(dpi=90,
import numpy as np import pandas as pd from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import phuzzy.mpl.plots import matplotlib.pyplot as plt from sklearn import neighbors from sklearn.svm import SVR from sklearn.model_selection import GridSearchCV x = phuzzy.TruncNorm(alpha0=[1, 2], name="x") y = phuzzy.TruncNorm(alpha0=[1, 2], name="y") # y = phuzzy.Triangle(alpha0=[3, 6], alpha1=[4], name="y") mix_mpl(x) mix_mpl(y) def f(x1, x2): return (x1-1)**2+(x2+.4)**2 + .1 z = f(x,y) doe = phuzzy.approx.doe.DOE(designvars = [x,y], name="xy") print(doe) # ############################################################################# # Generate sample data import numpy as np samples = doe.sample_doe(n=20, method="cc").copy() X = samples[["x", "y"]].values