Пример #1
0
def case2():
    y0 = [[5, 5, 5], [2, 2, 2]]
    stepsize = 0.01
    maxorder = 2
    boundary_order = 1
    num_mode = 2
    T = 5
    ep = 0.01
    mergeep = 0.01
    method = 'merge'

    t_list, y_list = simulation_ode_2(get_fvdp3(0), get_event1(0), y0, T,
                                      stepsize)
    A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    np.savetxt("data/A2.txt", A, fmt='%8f')
    np.savetxt("data/b2.txt", b, fmt='%8f')
    # print(y_list)

    # P,G,C = infer_model(
    #             t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order,
    #             num_mode=num_mode, modelist=fvdp3, event=event1, ep=ep, mergeep= mergeep, method=method, verbose=False)

    y1 = [[3, 3, 3], [4, 4, 4]]
    t_test_list, y_test_list = simulation_ode_2(get_fvdp3(0), get_event1(0),
                                                y0, T, stepsize)
    YT, FT = diff(t_list + t_test_list, y_list + y_test_list, dynamics.fvdp3_3)
    # np.savetxt("data/YT"+str(n)+".txt",YT,fmt='%8f')
    # np.savetxt("data/FT"+str(n)+".txt",FT,fmt='%8f')
    np.savetxt("data/YT2.txt", YT, fmt='%8f')
    np.savetxt("data/FT2.txt", FT, fmt='%8f')
Пример #2
0
def case1():
    y0 = [[0, 2], [0, 3]]
    y1 = [[0, 1], [0, 5]]
    T = 15
    stepsize = 0.01
    ep = 0.01,
    mergeep = 0.01
    maxorder = 3
    boundary_order = 2
    num_mode = 2
    mode = get_mode(0)
    event1 = get_event(0)
    method = 'piecelinear'
    t_list, y_list = simulation_ode_2(get_mode(0), get_event(0), y0, T,
                                      stepsize)
    t_test_list, y_test_list = simulation_ode_2(get_mode(0), get_event(0), y1,
                                                T, stepsize)
    P, G, C = infer_model(t_list,
                          y_list,
                          stepsize=stepsize,
                          maxorder=maxorder,
                          boundary_order=boundary_order,
                          num_mode=num_mode,
                          modelist=mode,
                          event=event1,
                          ep=ep,
                          mergeep=mergeep,
                          method=method,
                          verbose=False)
    d_avg = test_model(P, G, C, num_mode, y_list + y_test_list, mode, event1,
                       maxorder, boundary_order)
    print(d_avg)
Пример #3
0
def case1():

    mode2 = experiment1.get_mode2(0)
    event1 = experiment1.get_event1(0)
    y0 = [[99.5,80],[97.5,100]]
    stepsize = 0.1
    maxorder = 1
    boundary_order = 1
    num_mode = 2
    T = 50
    ep = 0.01
    mergeep = 0.01
    method='piecelinear'
    t_list, y_list = simulation_ode_2(mode2, event1, y0, T, stepsize)
    with open('f1tr.txt','ab') as f:
        for ypoints in y_list:
            np.savetxt(f, ypoints, delimiter=" ") 
    P,G,C = infer_model(
                t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order,
                num_mode=num_mode, modelist=mode2, event=event1, ep=ep, mergeep = mergeep, method=method, verbose=False)
    # A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder, stepsize)
    d_avg = test_model(
                P, G, C, num_mode, y_list , mode2, event1, maxorder, boundary_order)
    # d_avg = test_model2(
    #             P, G, C, num_mode, A, Y , mode2, event1, maxorder, boundary_order)
    print(G)
    print(C[0]/C[0],C[1]/C[0],C[2]/C[0])
    print(d_avg)
    @eventAttr()
    def eventtest(t,y):
        y0, y1 = y
        return C[0] * y0 + C[1] * y1 + C[2]
    
    ttest_list, ytest_list = simulation_ode_2([ode_test(G[0],maxorder),ode_test(G[1],maxorder)], eventtest, y0, T, stepsize)
    for i, temp_y in enumerate(y_list):
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        if i == 0:
            plt.plot(y0_list,y1_list,c='b',label='Original')
        else:
            plt.plot(y0_list,y1_list,c='b')
    for i, temp_y in enumerate(ytest_list):
        y0_list = temp_y.T[0][::5]
        y1_list = temp_y.T[1][::5]
        if i == 0:
            plt.plot(y0_list,y1_list,mfc='None', mec='r',label='Inferred',marker='.',linestyle='None')
            
        else:
            # plt.plot(y0_list,y1_list,c='r',linestyle='--',marker=',')
            plt.plot(y0_list,y1_list,mfc='None', mec='r',marker='.',linestyle='None')
    plt.xlabel('x1')
    plt.ylabel('x2')
    plt.legend()
    plt.show()
