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)
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()
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()
def case2(): modetr = get_modetr(0) event = get_event(0) labeltest = get_labeltest(0) y0 = [[-1, 1], [1, 4], [2, -3]] y1 = [[3, -1], [-1, 3]] T = 5 stepsize = 0.002 maxorder = 2 boundary_order = 1 num_mode = 3 ep = 0.0005 mergeep = 0.01 method = 'piecelinear' t_list, y_list = simulation_ode_3(modetr, event, labeltest, y0, T, stepsize) # A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize) # np.savetxt("data/A5.txt",A,fmt='%8f') # np.savetxt("data/b5.txt",b,fmt='%8f') P, G, (coeff1, coeff2, [first, second, third ]) = infer_model(t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order, num_mode=num_mode, modelist=modetr, event=event, ep=ep, mergeep=mergeep, method=method, verbose=False, labeltest=labeltest) boundary = (coeff1, coeff2, [first, second, third]) t_test_list, y_test_list = simulation_ode_3(modetr, event, labeltest, y1, T, stepsize) # YT, FT = diff(t_list+t_test_list, y_list+y_test_list, dynamics.modetrt) # np.savetxt("data/YT5.txt",YT,fmt='%8f') # np.savetxt("data/FT5.txt",FT,fmt='%8f') d_avg = test_model(P, G, boundary, num_mode, y_list, modetr, event, maxorder, boundary_order, labeltest=labeltest) # print(G) print(d_avg)
def case1(): np.random.seed(0) modetr = get_modetr(0) event = get_event(0) labeltest = get_labeltest(0) y0 = [[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]] # y1 = [[3,-1], [-1,3]] T = 5 stepsize = 0.005 maxorder = 2 boundary_order = 1 num_mode = 5 ep = 0.005 mergeep = 0.01 t_list, y_list = simulation_ode_3(modetr, event, labeltest, y0, T, stepsize) # A, b1, b2, Y, ytuple = diff_method_backandfor(t_list, y_list, maxorder, stepsize) # res, drop, clfs = segment_and_fit(A, b1, b2, ytuple,ep=0.005) # np.savetxt("data/YY.txt",Y,fmt='%8f') # print(len(res)) # print(res) # P, G = merge_cluster_tol2(res, A, b1, num_mode, ep) A, b, Y = diff_method_new(t_list, y_list, maxorder, stepsize) np.savetxt("data/YY.txt", Y, fmt='%8f') P, G, D = infer_dynamic_modes_new(t_list, y_list, stepsize, maxorder, ep) # print(P) print(len(P)) if len(P) > num_mode: P, G = merge_cluster_tol2(P, A, b, num_mode, ep) P, _ = dropclass0(P, G, D, A, b, Y, ep, stepsize) print(P) print(len(P)) L_y = len(y_list[0][0]) boundary = svm_classify(P, Y, L_y, boundary_order, num_mode) print(boundary) d = test_model(P, G, boundary, num_mode, y_list, modetr, event, maxorder, boundary_order, labeltest=labeltest) print(d)
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
def case5(): modetr = experiment5.get_modetr(0) event = experiment5.get_event(0) labeltest = experiment5.get_labeltest(0) y0 = [[-1,1],[1,4],[2,-3]] T = 5 stepsize = 0.01 maxorder = 2 boundary_order = 1 num_mode = 3 ep = 0.01 mergeep=0.01 method = 'piecelinear' t_list, y_list = simulation_ode_3(modetr, event, labeltest, y0, T, stepsize) P, G, (coeff1, coeff2, [first,second,third]) = infer_model( t_list, y_list, stepsize=stepsize, maxorder=maxorder, boundary_order=boundary_order, num_mode=num_mode, modelist=modetr, event=event, ep=ep, mergeep= mergeep,method=method, verbose=False, labeltest=labeltest) boundary = (coeff1, coeff2, [first,second,third]) d_avg = test_model( P, G, boundary, num_mode, y_list, modetr, event, maxorder, boundary_order, labeltest=labeltest) print(d_avg) print(coeff1[0]/coeff1[0],coeff1[1]/coeff1[0],coeff1[2]/coeff1[0]) print(coeff1[0]/coeff1[1],coeff1[1]/coeff1[1],coeff1[2]/coeff1[1]) print(coeff2[0]/coeff2[0],coeff2[1]/coeff2[0],coeff2[2]/coeff2[0]) print(coeff2[0]/coeff2[1],coeff2[1]/coeff2[1],coeff2[2]/coeff2[1]) @eventAttr() def eventtest1(t,y): y0, y1 = y return coeff1[0] * y0 + coeff1[1] * y1 + coeff1[2] @eventAttr() def eventtest2(t,y): y0, y1 = y return coeff2[0] * y0 + coeff2[1] * y1 + coeff2[2] def labeltesttest(y): if eventtest1(0,y)>0: return first elif eventtest2(0,y)>0: return second else: return third ttest_list, ytest_list = simulation_ode_3([ode_test(G[0],maxorder),ode_test(G[1],maxorder),ode_test(G[2],maxorder)], [eventtest1,eventtest2], labeltesttest, 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] y1_list = temp_y.T[1] if i == 0: plt.plot(y0_list,y1_list,c='r', label='Inferred',linestyle='--') else: plt.plot(y0_list,y1_list,c='r',linestyle='--') plt.xlabel('x1') plt.ylabel('x2') plt.legend() plt.show()