def drive(self, carstate: State): X=np.zeros((1,41)) # # print("mehmeh",carstate) # # X[0]=carstate.speed with open('model.json', 'r') as json_file: loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # load weights into new model loaded_model.load_weights("model.h5") print("Loaded model from disk") X[0][0]=carstate.angle print('meh') X[0][1]=carstate.speed_x/280 # X[3]=carstate.distance_from_start X[0][21]=carstate.distances_from_edge[0]/200 X[0][22]=carstate.distances_from_edge[1]/200 X[0][23]=carstate.distances_from_edge[2]/200 X[0][24]=carstate.distances_from_edge[3]/200 X[0][25]=carstate.distances_from_edge[4]/200 X[0][26]=carstate.distances_from_edge[5]/200 X[0][27]=carstate.distances_from_edge[6]/200 X[0][28]=carstate.distances_from_edge[7]/200 X[0][29]=carstate.distances_from_edge[8]/200 X[0][30]=carstate.distances_from_edge[9]/200 X[0][31]=carstate.distances_from_edge[10]/200 X[0][32]=carstate.distances_from_edge[11]/200 X[0][33]=carstate.distances_from_edge[12]/200 X[0][34]=carstate.distances_from_edge[13]/200 X[0][35]=carstate.distances_from_edge[14]/200 X[0][36]=carstate.distances_from_edge[15]/200 X[0][37]=carstate.distances_from_edge[16]/200 X[0][38]=carstate.distances_from_edge[17]/200 X[0][39]=carstate.distances_from_edge[18]/200 # print(carstate.distances_from_edge[19]) X[0][40]=carstate.distance_from_center X[0][2]= carstate.opponents[0]/200 X[0][3]= carstate.opponents[1]/200 X[0][4]=carstate.opponents[2]/200 X[0][5]= carstate.opponents[3]/200 X[0][6]=carstate.opponents[4]/200 X[0][7]= carstate.opponents[5]/200 X[0][8]= carstate.opponents[6]/200 X[0][9]= carstate.opponents[7]/200 X[0][10]= carstate.opponents[8]/200 X[0][11]= carstate.opponents[9]/200 X[0][12]= carstate.opponents[10]/200 X[0][13]=carstate.opponents[11]/200 X[0][14]= carstate.opponents[12]/200 X[0][15]= carstate.opponents[13]/200 X[0][16]= carstate.opponents[14]/200 X[0][17]= carstate.opponents[15]/200 X[0][18]= carstate.opponents[16]/200 X[0][19]= carstate.opponents[17]/200 X[0][20]= carstate.opponents[19]/200 # fitnesses = [] sumofSensors=0 for i in range(19): sumofSensors+=np.sqrt(carstate.distances_from_edge[i]) # print((summ*0.3)+50) #action = self.net.advance(X, 1, 10) print('mehblahmeh') #------------------------------------------------------------------------------- action=loaded_model.predict(X,batch_size=1,verbose=1) print('mehblahmeh',action) # exit() #------------------------------------------------------------------------------- # front=((carstate.distances_from_edge[8]+carstate.distances_from_edge[9])/2) # brakeoff=0 # if front<100 : # manualSpeed=70 # if not self.flag: # brakeOff=0.50 # self.flag=True # else: # brakeOff=0 # else: # self.flag=False # brakeOff=0 # manualSpeed=front+50 # # print(front) # # print(action) # # print("heeeey") # summ=np.zeros(6) # for i in range(len(X[4:])): # # print(len(X[4:])) # if i <4 : # summ[0]+=X[i] # elif i<7: # summ[1]+=X[i] # elif i<9: # summ[2]+=X[i] # elif i<11: # summ[3]+=X[i] # elif i<14: # summ[4]+=X[i] # elif i<18: # summ[5]+=X[i] command = Command() # if carstate.gear ==3: # gear=3 # v_x= (action[0]*170)+40#(sumofSensors*1.3)#((action[2]*250)**2)+70 # self.accelerate(carstate, v_x, command) # print(command.accelerator) # averages=np.zeros(10) # averages[0]=summ[0]/4 # averages[1]=summ[1]/3*5 # averages[2]=summ[2]/2*15 # averages[3]=summ[3]/2*15 # averages[4]=summ[4]/3*5 # averages[5]=summ[5]/4 # averages[6]=X[0] # averages[7]=X[1] # averages[8]=X[2] # averages[9]=command.accelerator gear=carstate.gear # X[0]=carstate. # X[0]=carstate.speed # gear=carstate.gear # inp=np.zeros(3) # inp[0]=command.accelerator # inp[1]=X[1] # inp[2]=X[2] # # X[0]=carstate. # X[0]=carstate.speed Kp=0.003 dfromC=carstate.distance_from_center # if carstate.distance_from_center==-1: # dfromC=-10 # elif carstate.distance_from_center==1: # dfromC=10 error=(carstate.angle-dfromC*12) pidoff=Kp*carstate.angle*100 pid=Kp*error # print(action) # print(pid) # X=list(carstate) # print(X) #self.net.Input(X) #self.net.Activate() #action = self.net.Output() # # print(action,"mehblah") # # # if y[0][0] > 0: # ((action[0]*2)-1)*0.7 # x=np.array(()) # self.steer(carstate,0, command) # # else: # # command.brake = min(-acceleration, 1) # steer=action[0] # if (action[0]*2)-1<-0.2: # steer=-0.2 # elif (action[0])*2-1>0.2: # steer=0.2 # brake=0.01 # if action[1]>0.8: # accel=0.8 # elif action[1]<0.4: # accel=0.4 # steeraction=action.index(max(action)) # if steeraction==0: # command.steering=-0.7 # elif steeraction==1: # command.steering=-0.4 # elif steeraction==2: # command.steering=-0.2 # elif steeraction==3: # command.steering=-0.1 # elif steeraction==4: # command.steering=-0.05 # elif steeraction==5: # command.steering=0 # elif steeraction==6: # command.steering=0.05 # elif steeraction==7: # command.steering=0.1 # elif steeraction==8: # command.steering=0.2 # elif steeraction==9: # command.steering=0.4 # elif steeraction==10: # command.steering=0.7 # brake=action[2] # if action[2]>0.2: # brake=0.2 # elif action[1]<0.4: # accel=0.4 # v_x = (((((action[2]-1)*-1)**2)-1)*-1*100)+95 # if carstate.rpm < 2500: # command.gear = carstate.gear - 1 # if not command.gear: # command.gear = 1 # print("mehblah",carstate.distance_from_center) # self.data_logger.log(carstate,command) # print(y) # if carstate.distance_from_center>1.5 or carstate.distance_from_center<-1.5: # self.data_logger.close() # self.data_logger = None # else: # if carstate.distances_from_edge[8]<65 and carstate.distances_from_edge[8]>0: # command.brake=(((carstate.distances_from_edge[8]/65)-1)*-1)**3 # # if carstate.distances_from_edge[8]==-1.0: # command.brake=0 # command.accelerator=0.8 # command.steering=pidoff # print(action) # print((action[0]*2)-1) if carstate.rpm>7000: gear+=1 elif carstate.gear==0: gear+=1 elif carstate.rpm<2000 and X[0][1]>10: print(X[0][1]) gear-=1 # if command.accelerator==0: # command.brake=0.02 # else: # command.brake=0 print('blahandreas',action[0][0]) command.accelerator=1#float(action[0][0])+2#0.4#accel#y[0][0] command.brake=action[0][1]#abs(pid)*2#y[0][1]*y[0][1] command.steering=action[0][2] # command.steering=((action[0]*2)-1)*0.7#steer command.gear=gear command.focus=0 # command.gear=1 # print(command) # print(command) return command
def drive(self, carstate: State): X=np.zeros(22) # # print("mehmeh",carstate) # # X[0]=carstate.speed X[0]=carstate.speed_x/220 X[1]=carstate.angle # X[3]=carstate.distance_from_start X[3]=np.sqrt(carstate.distances_from_edge[0]/200) X[4]=np.sqrt(carstate.distances_from_edge[1]/200) X[5]=np.sqrt(carstate.distances_from_edge[2]/200) X[6]=np.sqrt(carstate.distances_from_edge[3]/200) X[7]=np.sqrt(carstate.distances_from_edge[4]/200) X[8]=np.sqrt(carstate.distances_from_edge[5]/200) X[9]=np.sqrt(carstate.distances_from_edge[6]/200) X[10]=np.sqrt(carstate.distances_from_edge[7]/200) X[11]=np.sqrt(carstate.distances_from_edge[8]/200) X[12]=np.sqrt(carstate.distances_from_edge[9]/200) X[13]=np.sqrt(carstate.distances_from_edge[10]/200) X[14]=np.sqrt(carstate.distances_from_edge[11]/200) X[15]=np.sqrt(carstate.distances_from_edge[12]/200) X[16]=np.sqrt(carstate.distances_from_edge[13]/200) X[17]=np.sqrt(carstate.distances_from_edge[14]/200) X[18]=np.sqrt(carstate.distances_from_edge[15]/200) X[19]=np.sqrt(carstate.distances_from_edge[16]/200) X[20]=np.sqrt(carstate.distances_from_edge[17]/200) X[21]=np.sqrt(carstate.distances_from_edge[18]/200) # print(carstate.distances_from_edge[19]) X[2]=carstate.distance_from_center # X[22]= np.cbrt(carstate.opponents[0]/200) # X[23]= np.cbrt(carstate.opponents[1]/200) # X[24]=np.cbrt(carstate.opponents[2]/200) # X[25]= np.cbrt( carstate.opponents[3]/200) # X[26]=np.cbrt(carstate.opponents[4]/200) # X[27]= np.cbrt(carstate.opponents[5]/200) # X[28]= np.cbrt(carstate.opponents[6]/200) # X[29]= np.cbrt(carstate.opponents[7]/200) # X[30]= np.cbrt(carstate.opponents[8]/200) # X[31]= np.cbrt(carstate.opponents[9]/200) # X[32]= np.cbrt(carstate.opponents[10]/200) # X[33]=np.cbrt(carstate.opponents[11]/200) # X[34]= np.cbrt(carstate.opponents[12]/200) # X[35]= np.cbrt(carstate.opponents[13]/200) # X[36]= np.cbrt(carstate.opponents[14]/200) # X[37]= np.cbrt(carstate.opponents[15]/200) # X[38]= np.cbrt(carstate.opponents[16]/200) # X[39]= np.cbrt( carstate.opponents[17]/200) # X[40]=np.cbrt( carstate.opponents[19]/200) # fitnesses = [] sumofSensors=0 for i in range(19): sumofSensors+=np.sqrt(carstate.distances_from_edge[i]) # print((summ*0.3)+50) sensOff=0 for i in range(19): if i<10: sensOff+=np.sqrt(carstate.distances_from_edge[i]) else: sensOff-=np.sqrt(carstate.distances_from_edge[i]) front=((carstate.distances_from_edge[8]+carstate.distances_from_edge[9])/2) brakeoff=0 if front<100 : manualSpeed=70 if not self.flag: brakeOff=0.50 self.flag=True else: brakeOff=0 else: self.flag=False brakeOff=0 manualSpeed=front+50 # print(front) # print(action) # print("heeeey") summ=np.zeros(6) for i in range(len(X[4:])): # print(len(X[4:])) if i <4 : summ[0]+=X[i] elif i<7: summ[1]+=X[i] elif i<9: summ[2]+=X[i] elif i<11: summ[3]+=X[i] elif i<14: summ[4]+=X[i] elif i<18: summ[5]+=X[i] command = Command() # if carstate.gear ==3: # gear=3 v_x= (sumofSensors*1.3)#((action[2]*250)**2)+70 self.accelerate(carstate, v_x, command) # print(command.accelerator) averages=np.zeros(10) averages[0]=summ[0]/4 averages[1]=summ[1]/3*5 averages[2]=summ[2]/2*15 averages[3]=summ[3]/2*15 averages[4]=summ[4]/3*5 averages[5]=summ[5]/4 averages[6]=X[0] averages[7]=X[1] averages[8]=X[2] averages[9]=command.accelerator gear=carstate.gear # X[0]=carstate. # X[0]=carstate.speed # gear=carstate.gear inp=np.zeros(3) inp[0]=sensOff #command.accelerator # inp[1]=X[1] # inp[2]=X[2] # # X[0]=carstate. # X[0]=carstate.speed Kp=0.003 dfromC=carstate.distance_from_center # if carstate.distance_from_center==-1: # dfromC=-10 # elif carstate.distance_from_center==1: # dfromC=10 error=(carstate.angle-dfromC*12) pidoff=Kp*carstate.angle*100 pid=Kp*error # print(action) # print(pid) # X=list(carstate) # print(X) self.net.Input(X) self.net.Activate() action = self.net.Output() # action = self.net.advance(X, 1, 10) command.steering=action[0]-action[1] # steeraction=action.index(max(action)) # if steeraction==0: # command.steering=-0.7 # elif steeraction==1: # command.steering=-0.4 # elif steeraction==2: # command.steering=-0.2 # elif steeraction==3: # command.steering=-0.1 # elif steeraction==4: # command.steering=-0.05 # elif steeraction==5: # command.steering=0 # elif steeraction==6: # command.steering=0.05 # elif steeraction==7: # command.steering=0.1 # elif steeraction==8: # command.steering=0.2 # elif steeraction==9: # command.steering=0.4 # elif steeraction==10: # command.steering=0.7 # # print(action,"mehblah") if carstate.rpm>7000: gear+=1 elif carstate.gear==0: gear+=1 elif carstate.rpm<2000 and X[0]>10: gear-=1 # # # if y[0][0] > 0: # ((action[0]*2)-1)*0.7 # x=np.array(()) # self.steer(carstate, ((action[0]*2)-1)*0.7, command) # # else: # # command.brake = min(-acceleration, 1) # steer=action[0] # if (action[0]*2)-1<-0.2: # steer=-0.2 # elif (action[0])*2-1>0.2: # steer=0.2 # brake=0.01 # if action[1]>0.8: # accel=0.8 # elif action[1]<0.4: # accel=0.4 # brake=action[2] # if action[2]>0.2: # brake=0.2 # elif action[1]<0.4: # accel=0.4 # v_x = (((((action[2]-1)*-1)**2)-1)*-1*100)+95 # if carstate.rpm < 2500: # command.gear = carstate.gear - 1 # if not command.gear: # command.gear = 1 # print("mehblah",carstate.distance_from_center) # self.data_logger.log(carstate,command) # print(y) # if carstate.distance_from_center>1.5 or carstate.distance_from_center<-1.5: # self.data_logger.close() # self.data_logger = None # else: # if carstate.distances_from_edge[8]<65 and carstate.distances_from_edge[8]>0: # command.brake=(((carstate.distances_from_edge[8]/65)-1)*-1)**3 # # if carstate.distances_from_edge[8]==-1.0: # command.brake=0 # command.accelerator=0.8 # command.steering=pidoff # print(action) # print((action[0]*2)-1) if command.accelerator==0: command.brake=0.02 else: command.brake=0 # command.accelerator=1-action[2]#0.4#accel#y[0][0] # command.brake=((abs(action[0]))-0.5)/5#abs(pid)*2#y[0][1]*y[0][1] # command.steering=((action[1]*2)-1) # command.steering=((action[0]*2)-1)*0.7#steer command.gear=gear command.focus=0 # command.gear=1 # print(command) # print(command) return command