Пример #4
0
def case2():
    fvdp3 = experiment2.get_fvdp3(0)
    event1 = experiment2.get_event1(0)
    y0 = [[5,5,5], [2,2,2]]
    stepsize = 0.004
    maxorder = 2
    boundary_order = 1
    num_mode = 2
    T = 5
    ep = 0.01
    mergeep = 0.2
    method='tolmerge'
    t_list, y_list = simulation_ode_2(fvdp3, event1, y0, T, stepsize)
    # A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder, stepsize)
    P,G,C = infer_model(
                t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order,
                num_mode=num_mode, modelist=fvdp3, event=event1, ep=ep, mergeep= mergeep,method=method, verbose=False)
    d_avg = test_model(
                P, G, C, num_mode, y_list , fvdp3, event1, maxorder, boundary_order)
    # d_avg = test_model2(
    #             P, G, C, num_mode, A, Y , fvdp3, event1, maxorder, boundary_order)
    
    print(G)
    print(C[0]/C[0],C[1]/C[0],C[2]/C[0],C[3]/C[0])
    print(d_avg)
    with open('f2tr.txt','ab') as f:
        for ypoints in y_list:
            np.savetxt(f, ypoints, delimiter=" ") 
    
    @eventAttr()
    def eventtest(t,y):
        y0, y1, y2 = y
        return C[0] * y0 + C[1] * y1 + C[2]* y2 + C[3]
    
    ttest_list, ytest_list = simulation_ode_2([ode_test(G[0],maxorder),ode_test(G[1],maxorder)], eventtest, y0, T, stepsize)

    ax = plt.axes(projection='3d')
    for temp_y in y_list[0:1]:
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        y2_list = temp_y.T[2]
        ax.plot3D(y0_list, y1_list, y2_list,c='b',label='Original')
    for temp_y in ytest_list[0:1]:
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        y2_list = temp_y.T[2]
        ax.plot3D(y0_list, y1_list, y2_list,c='r',label='Inferred', linestyle='--')
    ax.set_xlabel('x1')
    ax.set_ylabel('x2')
    ax.set_zlabel('x3')
    plt.legend()
    plt.show()
Пример #5
0
def case3():
    mode2 = get_mode2(0)
    event1 = get_event1(0)
    y0 = [[99.5, 80], [97.5, 100]]
    y1 = [[100.5, 90], [96, 80]]
    stepsize = 0.1
    maxorder = 1
    boundary_order = 1
    num_mode = 2
    T = 50
    ep = 0.01
    mergeep = 0.01
    method = 'piecelinear'
    t_list, y_list = simulation_ode_2(mode2, event1, y0, T, stepsize, noise=0)
    # A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    # x0 = np.zeros(num_mode*A.shape[1]*b.shape[1])
    # re = infer_optimizationm(x0, A, b, 2)
    # print(re.fun)
    # print(re.success)
    # print(re.x)
    A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder,
                                                  stepsize)
    A, b1, b2, _ = seg_droprow(A, b1, b2, ep)
    x0 = np.zeros(num_mode * A.shape[1] * b1.shape[1])
    for i in range(len(x0)):
        x0[i] = np.random.uniform(-1, 1)
    re = infer_optimizationm(x0, A, b1, 2)
    print(re.fun / A.shape[0])
    print(re.success)
    print(re.x)
Пример #6
0
def case8():
    y0 = [[4,0.1,3.1,0],[5.9,0.2,-3,0],[4.1,0.5,2,0],[6,0.7,2,0]]
    t_tuple = [(0,5),(0,5),(0,5),(0,5)]
    stepsize = 0.01
    maxorder = 2
    # start = time.time()
    t_list, y_list = simulation_ode_2([mmode1, mmode2], event3, y0, t_tuple, stepsize)
    clfs, boundary = infer_multi_ch.infer_multi_linear_new(t_list, y_list, stepsize, maxorder)
    for clf in clfs:
        print(clf.coef_)
    print(boundary)
    num_pt0 = y_list[0].shape[0]
    num_pt1 = y_list[1].shape[0]
    sum = 0
    for i in range(num_pt0):

        # index = random.choice(range(num_pt0))
        x = y_list[0][i]
        sum += infer_multi_ch.test_classify(mmode, clfs, boundary, maxorder, x)
        # print(infer_multi_ch.test_classify(fvdp3_3, clfs, boundary, maxorder, x))
    for i in range(num_pt1):

        # index = random.choice(range(num_pt0))
        x = y_list[1][i]
        sum += infer_multi_ch.test_classify(mmode, clfs, boundary, maxorder, x)
    
    print(sum/(num_pt0+num_pt1))
Пример #7
0
def case3():
    y0 = [[5, 5, 5], [2, 2, 2]]
    stepsize = 0.01
    maxorder = 2
    boundary_order = 1
    num_mode = 2
    T = 5
    ep = 0.01
    mergeep = 0.01
    method = 'merge'

    t_list, y_list = simulation_ode_2(get_fvdp3(0), get_event1(0), y0, T,
                                      stepsize)
    A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    print("start")
    x0 = np.zeros(num_mode * A.shape[1] * b.shape[1])
    re = infer_optimizationm(x0, A, b, num_mode)
    print(re.fun)
    print(re.success)
    print(re.x)
    A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder,
                                                  stepsize)
    A, b1, b2, _ = seg_droprow(A, b1, b2, ep)
    x0 = np.zeros(num_mode * A.shape[1] * b1.shape[1])
    re = infer_optimizationm(x0, A, b1, num_mode)
    print(re.fun)
    print(re.success)
    print(re.x)
