def __init__(self,**args): """ Parameters ---------- 'PN' : Network Personal Network 'net' : Network Global Network 'method' : list of string 'ID' : string 'save' : list """ defaults={'PN':Network(),'net':Network(),'method':['geo','alg'],'model':{},'ID':'0','save':[]} for key, value in defaults.items(): if key in args: setattr(self, key, args[key]) else: setattr(self, key, value) args[key] = value self.args = args self.config = ConfigParser.ConfigParser() self.config.read(pyu.getlong('EMSolver.ini', 'ini')) self.cla = CLA() self.algloc = algloc() self.idx = 0
def __init__(self, **args): defaults = { 'sim': None, 'net': Network(), #'gcom': Gcom(), 'gcom': [], # Temporary 'ID': 0, 'dec': {}, 'devt': {}, 'lcst': [] } ## initialize attributes for key, value in defaults.items(): if key in args: setattr(self, key, args[key]) else: setattr(self, key, value) args[key] = value self.args = args self.gcom = self.args['gcom'] if sys.version_info.major == 2: self.cmdrq = SimEvent('RQ' + str(self.ID), sim=self.sim) # command request else: pass # Python3 implementation not done try: self.PN = self.net.node[self.ID]['PN'] except: self.PN = Network() # self.create_evt() # self.c_init() if sys.version_info.major == 2: Process.__init__(self, name='Tx' + str(self.ID), sim=self.sim) else: pass #Process.__init__(self,env,generator) # Python3 implementation not done Cf = ConfigParser.ConfigParser() Cf.read(pyu.getlong('agent.ini', 'ini')) for s in Cf.sections(): try: d = dict(Cf.items(s)) if d['id'] == self.ID: self.refreshTOA = eval(d['refreshtoa']) break except: pass
def create_network(self): """ create the whole network """ self.net = Network(EMS=self.EMS) self.gcom = Gcom(net=self.net, sim=self) self.create_agent() # create network if str2bool(self.net_opt['network']): self.net.create() # create All Personnal networks for n in self.net.nodes(): self.net.node[n]['PN']._get_wstd() self.net.node[n]['PN']._get_SubNet() self.gcom.create() # create Process Network self.Pnet = PNetwork(net=self.net, net_updt_time=float( self.net_opt['network_update_time']), L=self.L, sim=self, show_sg=str2bool(self.net_opt['show_sg']), disp_inf=str2bool(self.net_opt['dispinfo']), save=eval(self.save_opt['save'])) self.activate(self.Pnet, self.Pnet.run(), 0.0)
def __init__(self, **args): defaults = { 'sim': None, 'net': Network(), 'gcom': Gcom(), 'ID': 0, 'dec': {}, 'devt': {}, 'lcst': [] } ## initialize attributes for key, value in defaults.items(): if args.has_key(key): setattr(self, key, args[key]) else: setattr(self, key, value) args[key] = value self.args = args self.gcom = self.args['gcom'] self.cmdrq = SimEvent('RQ' + str(self.ID), sim=self.sim) # command request try: self.PN = self.net.node[self.ID]['PN'] except: self.PN = Network() # self.create_evt() # self.c_init() Process.__init__(self, name='Tx' + str(self.ID), sim=self.sim) Cf = ConfigParser.ConfigParser() Cf.read(pyu.getlong('agent.ini', 'ini')) for s in Cf.sections(): try: d = dict(Cf.items(s)) if d['id'] == self.ID: self.refreshTOA = eval(d['refreshtoa']) break except: pass
def __init__(self, net=Network(), sim=Simulation()): """ net : pylayers.network.Network """ nx.MultiDiGraph.__init__(self) self.net = net self.sim = sim self.fileini = 'communication.ini' self.dec = {} self.devt = {}
def __init__(self, **args): defaults = { 'sim': None, 'ID': '1', 'net': Network(), #'gcom': Gcom(), 'gcom': [], 'devt': {}, 'refreshRSS': 0.3, 'refreshTOA': 0.3, 'mp': False } ## initialize attributes for key, value in defaults.items(): if key in args: setattr(self, key, args[key]) else: setattr(self, key, value) args[key] = value self.args = args try: self.PN = self.net.node[self.ID]['PN'] except: self.PN = Network() self.create_evt() Process.__init__(self, name='Rx-' + str(self.ID), sim=self.sim) Cf = ConfigParser.ConfigParser() Cf.read(pyu.getlong('agent.ini', 'ini')) for s in Cf.sections(): try: d = dict(Cf.items(s)) if d['id'] == self.ID: self.refreshRSS = eval(d['refreshrss']) self.refreshTOA = eval(d['refreshtoa']) break except: pass
def _gen_net(self): """ generate Network and associated links Notes ----- Create self.N : Network object See Also -------- pylayers.network.network """ # # Create Network # N = Network() # # get devices on bodies # # forall person # forall device for p in self.dpersons: D = [] for dev in self.dpersons[p].dev: aDev = Device(self.dpersons[p].dev[dev]['name'], ID = dev) D.append(aDev) D[-1].ant['A1']['name'] = self.dpersons[p].dev[dev]['file'] D[-1].ant['antenna'] = self.dpersons[p].dev[dev]['ant'] N.add_devices(D, grp=p) # # get access point devices # for ap in self.dap: D = Device(self.dap[ap]['name'], ID = ap) D.ant['antenna'] = self.dap[ap]['ant'] N.add_devices(D, grp = 'ap', p = self.dap[ap]['pos']) N.update_orient(ap, self.dap[ap]['T'], now = 0.) # create Network # # _get_wstd # _get_grp # _connect # _init_PN # N.create() self.N = N
def __init__(self, **args): """ Mobile Agent Init Parameters ---------- 'ID': string agent ID 'name': string Agent name 'typ': string agent typ . 'ag' for moving agent, 'ap' for static acces point 'pos' : np.array([]) numpy array containing the initial position of the agent 'roomId': int Room number where the agent is initialized (Layout.Gr) 'meca_updt': float update time interval for the mechanical process 'loc': bool enable/disable localization process of the agent 'loc_updt': float update time interval for localization process 'L': pylayers.gis.Layout() 'net':pylayers.network.Network(), 'wstd': list of string list of used radio access techology of the agent 'world': transit.world() Soon deprecated 'save': list of string list of save method ( soon deprecated) 'sim':Simpy.SimulationRT.Simulation(), 'epwr': dictionnary dictionnary of emmited power of transsmitter{'wstd#':epwr value} 'sens': dictionnary dictionnary of sensitivity of reveicer {'wstd#':sens value} 'dcond': dictionnary Not used yet 'gcom':pylayers.communication.Gcom() Communication graph 'comm_mod': string Communication between nodes mode: 'autonomous': all TOAs are refreshed regulary 'synchro' : only visilbe TOAs are refreshed """ defaults = {'ID': '0', 'name': 'johndoe', 'typ': 'ag', 'color': 'k', 'pdshow': False, 'pos': np.array([]), 'roomId': -1, 'froom': [], 'wait': [], 'seed': 0, 'cdest': 'random', 'meca_updt': 0.1, 'loc': False, 'loc_updt': 0.5, 'loc_method': ['geo'], 'L': Layout(), 'network': True, 'net': Network(), 'wstd': ['rat1'], 'world': world(), 'save': [], 'sim': Simulation(), 'epwr': {}, 'sens': {}, 'dcond': {}, 'gcom': Gcom(), 'comm_mode': 'autonomous'} for key, value in defaults.items(): if key not in args: args[key] = value self.args = args self.ID = args['ID'] self.name = args['name'] self.typ = args['typ'] # Create Network self.net = args['net'] self.epwr = args['epwr'] self.gcom = args['gcom'] self.sim = args['sim'] self.wstd = args['wstd'] if args['epwr'] == {}: self.epwr = {x: 0 for x in self.wstd} else: self.epwr = args['epwr'] if args['sens'] == {}: self.sens = {x: -180 for x in self.wstd} else: self.sens = args['sens'] try: self.dcond = args['dcond'] except: pass # check if node id already given if self.ID in self.net.nodes(): raise NameError( 'another agent has the ID: ' + self.ID + ' .Please use an other ID') if self.typ == 'ag': # mechanical init self.meca = Person(ID=self.ID, color=args['color'], pdshow=args['pdshow'], roomId=args['roomId'], L=args['L'], net=self.net, interval=args['meca_updt'], wld=args['world'], sim=args['sim'], seed=args['seed'], moving=True, froom=args['froom'], wait=args['wait'], cdest=args['cdest'], save=args['save'] ) self.meca.behaviors = [Seek(), Containment(), Separation(), InterpenetrationConstraint()] self.meca.steering_mind = queue_steering_mind # Network init self.node = Node(ID=self.ID,name=self.name, p=conv_vecarr(self.meca.position), t=self.sim.now(), wstd=args['wstd'], epwr=self.epwr, sens=self.sens, typ=self.typ) self.net.add_nodes_from(self.node.nodes(data=True)) self.sim.activate(self.meca, self.meca.move(), 0.0) self.PN = self.net.node[self.ID]['PN'] # Communication init if args['comm_mode'] == 'synchro' and args['network']: # The TOA requests are made every refreshTOA time ( can be modified in agent.ini) # This Mode will be deprecated in future version self.rxr = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.rxt = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.sim.activate(self.rxr, self.rxr.refresh_RSS(), 0.0) self.sim.activate(self.rxt, self.rxt.refresh_TOA(), 0.0) elif args['comm_mode'] == 'autonomous' and args['network']: # The requests are made by node only when they are in # visibility of pairs. # self.rxr only manage a refresh RSS process self.rxr = RX(net=self.net, ID=self.ID, gcom=self.gcom, sim=self.sim) # self.tx manage all requests to other nodes self.tx = TX(net=self.net, ID=self.ID, gcom=self.gcom, sim=self.sim) # self.tx replies to requests from self.tx self.rx = RX(net=self.net, ID=self.ID, gcom=self.gcom, sim=self.sim) self.sim.activate(self.rxr, self.rxr.refresh_RSS(), 0.0) self.sim.activate(self.tx, self.tx.request(), 0.0) self.sim.activate(self.rx, self.rx.wait_request(), 0.0) elif self.typ == 'ap': if args['roomId'] == -1: self.node = Node(ID=self.ID, p=self.args['pos'], t=self.sim.now(), wstd=args['wstd'], epwr=self.epwr, sens=self.sens, typ=self.typ) else: pp = np.array(args['L'].Gr.pos[self.args['roomId']]) self.node = Node( ID=self.ID, p=pp, t=self.sim.now(), wstd=args['wstd'], epwr=self.epwr, sens=self.sens, typ=self.typ) self.net.add_nodes_from(self.node.nodes(data=True)) self.sim = args['sim'] self.PN = self.net.node[self.ID]['PN'] self.PN.node[self.ID]['pe'] = self.net.node[self.ID]['p'] if args['comm_mode'] == 'autonomous' and args['network']: self.rx = RX(net=self.net, ID=self.ID, gcom=self.gcom, sim=self.sim) self.sim.activate(self.rx, self.rx.wait_request(), 0.0) p = self.args['pos'] self.posdf = pd.DataFrame( {'t': pd.Timestamp(0), 'x': p[0], 'y': p[1], 'z': p[2], 'vx': np.array([0.0]), 'vy': np.array([0.0]), 'ax': np.array([0.0]), 'ay': np.array([0.0]), }, columns=['t', 'x', 'y', 'z', 'vx', 'vy', 'ax', 'ay'], index=np.array([0])) else: raise NameError( 'wrong agent typ, it must be either agent (ag) or acces point (ap) ') if self.typ == 'ap': self.MoA = 1 else: self.MoA = 0 if 'mysql' in args['save']: config = ConfigParser.ConfigParser() config.read(pyu.getlong('simulnet.ini', 'ini')) sql_opt = dict(config.items('Mysql')) db = Database(sql_opt['host'], sql_opt['user'], sql_opt['passwd'], sql_opt['dbname']) db.writenode(self.ID, self.name, self.MoA) if 'txt' in args['save']: pyu.writenode(self) if self.typ != 'ap' and args['loc']: self.loc = Localization(net=self.net, ID=self.ID, method=args['loc_method']) self.Ploc = PLocalization(loc=self.loc, loc_updt_time=args['loc_updt'], tx=self.tx, sim=args['sim']) self.sim.activate(self.Ploc, self.Ploc.run(), 1.5)
def __init__(self, **args): """ Mobile Agent Init Parameters ---------- 'ID': string agent ID 'name': string Agent name 'type': string agent type . 'ag' for moving agent, 'ap' for static acces point 'pos' : np.array([]) numpy array containing the initial position of the agent 'roomId': int Room number where the agent is initialized (Layout.Gr) 'meca_updt': float update time interval for the mechanical process 'loc': bool enable/disable localization process of the agent 'loc_updt': float update time interval for localization process 'Layout': pylayers.gis.Layout() 'net':pylayers.network.Network(), 'RAT': list of string list of used radio access techology of the agent 'world': transit.world() Soon deprecated 'save': list of string list of save method ( soon deprecated) 'sim':Simpy.SimulationRT.Simulation(), 'epwr': dictionnary dictionnary of emmited power of transsmitter{'rat#':epwr value} 'sens': dictionnary dictionnary of sensitivity of reveicer {'rat#':sens value} 'dcond': dictionnary Not used yet 'gcom':pylayers.communication.Gcom() Communication graph 'comm_mod': string Communication between nodes mode: 'autonomous': all TOAs are refreshed regulary 'synchro' : only visilbe TOAs are refreshed """ defaults = { 'ID': 0, 'name': 'johndoe', 'type': 'ag', 'pos': np.array([]), 'roomId': 0, 'froom': [], 'wait': [], 'cdest': 'random', 'meca_updt': 0.1, 'loc': False, 'loc_updt': 0.5, 'loc_method': ['geo'], 'Layout': Layout(), 'net': Network(), 'RAT': ['wifi'], 'world': world(), 'save': [], 'sim': Simulation(), 'epwr': {}, 'sens': {}, 'dcond': {}, 'gcom': Gcom(), 'comm_mode': 'autonomous' } for key, value in defaults.items(): if key not in args: args[key] = value self.args = args self.ID = args['ID'] self.name = args['name'] self.type = args['type'] # Create Network self.net = args['net'] self.epwr = args['epwr'] self.gcom = args['gcom'] try: self.dcond = args['dcond'] except: pass if self.type == 'ag': # mechanical init self.meca = Person(ID=self.ID, roomId=args['roomId'], L=args['Layout'], net=self.net, interval=args['meca_updt'], wld=args['world'], sim=args['sim'], moving=True, froom=args['froom'], wait=args['wait'], cdest=args['cdest'], save=args['save']) self.meca.behaviors = [Queuing(),Seek(), Containment(),\ Separation(), InterpenetrationConstraint()] self.meca.steering_mind = queue_steering_mind # self.meca.steering_mind = queue_steering_mind # filll in network ## Network init self.node = Node(ID=self.ID, p=conv_vecarr(self.meca.position), t=time.time(), RAT=args['RAT'], epwr=args['epwr'], sens=args['sens'], type=self.type) self.net.add_nodes_from(self.node.nodes(data=True)) self.sim = args['sim'] self.sim.activate(self.meca, self.meca.move(), 0.0) self.PN = self.net.node[self.ID]['PN'] ## Communication init if args['comm_mode'] == 'synchro': ## The TOA requests are made every refreshTOA time ( can be modified in agent.ini) self.rxr = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.rxt = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.sim.activate(self.rxr, self.rxr.refresh_RSS(), 0.0) self.sim.activate(self.rxt, self.rxt.refresh_TOA(), 0.0) elif args['comm_mode'] == 'autonomous': ## The TOA requests are made by node only when they are in visibility of pairs. self.rxr = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.rxt = RX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.txt = TX(net=self.net, ID=self.ID, dcond=self.dcond, gcom=self.gcom, sim=self.sim) self.sim.activate(self.rxr, self.rxr.refresh_RSS(), 0.0) self.sim.activate(self.rxt, self.rxt.wait_TOArq(), 0.0) self.sim.activate(self.txt, self.txt.request_TOA(), 0.0) elif self.type == 'ap': if args['roomId'] == -1: self.node = Node(ID=self.ID, p=self.args['pos'], t=time.time(), RAT=args['RAT'], epwr=args['epwr'], sens=args['sens'], type=self.type) else: pp = np.array(args['Layout'].Gr.pos[self.args['roomId']]) self.node = Node(ID=self.ID, p=pp, t=time.time(), RAT=args['RAT'], epwr=args['epwr'], sens=args['sens'], type=self.type) self.net.add_nodes_from(self.node.nodes(data=True)) self.sim = args['sim'] # self.sim.activate(self.meca, self.meca.move(),0.0) self.PN = self.net.node[self.ID]['PN'] self.PN.node[self.ID]['pe'] = self.net.node[self.ID]['p'] else: raise NameError( 'wrong agent type, it must be either agent (ag) or acces point (ap) ' ) if self.type == 'ap': self.MoA = 1 else: self.MoA = 0 if 'mysql' in args['save']: config = ConfigParser.ConfigParser() config.read(pyu.getlong('simulnet.ini', 'ini')) sql_opt = dict(config.items('Mysql')) db = Database(sql_opt['host'], sql_opt['user'], sql_opt['passwd'], sql_opt['dbname']) db.writenode(self.ID, self.name, self.MoA) if 'txt' in args['save']: pyu.writenode(self) if args['loc'] and self.type != 'ap': self.loc = Localization(net=self.net, ID=self.ID, method=args['loc_method']) self.Ploc = PLocalization(loc=self.loc, loc_updt_time=args['loc_updt'], sim=args['sim']) self.sim.activate(self.Ploc, self.Ploc.run(), 1.5)
def __init__(self, ID=0, interval=0.05, roomId=0, L=[], net=Network(), wld=world(), sim=None, moving=True, froom=[], wait=1.0, cdest='random', save=[]): """ Class Person inherits of Simpy.SimulationRT Attributes ---------- ID : float/hex/str/... agent Id interval : float refresh interval of agent mobility roomId : int room ID where agent start when simulation is launched L : pylayers.gis.layout.Layout() Layout instance, in which the agent is moving net : pylayers.network.Network() Network instance, in which network agent are communicating. This is used for fill the true position filed of the graph It must be removed in a further version ( when a proper save instance would be created) wld : pylayers.mobility.transit.world.world() world instance. equivalent to layout but in the pytk framework. TODO : remove in a further version sim : SimPy.Simulation.Simulation.RT() Simulation instance share by all the pylayer project. moving : bool indicate if the agent is moving or not ( relevant for acces poitns) froom : list list of forbiden rooms. wait : float wait time of the agent when he has reach teh desitaion cdest : str method for choosing setination 'random ' of file read save : list list of save option type . It will be removed in a further version ( when a proper save instance would be created) Method ------ Move : make the agent move update : DEPRECATED used for Tkinter plot """ #GeomNetType = np.dtype([('Id',int), # ('time',int), # ('p',float,(1,3)), # ('v',float,(1,3)), # ('a',float,(1,3))]) Person.npers += 1 Process.__init__(self, name='Person_ID' + str(ID), sim=sim) self.ID = ID self.L = L self.world = wld self.interval = interval self.manager = None self.manager_args = [] self.waypoints = [] self.moving = moving self.roomId = roomId self.forbidroomId = froom self.cdest = cdest # choose tdestination type if self.cdest == 'random': self.nextroomId = int(np.floor(uniform(0, self.L.Gr.size()))) while self.nextroomId == self.roomId or ( self.nextroomId in self.forbidroomId ): # or (self.nextroomId in self.sim.roomlist): # test destination different de l'arrive self.nextroomId = int(np.floor(uniform(0, self.L.Gr.size()))) #self.sim.roomlist.append(self.nextroomId) # list of all destiantion of all nodes in object sim elif self.cdest == 'file': cfg = ConfigParser.ConfigParser() cfg.read(pyu.getlong('nodes_destination.ini', 'ini')) self.room_seq = eval(dict(cfg.items(self.ID))['room_seq']) self.room_wait = eval(dict(cfg.items(self.ID))['room_wait']) print 'WARNING: when nodes_destination ini file is read:' print '1) the room initialization starts in the first room of the list, not in the room configured in agent.ini' print '2) forbiden rooms are neglected' self.room_counter = 1 self.nb_room = len(self.room_seq) self.roomId = self.room_seq[0] self.nextroomId = self.room_seq[self.room_counter] self.wait = self.room_wait[self.room_counter] #self.sim.roomlist.append(self.nextroomId) # list of all destiantion of all nodes in object sim self.wp = self.L.waypointGw(self.roomId, self.nextroomId) for tup in self.wp[1:]: self.waypoints.append(vec3(tup)) try: self.position = vec3(L.Gr.pos[self.roomId][0], L.Gr.pos[self.roomId][1]) except: self.position = vec3() # self.old_pos = vec3() self.stuck = 0 self.destination = self.waypoints[0] self.velocity = vec3() self.localx = vec3(1, 0) self.localy = vec3(0, 1) self.world.add_boid(self) # from Helbing, et al "Self-organizing pedestrian movement" self.max_speed = 1.2 #normalvariate(1.0, 0.26) self.desired_speed = self.max_speed self.radius = normalvariate(self.average_radius, 0.025) / 2 self.intersection = vec3() self.arrived = False self.endpoint = False self.behaviors = [] self.steering_mind = default_steering_mind self.cancelled = 0 self.net = net self.wait = wait self.save = save if 'mysql' in self.save: config = ConfigParser.ConfigParser() config.read(pyu.getlong('simulnet.ini', 'ini')) sql_opt = dict(config.items('Mysql')) self.db = Database(sql_opt['host'], sql_opt['user'], sql_opt['passwd'], sql_opt['dbname']) self.date = datetime.datetime.now()
def __init__(self, net=Network(), sim=Simulation()): nx.MultiDiGraph.__init__(self) self.net = net self.sim = sim
def __init__(self, ID=0, interval=0.05, roomId=-1, L=[], net=Network(), wld=world(), seed=0, sim=None, moving=True, froom=[], wait=1.0, cdest='random', save=[], color='k', pdshow=False): """ Class Person inherits of Simpy.SimulationRT """ #GeomNetType = np.dtype([('Id',int), # ('time',int), # ('p',float,(1,3)), # ('v',float,(1,3)), # ('a',float,(1,3))]) Person.npers += 1 Process.__init__(self, name='Person_ID' + str(ID), sim=sim) self.ID = ID self.color = color self.pdshow = pdshow self.L = L self.world = wld self.interval = interval self.manager = None self.manager_args = [] self.waypoints = [] self.moving = moving # random.seed(seed) if roomId < 0: try: self.roomId = random.sample(self.L.Gr.nodes(), 1)[0] except: raise NameError( 'This error is due to the lack of Gr graph in the Layout argument passed to Person(Object)' ) else: self.roomId = roomId self.forbidroomId = froom self.cdest = cdest # choose tdestination type if self.cdest == 'random': # self.nextroomId = int(np.floor(random.uniform(0,self.L.Gr.size()))) try: self.nextroomId = random.sample(self.L.Gr.nodes(), 1)[0] except: raise NameError( 'This error is due to the lack of Gr graph in the Layout argument passed to Person(Object)' ) while self.nextroomId == self.roomId or ( self.nextroomId in self.forbidroomId ): # or (self.nextroomId in self.sim.roomlist): # test destination different de l'arrive # self.nextroomId = int(np.floor(random.uniform(0,self.L.Gr.size()))) self.nextroomId = random.sample(self.L.Gr.nodes(), 1)[0] #self.sim.roomlist.append(self.nextroomId) # list of all destiantion of all nodes in object sim elif self.cdest == 'file': cfg = ConfigParser.ConfigParser() cfg.read(pyu.getlong('nodes_destination.ini', 'ini')) self.room_seq = eval(dict(cfg.items(self.ID))['room_seq']) self.room_wait = eval(dict(cfg.items(self.ID))['room_wait']) print 'WARNING: when nodes_destination ini file is read:' print '1) the room initialization starts in the first room of the list, not in the room configured in agent.ini' print '2) forbiden rooms are neglected' self.room_counter = 1 self.nb_room = len(self.room_seq) self.roomId = self.room_seq[0] self.nextroomId = self.room_seq[self.room_counter] self.wait = self.room_wait[self.room_counter] #self.sim.roomlist.append(self.nextroomId) # list of all destiantion of all nodes in object sim self.rooms, self.wp = self.L.waypointGw(self.roomId, self.nextroomId) # self.dlist = [i in self.L.Gw.ldo for i in self.rooms] for tup in self.wp[1:]: self.waypoints.append(vec3(tup)) try: self.position = vec3(L.Gr.pos[self.roomId][0], L.Gr.pos[self.roomId][1]) except: self.position = vec3() # self.old_pos = vec3() self.stuck = 0 self.destination = self.waypoints[0] self.arrived_in = False self.velocity = vec3() self.acceleration = vec3() self.localx = vec3(1, 0) self.localy = vec3(0, 1) self.world.add_boid(self) # from Helbing, et al "Self-organizing pedestrian movement" maxspeed = 0.8 self.max_speed = maxspeed #random.normalvariate(maxspeed, 0.1) self.desired_speed = maxspeed self.radius = self.average_radius #random.normalvariate(self.average_radius, 0.025) / 2 self.intersection = vec3() self.arrived = False self.endpoint = False self.behaviors = [] self.steering_mind = default_steering_mind self.cancelled = 0 self.net = net self.wait = wait self.df = pd.DataFrame(columns=['t', 'x', 'y', 'vx', 'vy', 'ax', 'ay']) self.df._metadata = self.ID self.save = save if 'mysql' in self.save: config = ConfigParser.ConfigParser() config.read(pyu.getlong('simulnet.ini', 'ini')) sql_opt = dict(config.items('Mysql')) self.db = Database(sql_opt['host'], sql_opt['user'], sql_opt['passwd'], sql_opt['dbname']) self.date = datetime.datetime.now()