Changeset 1937 in genesis


Ignore:
Timestamp:
Mar 28, 2004, 11:20:44 PM (21 years ago)
Author:
lodewijk
Message:

mogelijkheid erbij om extra scores te geven per node per kanaal. bv de onbruikbare kanalen bij cope zouden -100 kunnen krijgen ofzo. maak een file 'special.conf' met:

cope -100 8 9 10

dus nodename, score, kanalen, allemaal space-separated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • nodes/channelga.py

    r1936 r1937  
    1 # experiment met een genetisch algoritme voor de kanalenplanning
     1# experiment met evolutionary programming voor de kanalenplanning
    22# het genetische zit er nu nauwelijks in, en wat er in zit is ongetwijfeld
    33# fout. wat er wel goed in zit is het parseren van de bestaande situatie en
     
    3838        return d.keys()
    3939
    40 def multiget(d, ks):
    41         return map(lambda k: d[k], ks)
    42 
    4340class Node:
    4441        def __init__(self, name, wis):
    4542                self.name = name
    4643                self.wis = wis
     44                self.special = {}
    4745                for wi in wis:
    4846                        wi.setNode(self)
     
    7068                                        else:
    7169                                                score = score - 10
     70                        if self.special.has_key(wi_i.group.channel):
     71                                score = score + self.special[wi_i.group.channel]
    7272                score = score * len(self.wis)
    7373                return score
    74 
     74        def setSpecialScoreForChannels(self, score, channels):
     75                for c in channels:
     76                        self.special[c] = score
     77
     78# een supernode is een verzameling subnodes, bv cetim1, cetim2 en cetim3.
    7579class SuperNode(Node):
    7680        def __init__(self, name, nodes):
     
    7882                self.nodes = nodes
    7983                self.wis = []
     84                self.special = {}
    8085                for n in nodes:
    8186                        self.wis.extend(n.wis)
     
    103108                self.wis = uniq(self.wis)
    104109
     110# een configuratie is een bepaalde bedeling van kanalen aan groepen. aangezien
     111# groepen keyed zijn op essid is de concrete configuratie hier een dict van
     112# essids naar kanalen.
    105113class Configuration:
    106114        def __init__(self):
     
    137145                points = [random.randint(0, len(essids) - 1) for i in range(numpoints)]
    138146                points.sort()
    139                 conf = []
     147                conf = {}
    140148                who = 0
    141149                lastpoint = 0
     
    143151                        point = points.pop(0)
    144152                        if who == 0:
    145                                 l = self.conf[lastpoint:point]
     153                                d = self.conf
    146154                        else:
    147                                 l = partner.conf[lastpoint:point]
     155                                d = partner.conf
    148156                        who = 1 - who
    149                         conf.extend(l)
     157                        for i in range(lastpoint, point + 1):
     158                                conf[essids[i]] = d[essids[i]]
    150159                        lastpoint = point
    151160                if who == 0:
    152                         l = self.conf[lastpoint:]
     161                        d = self.conf
    153162                else:
    154                         l = partner.conf[lastpoint:]
    155                 conf.extend(l)
     163                        d = partner.conf
     164                for i in range(lastpoint, len(essids)):
     165                        conf[essids[i]] = d[essids[i]]
    156166                assert len(conf) == len(groups)
    157167                self.conf = conf
     
    230240                pass
    231241
     242def parse_special(filename):
     243        for line in open(filename).readlines():
     244                fields = line[:-1].split(' ')
     245                nodename = fields[0]
     246                score = int(fields[1])
     247                channels = map(lambda c: int(c), fields[2:])
     248                nodes[nodename].setSpecialScoreForChannels(score, channels)
     249
    232250# END UGLY PARSING CODE
    233251
     
    235253        out.write("digraph plot {\n")
    236254        for essid in groups:
    237                 out.write("\"%s\" [label=\"%s\\n(%d)\"]\n" % (essid, essid, conf[essid]))
     255                out.write("\"%s\" [shape=box label=\"%s\\n(%d)\"]\n" % (essid, essid, conf[essid]))
    238256        for nodename in nodes.keys():
    239257                for wi in nodes[nodename].wis:
     
    245263parse_metafile('l')
    246264parse_coupled('coupled.conf')
     265parse_special('special.conf')
    247266
    248267for essid in groups.keys():
Note: See TracChangeset for help on using the changeset viewer.