Пример #8
0
def case1():
    y0 = [[4, 0.1, 3.1, 0], [5.9, 0.2, -3, 0], [4.1, 0.5, 2, 0],
          [6, 0.7, 2, 0]]
    y0_test = [[4.6, 0.13, 2, 0], [5.3, 0.17, -2, 0]]
    T = 5
    stepsize = 0.01
    ep = 0.01
    maxorder = 2
    boundary_order = 1
    num_mode = 2
    method = 'tolmerge'
    t_list, y_list = simulation_ode_2(mmode, event1, y0, T, stepsize)
    t_test_list, y_test_list = simulation_ode_2(mmode, event1, y0_test, T,
                                                stepsize)
    A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    np.savetxt("data/A4.txt", A, fmt='%8f')
    np.savetxt("data/b4.txt", b, fmt='%8f')
    YT, FT = diff(t_list + t_test_list, y_list + y_test_list, dynamics.modeex4)
    np.savetxt("data/YT4.txt", YT, fmt='%8f')
    np.savetxt("data/FT4.txt", FT, fmt='%8f')
Пример #9
0
def case2():
    mode2 = get_mode2(0)
    event1 = get_event1(0)
    y0 = [[99.5, 80], [97.5, 100]]
    y1 = [[100.5, 90], [96, 80]]
    stepsize = 0.1
    maxorder = 1
    boundary_order = 1
    num_mode = 2
    T = 50
    ep = 0.01
    mergeep = 0.01
    method = 'piecelinear'
    t_list, y_list = simulation_ode_2(mode2, event1, y0, T, stepsize, noise=0)
    A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    np.savetxt("data/A1.txt", A, fmt='%8f')
    np.savetxt("data/b1.txt", b, fmt='%8f')
Пример #10
0
def case9():
    y0 = [[4.7,0.2,-6,0,0,3]]
    t_tuple = [(0,10)]
    stepsize = 0.001
    maxorder = 1
    # start = time.time()
    t_list, y_list = simulation_ode_2([mmode1, mmode2], event3, y0, t_tuple, stepsize)
    tpar_list,ypar_list = parti(t_list,y_list,0.2,1/3)
    print(tpar_list[0].shape)
    tt = [tpar_list[0],tpar_list[2],tpar_list[4]]
    yy = [ypar_list[0],ypar_list[2],ypar_list[4]]
    A ,b = diff_method1(tt, yy, maxorder, stepsize)
    # # clf = linear_model.LinearRegression(fit_intercept=False,normalize=True)
    # # clf.fit(A,b)
    # # g = clf.coef_
    # bb = clf.predict(A)
    g = pinv2(A).dot(b)

    print("g=",g.T)
Пример #11
0
def case(y0, t_tuple, stepsize, maxorder, modelist, event, ep, method):
    # print('Simulating')
    t_list, y_list = simulation_ode_2(modelist, event, y0, t_tuple, stepsize)
    draw2D(y_list)

    if method == "new":
        # print('Classifying')
        A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
        P, G, D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder,
                                          ep)
        P, G = reclass(A, b, P, ep)
        print(G)
        P, D = dropclass(P, G, D, A, b, Y, ep, stepsize)
        # print('Number of modes:', len(P))

        y = []
        x = []

        for j in range(0, len(P[0])):
            y.append(1)
            x.append({1: Y[P[0][j], 0], 2: Y[P[0][j], 1]})

        for j in range(0, len(P[1])):
            y.append(-1)
            x.append({1: Y[P[1][j], 0], 2: Y[P[1][j], 1]})

        prob = svm_problem(y, x)
        param = svm_parameter('-t 1 -d 1 -c 10 -r 1 -b 0 -q')
        m = svm_train(prob, param)
        svm_save_model('model_file', m)
        nsv = m.get_nr_sv()
        svc = m.get_sv_coef()
        sv = m.get_SV()
        g = -m.rho[0]
        a1 = 0
        a2 = 0
        for i in range(0, nsv):
            a1 = a1 + svc[i][0] * 0.5 * sv[i][1]
            a2 = a2 + svc[i][0] * 0.5 * sv[i][2]
            g = g + svc[i][0]

        def f(x):
            return a1 * x[0] + a2 * x[1] + g > 0

        print(a1 / a1, a2 / a1, g / a1)

    sum = 0
    num = 0

    @eventAttr()
    def eventtest(t, y):
        y0, y1 = y
        return a1 * y0 + a2 * y1 + g

    ttest_list, ytest_list = simulation_ode_2(
        [ode_test(G[0], maxorder),
         ode_test(G[1], maxorder)], eventtest, y0, t_tuple, stepsize)
    for i, temp_y in enumerate(y_list):
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        if i == 0:
            plt.plot(y0_list, y1_list, c='b', label='Original')
        else:
            plt.plot(y0_list, y1_list, c='b')
    for i, temp_y in enumerate(ytest_list):
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        if i == 0:
            plt.plot(y0_list, y1_list, c='r', label='Inferred')
        else:
            plt.plot(y0_list, y1_list, c='r')
    plt.xlabel('x1')
    plt.ylabel('x2')
    plt.legend()
    plt.show()

    def get_poly_pt(x):
        gene = generate_complete_polynomial(len(x), maxorder)
        val = []
        for i in range(gene.shape[0]):
            val.append(1.0)
            for j in range(gene.shape[1]):
                val[i] = val[i] * (x[j]**gene[i, j])
        poly_pt = np.mat(val)
        return poly_pt

    for ypoints in y_list:
        num = num + ypoints.shape[0]
        for i in range(ypoints.shape[0]):
            if event(0, ypoints[i]) > 0:
                exact = modelist[0](0, ypoints[i])
            else:
                exact = modelist[1](0, ypoints[i])
            if f(ypoints[i]) == 1:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[0].T)
            else:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[1].T)

            exact = np.mat(exact)
            diff = exact - predict
            c = 0
            a = 0
            b = 0
            for j in range(diff.shape[1]):
                c = c + diff[0, j]**2
                a = a + exact[0, j]**2
                b = b + predict[0, j]**2
            f1 = np.sqrt(c)
            f2 = np.sqrt(a) + np.sqrt(b)
            sum = sum + f1 / f2

    return sum / num
