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()
Exemple #2
0
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
Exemple #3
0
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()
Exemple #4
0
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()
Exemple #9
0
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)
Exemple #10
0
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()
Exemple #14
0
# 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)
Exemple #15
0
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,
Exemple #16
0
    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,
Exemple #18
0
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