Changeset 1936 in genesis for nodes


Ignore:
Timestamp:
Mar 28, 2004, 10:17:28 PM (21 years ago)
Author:
lodewijk
Message:
  • oops, de laatst uitgerekende configuratie werd geplot ipv de beste
  • ondersteun node koppels, zoals bv cetim. maak een file coupled.conf a la

cetim: cetim1 cetim2 cetim3

(zonder indent dan) en ze zullen als 1 node beschouwd worden

  • bestraf interfaces met maar 1 kanaal ertussen (bv 3 en 5) met -1, interfaces met geen kanaal ertussen (bv 3 en 4) met -5 en interfaces op hetzelfde kanaal met -1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • nodes/channelga.py

    r1935 r1936  
    33# fout. wat er wel goed in zit is het parseren van de bestaande situatie en
    44# het scoren van (nu random) configuraties.
    5 
     5#
    66# de score functie is nu redelijk simplistisch:
    77#   - de score van een combinatie van twee interfaces op een node is 1 als er
    8 #     twee of meer kanalen tussen zitten, en -1 als dat niet zo is
     8#     twee of meer kanalen tussen zitten, en -1 als er 1 kanaal tussen zit, -5
     9#     als er geen kanaal tussen zit en -10 als de kanalen hetzelfde zijn
    910#   - de score van een node is de som van de scores van alle combinaties van
    1011#     interfaces van die node, maal het aantal interfaces. dat laatste omdat
     
    1819# recombination gebeuren op de oplossing zelf ipv op een bitstring
    1920# representatie. selection is dom en neemt gewoon de helft beste oplossingen.
     21#
     22# lvoge@cs.vu.nl
    2023import re
    2124import random
     
    4447                for wi in wis:
    4548                        wi.setNode(self)
    46         def wi_byname(self, name):
    47                 wi = filter(lambda wi: wi.name == name, self.wis)
    48                 assert len(wi) == 1
    49                 return wi[0]
    5049        def score(self):
    5150                score = 0
     
    6564                                        if diff > 2:
    6665                                                score = score + 1
     66                                        elif diff == 2:
     67                                                score = score - 1
     68                                        elif diff == 1:
     69                                                score = score - 5
    6770                                        else:
    68                                                 score = score - 1
     71                                                score = score - 10
    6972                score = score * len(self.wis)
    7073                return score
     74
     75class SuperNode(Node):
     76        def __init__(self, name, nodes):
     77                self.name = name
     78                self.nodes = nodes
     79                self.wis = []
     80                for n in nodes:
     81                        self.wis.extend(n.wis)
    7182
    7283class WI:
     
    203214                group.uniq()
    204215
     216def parse_coupled(filename):
     217        try:
     218                for line in open(filename).readlines():
     219                        supername, rest = line[:-1].split(':')
     220                        subnodes = []
     221                        for nodename in rest.split(' '):
     222                                if nodename == '':
     223                                        continue
     224                                node = nodes[nodename]
     225                                del nodes[nodename]
     226                                subnodes.append(node)
     227                        node = SuperNode(supername, subnodes)
     228                        nodes[supername] = node
     229        except:
     230                pass
     231
    205232# END UGLY PARSING CODE
    206233
     
    208235        out.write("digraph plot {\n")
    209236        for essid in groups:
    210                 out.write("\"%s\" [label=\"%s\\n(%d)\"]\n" % (essid, essid, groups[essid].channel))
     237                out.write("\"%s\" [label=\"%s\\n(%d)\"]\n" % (essid, essid, conf[essid]))
    211238        for nodename in nodes.keys():
    212239                for wi in nodes[nodename].wis:
     
    217244
    218245parse_metafile('l')
     246parse_coupled('coupled.conf')
    219247
    220248for essid in groups.keys():
     
    226254        population.append(conf)
    227255
    228 for iteration in range(1000):
     256last_high_score = -10000000
     257iterations_since_new_high_score = 0
     258while iterations_since_new_high_score < 1000:
    229259        for i in range(0, 9):
    230260                p = population[i].copy()
     
    233263                population[i + 10].mutate(0.05)
    234264        population.sort(lambda a, b: cmp(b.score(), a.score()))
    235         print population[0].score(), map(lambda g: g.channel, groups.values())
     265        high_score = population[0].score()
     266        if high_score > last_high_score:
     267                last_high_score = high_score
     268                iterations_since_new_high_score = 0
     269        iterations_since_new_high_score = iterations_since_new_high_score + 1
     270        print high_score
    236271plot_configuration(population[0].conf, open("foo.dot", 'w'))
    237272os.system('neato -Gstart=foo -Goverlap=false/scale -Gsplines=true -Gsep=2 -Gratio=fill -Gnslimit=50.0 -Grotate=90 -Gsize="11,7.5" -Tps -o channelga.ps foo.dot')
Note: See TracChangeset for help on using the changeset viewer.