Пример #12
0
def case(y0, t_tuple, stepsize, maxorder, modelist, event, ep, method):
    t_list, y_list = simulation_ode_2(modelist, event, y0, t_tuple, stepsize)

    if method == "new":

        A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
        P, G, D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder,
                                          0.01)
        P, D = dropclass(P, G, D, A, b, Y, 0.01, stepsize)
        # print(len(P))
        print(G)
        y = []
        x = []

        for j in range(0, len(P[0])):
            y.append(1)
            x.append({1: Y[P[0][j], 0], 2: Y[P[0][j], 1], 3: Y[P[0][j], 2]})

        for j in range(0, len(P[1])):
            y.append(-1)
            x.append({1: Y[P[1][j], 0], 2: Y[P[1][j], 1], 3: Y[P[1][j], 2]})

        prob = svm_problem(y, x)
        param = svm_parameter('-t 1 -d 1 -c 10 -r 1 -b 0 -q')
        m = svm_train(prob, param)
        svm_save_model('model_file', m)
        nsv = m.get_nr_sv()
        svc = m.get_sv_coef()
        sv = m.get_SV()
        g = -m.rho[0]
        a1 = 0
        a2 = 0
        a3 = 0
        for i in range(0, nsv):
            a1 = a1 + svc[i][0] * 0.5 * sv[i][1]
            a2 = a2 + svc[i][0] * 0.5 * sv[i][2]
            a3 = a3 + svc[i][0] * 0.5 * sv[i][3]
            g = g + svc[i][0]

        print(a1 / a1, a2 / a1, a3 / a1, g / a1)

        def f(x):
            return a1 * x[0] + a2 * x[1] + a3 * x[2] + g > 0

        @eventAttr()
        def eventtest(t, y):
            y0, y1, y2 = y
            return a1 * y0 + a2 * y1 + a3 * y2 + g

        ttest_list, ytest_list = simulation_ode_2(
            [ode_test(G[0], maxorder),
             ode_test(G[1], maxorder)], eventtest, y0, t_tuple, stepsize)
        ax = plt.axes(projection='3d')
        for temp_y in y_list[0:1]:
            y0_list = temp_y.T[0]
            y1_list = temp_y.T[1]
            y2_list = temp_y.T[2]
            ax.plot3D(y0_list, y1_list, y2_list, c='b')
        for temp_y in ytest_list[0:1]:
            y0_list = temp_y.T[0]
            y1_list = temp_y.T[1]
            y2_list = temp_y.T[2]
            ax.plot3D(y0_list, y1_list, y2_list, c='r')
        plt.show()

    sum = 0
    num = 0

    def get_poly_pt(x):
        gene = generate_complete_polynomial(len(x), maxorder)
        val = []
        for i in range(gene.shape[0]):
            val.append(1.0)
            for j in range(gene.shape[1]):
                val[i] = val[i] * (x[j]**gene[i, j])
        poly_pt = np.mat(val)
        return poly_pt

    for ypoints in y_list:
        num = num + ypoints.shape[0]
        for i in range(ypoints.shape[0]):
            if event(0, ypoints[i]) > 0:
                exact = modelist[0](0, ypoints[i])
            else:
                exact = modelist[1](0, ypoints[i])
            if f(ypoints[i]) == 1:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[0].T)
            else:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[1].T)

            exact = np.mat(exact)
            diff = exact - predict
            c = 0
            a = 0
            b = 0
            for j in range(diff.shape[1]):
                c = c + diff[0, j]**2
                a = a + exact[0, j]**2
                b = b + predict[0, j]**2
            f1 = np.sqrt(c)
            f2 = np.sqrt(a) + np.sqrt(b)
            sum = sum + f1 / f2

    return sum / num
