self.X[i] = self.X[i] + self.V[i] Fit.append(self.fit) print('self.fit: ', self.fit) print('self.gbest:', self.gbest) return Fit def get_parameter(self): self.set_parameter(self.gbest) return self.theta, self.weight, self.centers, self.beta # In[2]: if __name__ == "__main__": #----------------------程序執行----------------------- D = Data() x, y = D.getTrainData4d() x = D.normalize(x) y = D.normalize(y) print('lenY', len(y)) print('y:', y) rbf = RBF(3, 10, 1) x_dim, w, centers, beta = rbf.get_parameter() print('w:', w) print('centers:', centers) print('beta:', beta) my_pso = pso(5, 10, x_dim, x, y, w, centers, beta) my_pso.init_Population() fitness = my_pso.iterator() print('fitness: ', fitness) theta, w, centers, beta = my_pso.get_parameter()
from optim import * import matplotlib.pyplot as plt from Activation import sigmoid import numpy as np from loadData import Data from functools import partial from linReg import * # data closer to y = x0 + x1 + 2* x2 data1 = [[[1, 1], [4.2]], [[1, 2], [6.0]], [[2, 1], [5.8]], [[2, 2], [7.2]], [[2, 3], [8.5]], [[3, 3], [9.2]], [[1, 3], [8.1]], [[3, 1], [6.1]], [[4, 1], [7.1]], [[1, 4], [10.3]], [[4, 2], [9.5]], [[2, 4], [10.8]]] d1 = Data() d1.loadList(data1) d1.addBiasRow() print d1.X theta_init = np.matrix(np.zeros((d1.n, 1))) cost = partial(linRegCost,data = d1,theta = theta_init, regLambda = 0.001) J, theta = gradDesc(cost, theta_init, 500, 0.1) print 'model is :', list(np.transpose(theta).flat) # test the trained model with data testLinReg(theta, d1) # test the model (1, 1, 2) testLinReg(np.matrix([[1], [1], [2]]), d1)
def run(self): data4D = open("data/RBFN_params.txt", 'w+') d = Data() #new object of selected data self.data = d.getData() if (self.file_name == 'data/train4dAll.txt'): x, y = d.getTrainData4d() elif (self.file_name == 'data/train6dAll.txt'): x, y = d.getTrainData6d() else: x, y = d.getTrainData4d() #normalize training data x = d.normalize_input(x) y = d.normalize_Y(y) #get input parameters cross_rate = float(self.e4.get()) mutation_rate = float(self.e3.get()) pop_size = int(self.e2.get()) iterations = int(self.e1.get()) if (self.file_name != 'data/RBFN_params.txt'): #training weight --start-- rbf = RBF(3, 50, 1) #new object of RBFN x_dim, w, centers, beta = rbf.get_parameter() ga = genetic(len(x), cross_rate, mutation_rate, pop_size, x_dim, x, y, w, centers, beta) #new object of ga temp = 100 for i in range(0, iterations): fitness = ga.F() best_idx = np.argmin(fitness) if (fitness[best_idx] < temp): temp = fitness[best_idx] best_DNA = ga.get_best_DNA(best_idx) ga.update(best_DNA) #training weight --end-- ga.w, ga.centers, ga.beta = ga.get_data() rbf.set_parameter(ga.w, ga.centers, ga.beta) rbf.train(x, y) z1 = rbf.predict(x, rbf.get_weight()) y = d.inverse_normalize_Y(y) z = d.inverse_normalize_Y(z1) dim, output_W, output_centers, output_beta = rbf.get_parameter() for i in range(0, len(output_W)): #save trained parameters print(str(output_W[i][0]), str(output_centers[i][0]), str(output_centers[i][1]), str(output_centers[i][2]), str(output_beta[i][0]), file=data4D) data4D.close() else: load_w, load_centers, load_beta = d.load_parameters() rbf = RBF(3, len(load_centers), 1) rbf.set_parameter(load_w, load_centers, load_beta) m = map(self.data) #new object of map self.edges = m.getEdges() c = car(self.data[0]) #new object of car Y = c.getPosition() #get the position of car self.mapping(self.edges) while (Y[1] < 43): self.draw_car(c.getPosition()) #draw car on the window c.sensor(self.edges) #calculate the distane of front, left, right F, R, L = c.getDistance() input_x = [] if (self.file_name == 'data/train4dAll.txt'): input_x.append([F, R, L]) elif (self.file_name == 'data/train6dAll.txt'): pos = c.getPosition() input_x.append([pos[0], pos[1], F, R, L]) else: input_x.append([F, R, L]) input_x = np.array(input_x) input_x = d.normalize_input(input_x) wheel = rbf.predict(input_x, rbf.get_weight()) #predict the degree of wheel wheel = d.inverse_normalize_Y(wheel) if wheel < -40: wheel = -40 elif wheel > 40: wheel = 40 c.setWheel(wheel) c.update_car_direction() c.update_car_pos()
def run(self): d = Data() self.data = d.getData() if(self.file_name == 'data/train4dAll.txt'): x, y = d.getTrainData4d() elif(self.file_name == 'data/train6dAll.txt'): x, y = d.getTrainData6d() else: x, y = d.getTrainData4d() print('---------') print('data:',self.data) x = d.normalize_input(x) y = d.normalize_Y(y) print('x:', x) print('y:', y) learn_rate1 = float(self.e4.get()) learn_rate2 = float(self.e3.get()) pop_size = int(self.e2.get()) iterations = int(self.e1.get()) if(self.file_name != 'data/RBFN_params.txt'): data4D = open("data/RBFN_params.txt",'w+') #training weight --start-- rbf = RBF(3, 50, 1) x_dim, w, centers, beta = rbf.get_parameter() tStart = time.time() my_pso = pso(pop_size, iterations, learn_rate1, learn_rate2,x_dim, x, y, w, centers, beta) my_pso.initialize() print('pso!!!!!!!!!!!!!') fitness = my_pso.training() tEnd = time.time() print('It cost', (tEnd - tStart), ' sec.') print('fitness: ', fitness) theta, w, centers, beta = my_pso.get_parameter() rbf.set_parameter(theta, w, centers, beta) rbf.train(x,y) z1 = rbf.predict(x, rbf.get_weight()) print('predict_z', z1) y = d.inverse_normalize_Y(y) z = d.inverse_normalize_Y(z1) print('inverse_z', z) dim, output_W, output_centers, output_beta = rbf.get_parameter() print('output_W:',output_W) for i in range(0, len(output_W)): print(str(output_W[i][0]), str(output_centers[i][0]),str(output_centers[i][1]),str(output_centers[i][2]), str(output_beta[i][0]),file=data4D) data4D.close() else: load_w, load_centers, load_beta = d.load_parameters() rbf = RBF(3, len(load_centers), 1) rbf.set_parameter(0.5, load_w, load_centers, load_beta) print('rbf_W:', rbf.get_weight()) m = map(self.data) self.edges = m.getEdges() c = car(self.data[0]) Y = c.getPosition() self.mapping(self.edges) data4 = open("/Users/chengshu-yu/Documents/train4D.txt",'w+') data6 = open("/Users/chengshu-yu/Documents/train6D.txt",'w+') while(Y[1] < 43): self.draw_car(c.getPosition()) print('car direction:', c.getDirection(), ', wheel degree: ', c.getWheel()) c.sensor(self.edges) F, R, L = c.getDistance() input_x = [] if(self.file_name == 'data/train4dAll.txt'): input_x.append([F, R, L]) elif(self.file_name == 'data/train6dAll.txt'): pos = c.getPosition() input_x.append([pos[0], pos[1], F, R, L]) else: input_x.append([F, R, L]) input_x = np.array(input_x) input_x = d.normalize_input(input_x) print('input_x:', input_x) wheel = rbf.predict(input_x, rbf.get_weight()) print('predict_wheel:', wheel) wheel = d.inverse_normalize_Y(wheel) print('inverse wheel:', wheel) if wheel < -40: wheel = -40 elif wheel > 40: wheel = 40 print('-----------front right left:', input_x, '-----------') print('-----------predict wheel:', wheel, '-----------') c.setWheel(wheel) c.update_car_direction() c.update_car_pos() print(str(F),' ',str(R),' ',str(L),' ',str(c.getDirection()),file=data4) print(str(c.getPosX()),'',str(c.getPosY()),' ',str(F),' ',str(R),' ',str(L),' ',str(c.getDirection()),file=data6) data4.close() data6.close()