Generate monitors for each actor in the system
        :return:

def generate_monitors(self):
        """
        Generate monitors for each actor in the system
        :return:
        """
        submons = []
        for a in self.actors:
            # Get all remote formula
            remotes = a.formula.walk(filter_type=At)
            # Compute formula hash
            for f in remotes:
                f.compute_hash(sid=a.name)

            # Create the global monitor for the actor
            a.monitor = Dtlmon(a.formula, a.trace)

            # Create the remote sub monitors for each @Formula
            for f in remotes:
                remote_actor = self.get_actor(f.agent)
                remote_actor.submons.append(Dtlmon(formula=f.inner, trace=remote_actor.trace, parent=remote_actor.monitor, fid=f.fid))
                submons.append({"fid": f.fid, "actor": remote_actor.name})

            # Create the com entry in the system
            for a2 in self.actors:
                self.coms["%s->%s" % (a.name, a2.name)] = []
                self.coms["%s->%s" % (a2.name, a.name)] = []

        # Create the general KV structure
        kv = self.kv_implementation()
        for m in submons:
            kv.add_entry(self.kv_implementation.Entry(m["fid"], agent=m["actor"], value=Boolean3.Unknown, timestamp=0))

        # Add a copy of KV structure for each actor
        for a in self.actors:
            a.monitor.KV = copy.deepcopy(kv)