Пример #13
0
def run_test(id, eid, case_id, methods, verbose=False):
    np.random.seed(0)

    if eid == 'A':
        case_info = experiment1.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment1.get_mode2(params)
        event = experiment1.get_event1(params)
        maxorder = 1
        boundary_order = 1
        num_mode = 2
        ep = 0.01
        mergeep = 0.01

    elif eid == 'B':
        case_info = experiment2.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment2.get_fvdp3(params)
        event = experiment2.get_event1(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']

    elif eid == 'C':
        case_info = experiment3.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment3.get_mode(params)
        event = experiment3.get_event(params)
        maxorder = 3
        boundary_order = 2
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']

    elif eid == 'D':
        case_info = experiment4.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment4.get_mmode(params)
        event = experiment4.get_event(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']

    elif eid == 'E':
        case_info = experiment5.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment5.get_modetr(params)
        event = experiment5.get_event(params)
        labeltest = experiment5.get_labeltest(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 3
        ep = case_info['ep']
        mergeep = case_info['mergeep']

    # Obtain simulated trajectory
    start = time.time()
    if num_mode == 2:
        t_list, y_list = simulation_ode_2(modelist, event, y0, T, stepsize)
        test_t_list, test_y_list = simulation_ode_2(modelist, event, y0_test,
                                                    T, stepsize)
    elif num_mode == 3:
        t_list, y_list = simulation_ode_3(modelist, event, labeltest, y0, T,
                                          stepsize)
        test_t_list, test_y_list = simulation_ode_3(modelist, event, labeltest,
                                                    y0_test, T, stepsize)
    else:
        raise NotImplementedError
    end = time.time()

    # print('eid:', eid, 'N_init:', len(y0), 't_step:', stepsize, 'ep:', ep, 'sim_time: %.3f' % (end - start))

    d_avg = dict()
    infer_time = dict()
    for method in methods:
        start = time.time()
        if num_mode == 2:
            P, G, boundary = infer_model(t_list,
                                         y_list,
                                         stepsize=stepsize,
                                         maxorder=maxorder,
                                         boundary_order=boundary_order,
                                         num_mode=num_mode,
                                         modelist=modelist,
                                         event=event,
                                         ep=ep,
                                         mergeep=mergeep,
                                         method=method,
                                         verbose=verbose)
            end = time.time()
            d_avg[method] = test_model(P, G, boundary, num_mode,
                                       y_list + test_y_list, modelist, event,
                                       maxorder, boundary_order)
            infer_time[method] = end - start
        elif num_mode == 3:
            P, G, boundary = infer_model(t_list,
                                         y_list,
                                         stepsize=stepsize,
                                         maxorder=maxorder,
                                         boundary_order=boundary_order,
                                         num_mode=num_mode,
                                         modelist=modelist,
                                         event=event,
                                         ep=ep,
                                         mergeep=mergeep,
                                         method=method,
                                         verbose=verbose,
                                         labeltest=labeltest)
            end = time.time()
            d_avg[method] = test_model(P,
                                       G,
                                       boundary,
                                       num_mode,
                                       y_list + test_y_list,
                                       modelist,
                                       event,
                                       maxorder,
                                       boundary_order,
                                       labeltest=labeltest)
            infer_time[method] = end - start
        else:
            raise NotImplementedError

        # print('Method: %s, d_avg: %.6f, infer_time: %.3f' % (method, d_avg[method], infer_time[method]))

    # best_method, best_avg = None, 1.0
    # for method, avg in d_avg.items():
    #     total_d_avg[method] += avg
    #     if avg < best_avg:
    #         best_method, best_avg = method, avg
    # for method, t in infer_time.items():
    #     total_time[method] += t
    # total_win[best_method] += 1

    print(
        '%d & $%s$ & %d & %.3f & %d & %.3f & %.5f & %.5f & %.5f& & %.1f & %.1f & %.1f& & \\\\'
        % (id, eid, len(y0), stepsize, T, mergeep, d_avg['dbscan'],
           d_avg['tolmerge'], d_avg['piecelinear'], infer_time['dbscan'],
           infer_time['tolmerge'], infer_time['piecelinear']))
    return d_avg, infer_time
Пример #14
0
def case(y0, t_tuple, stepsize, maxorder, modelist, event, ep, method):
    t_list, y_list = simulation_ode_2(modelist, event, y0, t_tuple, stepsize)

    if method == "new":

        A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
        P, G, D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder,
                                          0.01)
        P, D = dropclass(P, G, D, A, b, Y, 0.01, stepsize)
        # print(len(P))
        # print(G)

        y = []
        x = []

        for j in range(0, len(P[0])):
            y.append(1)
            x.append({1: Y[P[0][j], 0], 2: Y[P[0][j], 1]})

        for j in range(0, len(P[1])):
            y.append(-1)
            x.append({1: Y[P[1][j], 0], 2: Y[P[1][j], 1]})

        prob = svm_problem(y, x)
        param = svm_parameter('-t 1 -d 2 -r 1 -c 10 -b 0 -q')
        m = svm_train(prob, param)
        svm_save_model('model_file', m)
        # p_label, p_acc, p_val = svm_predict(y, x, m)
        nsv = m.get_nr_sv()
        svc = m.get_sv_coef()
        sv = m.get_SV()

        def f(x):
            g = -m.rho[0]
            for i in range(0, nsv):
                g = g + svc[i][0] * (0.5 *
                                     (x[0] * sv[i][1] + x[1] * sv[i][2]) +
                                     1)**2
            return g > 0

    sum = 0
    num = 0

    def get_poly_pt(x):
        gene = generate_complete_polynomial(len(x), maxorder)
        val = []
        for i in range(gene.shape[0]):
            val.append(1.0)
            for j in range(gene.shape[1]):
                val[i] = val[i] * (x[j]**gene[i, j])
        poly_pt = np.mat(val)
        return poly_pt

    for ypoints in y_list:
        num = num + ypoints.shape[0]
        for i in range(ypoints.shape[0]):
            if event(0, ypoints[i]) > 0:
                exact = modelist[0](0, ypoints[i])
            else:
                exact = modelist[1](0, ypoints[i])
            if f(ypoints[i]) == 1:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[0].T)
            else:
                predict = np.matmul(get_poly_pt(ypoints[i]), G[1].T)

            exact = np.mat(exact)
            diff = exact - predict
            c = 0
            a = 0
            b = 0
            for j in range(diff.shape[1]):
                c = c + diff[0, j]**2
                a = a + exact[0, j]**2
                b = b + predict[0, j]**2
            f1 = np.sqrt(c)
            f2 = np.sqrt(a) + np.sqrt(b)
            sum = sum + f1 / f2

    return sum / num
Пример #15
0
def compare_opt(id, eid, case_id, verbose=False):
    np.random.seed(0)

    if eid == 'A':
        case_info = experiment1.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment1.get_mode2(params)
        event = experiment1.get_event1(params)
        maxorder = 1
        boundary_order = 1
        num_mode = 2
        ep = 0.01
        mergeep = 0.01
        dy = dynamics.mode2t

    elif eid == 'B':
        case_info = experiment2.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment2.get_fvdp3(params)
        event = experiment2.get_event1(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.fvdp3_3

    elif eid == 'C':
        case_info = experiment3.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment3.get_mode(params)
        event = experiment3.get_event(params)
        maxorder = 3
        boundary_order = 2
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modeex3

    elif eid == 'D':
        case_info = experiment4.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment4.get_mmode(params)
        event = experiment4.get_event(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modeex4

    elif eid == 'E':
        case_info = experiment5.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment5.get_modetr(params)
        event = experiment5.get_event(params)
        labeltest = experiment5.get_labeltest(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 3
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modetrt

    # Obtain simulated trajectory
    print(id, eid)
    start = time.time()
    if num_mode == 2:
        t_list, y_list = simulation_ode_2(modelist, event, y0, T, stepsize)
        test_t_list, test_y_list = simulation_ode_2(modelist, event, y0_test,
                                                    T, stepsize)
    elif num_mode == 3:
        t_list, y_list = simulation_ode_3(modelist, event, labeltest, y0, T,
                                          stepsize)
        test_t_list, test_y_list = simulation_ode_3(modelist, event, labeltest,
                                                    y0_test, T, stepsize)
    else:
        raise NotImplementedError
    end = time.time()
    # start = time.time()
    # A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder,
                                                  stepsize)
    optA, optb1, optb2, drop = seg_droprow(A, b1, b2, ep)
    x0 = np.zeros(num_mode * optA.shape[1] * optb1.shape[1])
    for ini in range(0, 5):
        print('initial', ini)
        for i in range(len(x0)):
            x0[i] = np.random.uniform(-5, 5)
        for optmethod in ['nelder-mead', 'COBYLA', 'Powell', 'CG']:
            try:
                infer_optimizationmtest(x0, optA, optb1, num_mode)
            except:
                print(optmethod, ' timeout')
Пример #16
0
def case7():
    y0 = [[4,0.1,3.1,0],[5.9,0.2,-3,0],[4.1,0.5,2,0],[6,0.7,2,0]]
    t_tuple = [(0,5),(0,5),(0,5),(0,5)]
    stepsize = 0.01
    maxorder = 2
    # start = time.time()
    t_list, y_list = simulation_ode_2([mmode1, mmode2], event3, y0, t_tuple, stepsize)

    # for temp_y in y_list:
    #     y0_list = temp_y.T[0]
    #     y1_list = temp_y.T[1]
    #     plt.plot(y0_list,y1_list,'b')
    # plt.show()
    A, b, Y = diff_method_new1(t_list, y_list, maxorder, stepsize)
    P,G,D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder, 0.03)
    print(P)
    print(G)
    print(D)
    y = []
    x = []

    for j in range(0,len(P[0])):
        y.append(1)
        x.append({1:Y[P[0][j],0], 2:Y[P[0][j],1], 3:Y[P[0][j],2], 4:Y[P[0][j],3]})
    
    for j in range(0,len(P[1])):
        y.append(-1)
        x.append({1:Y[P[1][j],0], 2:Y[P[1][j],1], 3:Y[P[1][j],2], 4:Y[P[1][j],3]})

    prob  = svm_problem(y, x)
    param = svm_parameter('-t 1 -d 1 -c 10 -r 1 -b 1')
    m = svm_train(prob, param)
    svm_save_model('model_file', m)
    # print("pred")
    p_label, p_acc, p_val = svm_predict(y, x, m,'-q')
    # print(p_label)
    print('pre',p_acc[0])
    # print(p_val)
    nsv = m.get_nr_sv()
    svc = m.get_sv_coef()
    sv = m.get_SV()
    # print(nsv)
    # print(svc)
    # print(sv)
    
    # def clafun(x):
    #     g = -m.rho[0]
    #     for i in range(0,nsv):
    #         g = g + svc[i][0] * ((0.5 * (x[0]*sv[i][1] + x[1]*sv[i][2]))**3)
    #     return g

    g = -m.rho[0]
    a1 = 0
    a2 = 0
    a3 = 0
    a4 = 0
    for i in range(0,nsv):
        a1 = a1 + svc[i][0] * 0.5 * sv[i][1]
        a2 = a2 + svc[i][0] * 0.5 * sv[i][2]
        a3 = a3 + svc[i][0] * 0.5 * sv[i][3]
        a4 = a4 + svc[i][0] * 0.5 * sv[i][4]
        g = g + svc[i][0]*1
Пример #17
0
def case6():
    y0 = [[0,1],[0,2],[0,3],[0,4],[0,5]]
    t_tuple = 20
    stepsize = 0.01
    maxorder = 3
    # start = time.time()
    t_list, y_list = simulation_ode_2([mode1, mode2], event2, y0, t_tuple, stepsize)

    for temp_y in y_list:
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        plt.plot(y0_list,y1_list,'b')
    plt.show()
    # clfs, boundary = infer_multi_ch.infer_multi_linear_new(t_list, y_list, stepsize, maxorder)
    # for clf in clfs:
    #     print('g',clf.coef_)
    # print(boundary)
    A, b, Y = diff_method_new1(t_list, y_list, maxorder, stepsize)
    P,G,D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder, 0.01)
    print(P)
    print(G)
    print(D)
    y = []
    x = []

    for j in range(0,len(P[0])):
        y.append(1)
        x.append({1:Y[P[0][j],0], 2:Y[P[0][j],1]})
    
    
    for j in range(0,len(P[1])):
        y.append(-1)
        x.append({1:Y[P[1][j],0], 2:Y[P[1][j],1]})


    y0_list = []
    y1_list = []
    for j in range(0,len(P[0])):
        y0_list.append(Y[P[0][j],0])
        y1_list.append(Y[P[0][j],1])
    
    plt.scatter(y0_list,y1_list,s=1)
    y0_list = []
    y1_list = []
    
    for j in range(0,len(P[1])):
        y0_list.append(Y[P[1][j],0])
        y1_list.append(Y[P[1][j],1])
    
    plt.scatter(y0_list,y1_list,s=1)
    

    prob  = svm_problem(y, x)
    param = svm_parameter('-t 1 -d 2 -r 1 -c 10 -b 0')
    m = svm_train(prob, param)
    svm_save_model('model_file', m)
    print("pred")
    p_label, p_acc, p_val = svm_predict(y, x, m)
    # # print(p_label)
    nsv = m.get_nr_sv()
    svc = m.get_sv_coef()
    sv = m.get_SV()
    # print(nsv)
    # print(svc)
    # print(sv)
    
    def f(x,y):
        g = -m.rho[0]
        for i in range(0,nsv):
            g = g + svc[i][0] * (0.5*(x*sv[i][1]+y*sv[i][2])+1)**2
        return g

    x = np.linspace(-5,5,100)
    y = np.linspace(-5,5,100)
    
    X,Y = np.meshgrid(x,y)#将x,y指传入网格中
    # plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#8指图中的8+1根线,绘制等温线,其中cmap指颜色
    
    C = plt.contour(X,Y,f(X,Y),[0])#colors指等高线颜色
    plt.clabel(C,inline=True,fontsize=10)#inline=True指字体在等高线中
    
    plt.xticks(())
    plt.yticks(())
    plt.show()
Пример #18
0
def case1():
    mode2 = get_mode2(0)
    event1 = get_event1(0)
    y0 = [[70, 70]]
    stepsize = 1
    maxorder = 1
    boundary_order = 1
    num_mode = 2
    T = 200
    ep = 0.01
    method = 'kmeans'
    t_list, y_list = simulation_ode_2(mode2, event1, y0, T, stepsize)
    # P,G,C = infer_model(
    #              t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order,
    #              num_mode=num_mode, modelist=mode2, event=event1, ep=ep, method=method, verbose=False)
    # A, b1, b2, Y = diff_method_backandfor(t_list, y_list, maxorder, stepsize)
    # num_pt = Y.shape[0]

    # Segment and fit
    # P, drop, clfs = segment_and_fit(A, b1, b2)
    # P, G = dbscan_cluster(clfs, P, A, b1, num_mode)
    # P, _ = dropclass(P, G, drop, A, b1, Y, ep, stepsize)
    # for i in range(0,len(P)):
    #     y0_list = []
    #     y1_list = []
    #     for j in range(0,len(P[i])):
    #         y0_list.append(Y[P[i][j],0])
    #         y1_list.append(Y[P[i][j],1])

    #     plt.scatter(y0_list,y1_list,s=1)
    # plt.show()
    # for i, temp_y in enumerate(y_list):
    #     y0_list = temp_y.T[0]
    #     # y0_list = t_list[i]
    #     y1_list = temp_y.T[1]
    #     plt.scatter(y0_list,y1_list,c='b',s=5)
    #     plt.scatter(y0_list[59],y1_list[59],c='r',s=5)

    #     # plt.scatter(y0_list,y1_list,c='b',s=5, label='x2')
    #     # y1_list = temp_y.T[0]
    #     # plt.scatter(y0_list,y1_list,c='r',s=5, label='x1')
    # plt.xlabel('x1')
    # plt.ylabel('x2')
    # plt.legend()
    # plt.show()

    ax = plt.axes(projection='3d')

    # x=np.arange(65,110,1)
    # y=np.arange(70,140,1)
    # X, Y = np.meshgrid(x, y)
    # Z=-0.026*(X-Y)
    # ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color='r')
    for temp_y in y_list:
        y0_list = temp_y.T[0]
        y1_list = temp_y.T[1]
        y2_list = []
        for i in range(5, len(y1_list)):
            y2_list.append(
                (y1_list[i] * 137 - y1_list[i - 1] * 300 +
                 y1_list[i - 2] * 300 - y1_list[i - 3] * 200 +
                 y1_list[i - 4] * 75 - y1_list[i - 5] * 12) / (60 * stepsize))
        ax.scatter(y0_list[5:], y1_list[5:], y2_list, c='b', s=5)

    ax.set_xlabel('x1')
    ax.set_ylabel('x2')
    ax.set_zlabel('f')
    plt.legend()
    plt.show()
Пример #19
0
def compare1(id, eid, case_id, verbose=False):
    np.random.seed(0)

    if eid == 'A':
        case_info = experiment1.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment1.get_mode2(params)
        event = experiment1.get_event1(params)
        maxorder = 1
        boundary_order = 1
        num_mode = 2
        ep = 0.01
        mergeep = 0.01
        dy = dynamics.mode2t

    elif eid == 'B':
        case_info = experiment2.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment2.get_fvdp3(params)
        event = experiment2.get_event1(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.fvdp3_3

    elif eid == 'C':
        case_info = experiment3.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment3.get_mode(params)
        event = experiment3.get_event(params)
        maxorder = 3
        boundary_order = 2
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modeex3

    elif eid == 'D':
        case_info = experiment4.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment4.get_mmode(params)
        event = experiment4.get_event(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 2
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modeex4

    elif eid == 'E':
        case_info = experiment5.cases[case_id]
        params = case_info['params']
        y0 = case_info['y0']
        y0_test = case_info['y0_test']
        T = case_info['t_tuple']
        stepsize = case_info['stepsize']
        modelist = experiment5.get_modetr(params)
        event = experiment5.get_event(params)
        labeltest = experiment5.get_labeltest(params)
        maxorder = 2
        boundary_order = 1
        num_mode = 3
        ep = case_info['ep']
        mergeep = case_info['mergeep']
        dy = dynamics.modetrt

    # Obtain simulated trajectory
    start = time.time()
    if num_mode == 2:
        t_list, y_list = simulation_ode_2(modelist, event, y0, T, stepsize)
        test_t_list, test_y_list = simulation_ode_2(modelist, event, y0_test,
                                                    T, stepsize)
    elif num_mode == 3:
        t_list, y_list = simulation_ode_3(modelist, event, labeltest, y0, T,
                                          stepsize)
        test_t_list, test_y_list = simulation_ode_3(modelist, event, labeltest,
                                                    y0_test, T, stepsize)
    else:
        raise NotImplementedError
    end = time.time()
    # A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize)
    # np.savetxt("data/CA"+str(id)+".txt",A,fmt='%8f')
    # np.savetxt("data/Cb"+str(id)+".txt",b,fmt='%8f')
    # YT, FT = diff(t_list+test_t_list, y_list+test_y_list, dy)
    # np.savetxt("data/CYT"+str(id)+".txt",YT,fmt='%8f')
    # np.savetxt("data/CFT"+str(id)+".txt",FT,fmt='%8f')
    for i in range(0, len(y_list)):
        np.savetxt("data1/YLIST" + str(id) + "_" + str(i) + ".txt",
                   y_list[i],
                   fmt='%8f')
    for i in range(0, len(test_y_list)):
        np.savetxt("data1/YTLIST" + str(id) + "_" + str(i) + ".txt",
                   test_y_list[i],
                   fmt='%8f')