コード例 #1
0
    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
コード例 #2
0
ファイル: communication.py プロジェクト: yukihui/pylayers
    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
コード例 #3
0
    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)
コード例 #4
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
コード例 #5
0
    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 = {}
コード例 #6
0
ファイル: communication.py プロジェクト: yukihui/pylayers
    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
コード例 #7
0
    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
コード例 #8
0
    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)
コード例 #9
0
ファイル: agent.py プロジェクト: mlaaraie/pylayers
    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)
コード例 #10
0
ファイル: Person.py プロジェクト: mlaaraie/pylayers
    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()
コード例 #11
0
ファイル: communication.py プロジェクト: mlaaraie/pylayers
 def __init__(self, net=Network(), sim=Simulation()):
     nx.MultiDiGraph.__init__(self)
     self.net = net
     self.sim = sim
コード例 #12
0
ファイル: Person.py プロジェクト: sidnircarlos/newPyLayer
    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()