def onSubmit(self, e):
        '''
        Take user selection and pass it to the GA for 
        fitness evaluation.
        '''
        feedback = None
        # get user input
        inject_genomes = self.cogaPanel.getPeerGenomes()
        if inject_genomes['best']:
            print 'inject_genomes ', inject_genomes
            feedback = None

            self.cogaPanel.clearFeedback()
            panels_to_display = gaParams.step(feedback, self.displayPanel, inject_genomes)
            self.display(panels_to_display)

            self.generation += gaParams.getVar('stepSize')
            self.genLabel.SetLabel('Generation %d' % self.generation)

        elif not inject_genomes['best']:
            feedback = self.displayPanel.getUserInput()
            if feedback:
                print 'inject_genomes ', inject_genomes

                self.cogaPanel.clearFeedback()
                panels_to_display = gaParams.step(feedback, self.displayPanel, inject_genomes)
                self.display(panels_to_display)

                self.generation += gaParams.getVar('stepSize')
                self.genLabel.SetLabel('Generation %d' % self.generation)
    def addPanels(self, panels, expand = True):
        panel_num = len(panels)
        self.child_panels = panels
        rowSize = 3

        if gaParams.getVar('gui'):
            space = (5, 5)
        else:
            space = (20, 20)

        if gaParams.params.has_key('rowSize'):
            rowSize = gaParams.params['rowSize'] 

        if expand:
            def addtorow(row, panel):
                row.Add(panel, 0, wx.EXPAND)
        else:
            def addtorow(row, panel):
                row.Add(panel, 0)

        self.sizer.AddSpacer(space)
        self.SetFont(wx.Font(11, wx.SWISS, wx.NORMAL,wx.FONTWEIGHT_BOLD))
        self.sizer.Add(wx.StaticText(self, -1, 'My Genomes'), 0, wx.ALIGN_CENTER|wx.EXPAND)
        self.SetFont(self.defFont)

        best_subset = gaParams.getVar('population')['subset']['size']
        for i in xrange(0, best_subset, rowSize):
            row = wx.BoxSizer(wx.HORIZONTAL)
            row.AddSpacer(space)
            num_cols = min(rowSize, len(panels)-i)

            for j in xrange(num_cols):
                addtorow(row, panels[i+j])

            row.AddSpacer(space)
            addtorow(self.sizer, row)


        self.sizer.AddSpacer((30,50))
        self.SetFont(wx.Font(11, wx.SWISS, wx.NORMAL,wx.FONTWEIGHT_BOLD))
        self.sizer.Add(wx.StaticText(self, -1, 'Rest of Population'), 0, wx.ALIGN_CENTER|wx.EXPAND)
        self.SetFont(self.defFont)

        # add rest of pop
        for i in xrange(best_subset, len(panels), rowSize):
            row = wx.BoxSizer(wx.HORIZONTAL)
            row.AddSpacer(space)
            num_cols = min(rowSize, len(panels)-i)

            for j in xrange(num_cols):
                addtorow(row, panels[i+j])

            row.AddSpacer(space)
            addtorow(self.sizer, row)
        self.sizer.AddSpacer(space)

        self.Scroll(0, 0)
        self.Layout()
    def __init__(self, parent = None, id = wx.NewId(), size = None):
        '''
        GUI window for the GA.
        '''
        wx.Panel.__init__(self, parent, wx.ID_ANY, size = size)

        import leftPanel
        if gaParams.getVar('gui'):
            import rightPanel as _rightPanel
        else:
            import newrightPanel as _rightPanel

        # window splitter
        self.split = wx.SplitterWindow(self, -1, style = wx.SP_3D)
        self.rightPanel = _rightPanel.RightPanel(self.split,
                size = (100, 100), style = wx.RAISED_BORDER | wx.DOUBLE_BORDER)
        self.leftPanel = leftPanel.LeftPanel(self.split,
                size = (100, 100), style = wx.RAISED_BORDER | wx.DOUBLE_BORDER)
        self.split.SplitVertically(self.leftPanel, self.rightPanel, sashPosition=150)

        self.rightPanel.left = self.leftPanel
        self.leftPanel.right = self.rightPanel
        self.leftPanel.onDisconnect(None)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.split, 1, wx.EXPAND)

        self.SetSizer(sizer)

        self.Layout()
        self.Show(True)
    def __init__(self,parent,ID=-1,dimensions=[],description=[],pos=wx.DefaultPosition,size=(220,260)):
        feedbackpanel.FeedbackPanel.__init__(self,parent,ID,size)

        self.parent = parent
        self.SetBackgroundColour(wx.WHITE)
        self.dimensions=dimensions
        self.description=description
        self.SetMinSize(size)

        appVar = gaParams.getVar('application')
        self.width = appVar['plotSizeX']
        self.height = appVar['plotSizeY']

        rooms = {}
        rooms['bath'] = Image.open('app/floorplanner/bath.png')
        rooms['bedroom'] = Image.open('app/floorplanner/bedroom.png')
        rooms['kitchen'] = Image.open('app/floorplanner/kitchen.png')
        rooms['livingroom'] = Image.open('app/floorplanner/livingroom.png')
        self.rooms = rooms
        self.xoffset = 25.0
        self.yoffset = 40.0

        if appVar.has_key('texture') and appVar['texture']:
            self.floorplan = self.draw_pil_texture()
        else:
            self.floorplan = self.draw_pil()

        self.Bind(wx.EVT_PAINT, self.draw)
    def userInput(self, user_selection = []):
        '''
        Takes a list of the indices of the individuals selected 
        by the user during evaluation, and we save the actual
        users on a list, to be used during fitness evaluation.
        It is the programmer's responsibility to decide on
        the meaning of the user feedback.
        '''
        # if feedback provided, otherwise the user selection was made
        # on the injected individuals
        if user_selection:
            user_selected = []

            ops = gaParams.getVar('operators')

            inc_prob = .05
            dec_prob = .05 / len(ops)-1
            for i in user_selection:
                ind = self.subset[i]
                user_selected.append(ind)

                ind_ops = ind.operators
                ind_ops.count(1)
                if ind_ops:
                    for j in xrange(self.op_len):
                        if ind_ops[j]:
                            ops[j] = min(ops[j] + 0.05, 0.9)
                        else:
                            ops[j] = max(ops[j] - 0.05, 0.1)


            print 'ops ', ops

            self.user_selected = user_selected
    def fillCoGAPanels(self):
        '''
        Request genomes from peers to be displayed on collaboration
        panels.
        '''
        if self.online:
            subset_size = gaParams.getVar('population')['subset']['size']
            peer_list = gaParams.peer_list
            if peer_list:
                # for every peer, ping it, if alive then
                # get pickled genomes and draw them in the coga panels
                to_draw = []
                must = []
                status = {}
                for peer in peer_list:
                    status[peer.getName()] = 'offline'

                    if peer.online():
                        genome_objs = peer.getGenomes()
                        if genome_objs:
                            must.append(genome_objs[0])
                            to_draw.extend(genome_objs[1:])
                            status[peer.getName()] = 'online'

                self.parent.peerStatus(status)

                if to_draw:
                    self.cogaPanel.drawGenomes(must+random.sample(to_draw, subset_size-(len(must))))
Exemple #7
0
    def __init__(self, root=None):
        """
        Creates this organism
        """

        num_eqs = randrange(1, len(self.eqs)+1)
        self.eq_picked = rnd.sample(self.eqs, num_eqs)
        user =  gaParams.getVar('user')
        collab =  gaParams.getVar('collaborate')

        if collab:
            t_id = int(user.split('_')[0][-1])
            if t_id % 2:
                self.funcs.pop('sin', None)
                self.funcs.pop('cos', None)
                self.funcs.pop('tan', None)
            else:
                self.funcs.pop('*', None)
                self.funcs.pop('/', None)

            #if t_id % 2:
            #    if 'time' in self.vars:
            #        self.vars.remove('time')
            #else:
            #    if 'p.x' in self.vars:
            #        self.vars.remove('p.x')

            #    if 'p.y' in self.vars:
            #        self.vars.remove('p.y')

            #    if 'p.z' in self.vars:
            #        self.vars.remove('p.z')
        else:
            #if 'time' in self.vars:
            #    self.vars.remove('time')
            self.funcs.pop('*', None)
            self.funcs.pop('/', None)
                
        #print self.funcs, self.vars
        #self.eq_picked = [choice(self.eqs)]

        if root == None:
            root = self.genNode()
    
        self.tree = root
    def fillCoGAPanels(self):
        '''
        Request genomes from peers to be displayed on collaboration
        panels.
        '''
        peer_list = gaParams.peer_list
        peer_num = min(4, len(peer_list))
        panel_counter = 0
        row_size = gaParams.getVar('rowSize')
        peer_genome = []
        # for every peer, ping it, if alive then
        # get pickled genomes and draw them in the coga panels

        status = []
        for peer in peer_list:
            if peer.online():
                genome = peer.proxy.getGenomes()
                genome_objs = loads(genome)
                peer_genome.append(genome_objs)
                to_display = row_size
                if self.coga_panel[panel_counter].orientation == wx.HORIZONTAL:
                    to_display += 2
                self.coga_panel[panel_counter].drawGenomes(genome_objs[:to_display])
                panel_counter += 1
                status.append([peer.getName(), 'online'])
            else:
                status.append([peer.getName(), 'offline'])

        self.parent.peerStatus(status)

        if peer_genome:
            # fill the rest of the empty coga panels with
            # remaining genomes, if any
            leftover = []
            for genome in peer_genome:
                leftover.extend(genome[row_size:])
            random.shuffle(leftover)

            for panel in self.coga_panel[panel_counter:]:
                to_display = row_size
                if panel.orientation == wx.HORIZONTAL:
                    to_display += 2
                panel.drawGenomes(leftover[:to_display])
                del(leftover[:to_display])


        #for i in xrange(peer_num):
        #    if peer_list[i].online():
        #        genome = peer_list[i].proxy.getGenomes()
        #        genome_objs = loads(genome)
        #        peer_genome.append(genome_objs)
        #        panels = gaParams.draw(self.coga_panel[panel_counter], genome_objs[:row_size])
        #        self.coga_panel[panel_counter].addPanels(panels)
        #        panel_counter += 1

        self.peer_genome = peer_genome
    def __init__(self, paramClass, paramDict):
        nsga_ii.Population.__init__(self, paramClass, paramDict)

        ops = gaParams.getVar('operators')
        len_ops = len(ops)
        op_prob = 1. / len_ops
        for i in xrange(len_ops):
            ops[i] = op_prob
        self.op_len = len(ops)
        print 'ops ', ops
    def report(self, pop, subset, gen):
        '''
        Write to console or file
        population statistics.
        '''
        user = gaParams.getVar('user')
        app_name = self.params['name']
        dump_file = 'data/%s_%s_%d_pop_%d_%d.pickle' % (user, app_name, gen, self.hour, self.min)
        fout = open(dump_file, 'w')
        pickle.dump(pop, fout)
        fout.close()

        return
    def display(self, panels_to_display):
        '''
        Takes a list of panels to display to be evaluated.
        '''
        displayPanel = self.displayPanel
        displayPanel.clear()

        expandFlag = bool(gaParams.getVar('expand'))
        displayPanel.addPanels(panels_to_display, expand=expandFlag)
        displayPanel.fit()

        self.fillCoGAPanels()

        self.Layout()
Exemple #12
0
    def __init__(self, parent, id, decoded_data, pos=wx.DefaultPosition, size=(300,300)):

        feedbackpanel.FeedbackPanel.__init__(self, parent, id, size)
        self.parent = parent
        self.SetBackgroundColour(wx.WHITE)
        self.SetMinSize(size)

        appVar = gaParams.getVar('application')
        self.width = size[0]
        self.height = size[1]

        self.decoded_data = decoded_data
        imgs = [Image.open('app/docdesign/'+img).convert('RGBA') for img in appVar['images']]
        self.imgs = imgs

        self.Bind(wx.EVT_PAINT, self.draw)
    def onSubmit(self, e):
        '''
        Take user selection and pass it to the GA for 
        fitness evaluation.
        '''
        # get user input
        feedback = self.displayPanel.getUserInput()
        if feedback:
            # check collaborative panels to see if any genomes need to be added
            # to gene pool
            inject_genomes = []
            for cpanel in self.coga_panel:
                inject_genomes.extend(cpanel.getPeerGenomes())
            print 'inject_genomes ', inject_genomes

            panels_to_display = gaParams.step(feedback, self.displayPanel, inject_genomes)
            self.display(panels_to_display)

            self.generation += gaParams.getVar('stepSize')
            self.genLabel.SetLabel('Generation %d' % self.generation)
    def __init__(self, parent, ID=wx.NewId(), dimensions=[], description=[], transf = [], color_scheme = [], pos=wx.DefaultPosition, size=(220,260)):
        feedbackpanel.FeedbackPanel.__init__(self,parent,ID,size)

        self.parent = parent
        self.SetBackgroundColour(wx.WHITE)
        self.dimensions=dimensions
        self.description=description
        self.transf = transf
        self.color_scheme = color_scheme

        self.coordinates, self.roomsizes = self.getRoomDesc()

        self.SetMinSize(size)

        appVar = gaParams.getVar('application')
        self.max_val = appVar['max_scale']
        self.min_val = appVar['min_scale']
        self.rr_radius = appVar['rr_radius']


        self.width = appVar['plotSizeX']
        self.height = appVar['plotSizeY']
        self.canvas = wx.Panel(self, size =(self.width, self.height))
        self.canvas.Bind(wx.EVT_PAINT, self.draw)
        
        vsizer = wx.BoxSizer(wx.HORIZONTAL)
        vsizer.AddSpacer((20,10))
        vsizer.Add(self.canvas)


        test_bmp = wx.Bitmap('app/doctemplate/eog.png')
        test_button = wx.BitmapButton(self, wx.NewId(), bitmap = test_bmp)
        self.Bind(wx.EVT_BUTTON, self.onTest, test_button)

        vsizer.AddSpacer((10,10))
        vsizer.Add(test_button)

        self.sizer.Add(vsizer)

        self.computeShapeLoc()
Exemple #15
0
    def __init__(self, parent, ID=wx.NewId(), individual = None, quad_tree=[], color_scheme = [], pos=wx.DefaultPosition, size=(220,260)):
        feedbackpanel.FeedbackPanel.__init__(self,parent,ID,size)

        self.parent = parent
        self.SetBackgroundColour(wx.LIGHT_GREY)
        self.shape_list = quad_tree
        self.color_scheme = color_scheme
        self.rank = individual.rank
        self.SetMinSize(size)

        appVar = gaParams.getVar('application')
        self.max_val = appVar['max_scale']
        self.min_val = appVar['min_scale']
        self.rr_radius = appVar['rr_radius']


        self.width = appVar['plotSizeX']
        self.height = appVar['plotSizeY']
        self.canvas = wx.Panel(self, size =(self.width, self.height))
        self.canvas.Bind(wx.EVT_PAINT, self.draw)
        
        vsizer = wx.BoxSizer(wx.HORIZONTAL)
        vsizer.AddSpacer((20,10))
        vsizer.Add(self.canvas)

        test_bmp = wx.Bitmap('app/doctemplate/eog.png')
        test_button = wx.BitmapButton(self, wx.NewId(), bitmap = test_bmp)
        self.Bind(wx.EVT_BUTTON, self.onTest, test_button)

        vsizer.AddSpacer((10,10))
        vsizer.Add(test_button)

        self.sizer.Add(vsizer)

        self.updateShapeList()
        self.sizer.Add(wx.StaticText(self, -1, 'R: %d' % self.rank))

        self.Layout()
    def __init__(self, parent, ID=wx.NewId(), dimensions=[], description=[], transf = [], pos=wx.DefaultPosition, size=(220,260)):
        feedbackpanel.FeedbackPanel.__init__(self,parent,ID,size)

        self.parent = parent
        self.SetBackgroundColour(wx.WHITE)
        self.dimensions=dimensions
        self.description=description
        self.transf = transf
        self.SetMinSize(size)
        self.max_val = 0.3
        self.min_val = -0.3


        appVar = gaParams.getVar('application')
        self.width = appVar['plotSizeX']
        self.height = appVar['plotSizeY']
        self.canvas = wx.Panel(self, size =(self.width, self.height))
        self.canvas.Bind(wx.EVT_PAINT, self.draw)
        
        vsizer = wx.BoxSizer(wx.HORIZONTAL)
        vsizer.AddSpacer((20,10))
        vsizer.Add(self.canvas)
        self.sizer.Add(vsizer)
Exemple #17
0
    def __init__(self, parent, size = None, color = "LIGHT BLUE", style = None):
#wx.Panel.__init__(self, parent, -1, size=size, style = wx.RAISED_BORDER | wx.DOUBLE_BORDER)
        wx.Panel.__init__(self, parent, -1, size=size, style = wx.DOUBLE_BORDER)

        self.SetBackgroundColour('WHITE')
        self.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL,wx.FONTWEIGHT_BOLD))
        self.gaWindow = parent.GetParent()

        yaml = gaParams.getYaml()
        f = open('config/guiconfig.yml', 'r')
        widgets = yaml.load(f)
        widgets = widgets['widgets']
        f.close()

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add((10, 14))

        # Population size label
        self.sizer.Add(wx.StaticText(self, -1, 'Population Size:'), 0, wx.ALIGN_CENTER)
        # Population size slider
        self.populationSlider = wx.Slider(self, -1, size=(100, 40), style= wx.SL_LABELS | wx.SL_AUTOTICKS)
        max = int(widgets['population']['max'])
        min = int(widgets['population']['min'])
        self.populationSlider.SetRange(min, max)
        self.populationSlider.SetValue(gaParams.getVar('population_size'))

        self.sizer.Add(self.populationSlider, 0, wx.ALIGN_CENTER)
        self.Bind(wx.EVT_SCROLL, self.onPopulationChange, self.populationSlider)

        xoRate, mutRate = gaParams.getGARates()
        # XO Rate Slider
        self.xoRateSlider = wx.Slider(self, -1, size = (100, 40), style = wx.SL_LABELS | wx.SL_AUTOTICKS)
        max = int(widgets['crossover']['max'])
        min = int(widgets['crossover']['min'])
        self.xoRateSlider.SetRange(min, max)
        self.xoRateSlider.SetValue(xoRate * max)

        # Add xo slider to sizer
        self.sizer.Add((10, 10))
        self.sizer.Add(wx.StaticText(self, -1, 'Crossover Rate:'), 0, wx.ALIGN_CENTER)
        self.sizer.Add(self.xoRateSlider, 0, wx.ALIGN_CENTER)

        self.Bind(wx.EVT_SCROLL, self.onCrossoverChange, self.xoRateSlider)

        # Mutation Rate
        self.mutBox = wx.TextCtrl(self, -1, size = (50, -1))
        self.mutBox.SetValue("%.3f" % mutRate)

        tempSizer = wx.BoxSizer(wx.HORIZONTAL)
        tempSizer.Add(wx.StaticText(self, -1, 'Mutation:'), 0, wx.ALIGN_CENTER_VERTICAL)
        tempSizer.Add(self.mutBox, 0)
        self.sizer.Add((10, 10))
        self.sizer.Add(tempSizer, 0, wx.ALIGN_CENTER)

        max = int(widgets['mutation']['max'])
        min = int(widgets['mutation']['min'])

        self.Bind(wx.EVT_TEXT, self.onMutationChange, self.mutBox)

        self.sizer.Add((10, 10))

        # Step size spinner control
        self.stepSize = wx.SpinCtrl(self, wx.ID_ANY, size = (50,23))
        self.stepSize.SetRange(1, 300)
        step = gaParams.getVar('stepSize') or 1
        self.stepSize.SetValue(step)

        self.Bind(wx.EVT_SPINCTRL, self.onSpin, self.stepSize)

        # Add spinner with text label to sizer
        tempSizer = wx.BoxSizer(wx.HORIZONTAL)
        tempSizer.Add(wx.StaticText(self, -1, 'Step Size:'), 0, wx.ALIGN_CENTER_VERTICAL)
        tempSizer.Add(self.stepSize)
        self.sizer.Add(tempSizer, 0, wx.ALIGN_CENTER)

        # edit mask button
        self.sizer.AddSpacer((10, 10))
        self.maskB = wx.Button(self, -1, 'Edit Mask')
        self.Bind(wx.EVT_BUTTON, self.onEditMask, self.maskB)
        self.sizer.Add(self.maskB, 0, wx.ALIGN_CENTER) 
        if not gaParams.getAppVars():
            self.maskB.Enable(False)

        # 8px spaces for widgets in same group
        # 10px for widgets not in the same group

        # -----------------------------------
        # peer stuff
        self.sizer.Add((10, 10))
        self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
        self.sizer.Add((10, 10))

        peers = {}
        peer_list = gaParams.getVar('peers')
        online = wx.Bitmap('gui/online.png')
        offline = wx.Bitmap('gui/offline.png')
        delete = wx.Bitmap('gui/delete.png')
        self.online, self.offline, self.delete = online, offline, delete

        # my status
        tmp_sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.my_status = wx.StaticBitmap(self)
        self.my_status.SetBitmap(online)
        tmp_sizer.Add(self.my_status)
        tmp_sizer.Add(wx.StaticText(self, -1, 'Collaborate'))
        self.sizer.Add(tmp_sizer)

        # add peer button
        self.sizer.Add((10, 10))
        newButton = wx.Button(self, -1, 'Add Peer...')
        newButton.Bind(wx.EVT_BUTTON, self.onAddPeer, newButton)
        self.sizer.Add(newButton)
        self.sizer.Add((10, 10))

        # keeps track of each ID for each peer
        self.names = {}
        # add list of peers
        all_peers_sizer = wx.BoxSizer(wx.VERTICAL)
        for peer in peer_list:
            id = wx.NewId()

            peer_sizer = wx.BoxSizer(wx.HORIZONTAL)
            peer_status = wx.StaticBitmap(self)
            peer_status.SetBitmap(offline)
            peer_name = wx.StaticText(self, -1, peer)
            peer_name.Bind(wx.EVT_LEFT_DOWN, self.onEditPeer, peer_name)
            peer_sizer.Add(peer_status)
            peer_sizer.Add(peer_name)

            peer_delete = wx.BitmapButton(self, id = id, bitmap = delete, 
                                                style = wx.ALIGN_RIGHT)
            self.Bind(wx.EVT_BUTTON, self.onDeletePeer, peer_delete)

            peer_sizer.Add(wx.StaticText(self, -1, '  '), 1)
            peer_sizer.Add(peer_delete)

            all_peers_sizer.Add(peer_sizer, 0, wx.EXPAND)
            peers[id] = {'name': peer,
                         'sizer': peer_sizer, 'status': peer_status}
            self.names[peer] = id
                
        self.sizer.Add(all_peers_sizer)
        self.peer_sizer = all_peers_sizer

        self.peers = peers
        self.status_bitmap = {}
        self.status_bitmap['online'] = online
        self.status_bitmap['offline'] = offline

        # Disconnect button
        self.sizer.AddSpacer((10, 10))
        self.disconnect = wx.Button(self, -1, 'Disconnect')
        self.Bind(wx.EVT_BUTTON, self.onDisconnect, self.disconnect)
        self.sizer.Add(self.disconnect, 0, wx.ALIGN_CENTER) 

        # refresh button
        self.sizer.AddSpacer((10, 10))
        self.refresh = wx.Button(self, wx.ID_REFRESH, '')
        self.Bind(wx.EVT_BUTTON, self.onRefresh, self.refresh)
        self.sizer.Add(self.refresh, 0, wx.ALIGN_CENTER) 

        # back button
        self.sizer.AddSpacer((10, 10))
        self.back = wx.Button(self, wx.ID_BACKWARD, '')
        self.back.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onBack, self.back)
        self.sizer.Add(self.back, 0, wx.ALIGN_CENTER) 


        self.sizer.AddSpacer((10, 10))
        self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
        self.sizer.AddSpacer((10, 10))

        self.app_panels = []
        self.appSizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.appSizer, 0, wx.EXPAND)
        self.reset()

        # Add submit button
        self.submit = wx.Button(self, -1, 'Step %d Gen' % step, size = (130,-1))
        self.submit.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onSubmit, self.submit)
        self.sizer.Add(self.submit, 0, wx.ALIGN_CENTER)

        # final sizer and fitting stuff
        self.SetSizer(self.sizer)
        self.SetAutoLayout(True)
        self.sizer.Layout()
        self.sizer.Fit(self)
        self.sizer.SetSizeHints(self)
        self.Layout()

        # Keeps the textbox from having the default focus, which was annoying
        self.SetFocus()

        self.timestamp = 0.
        self.gen = 0
    except:
        print 'No psyco! Oh well...'

    args = parse()

    from iga.gacommon import gaParams
    if args.has_key('config'):
        filename = args['config']
        if not filename.startswith('config'):
            filename = 'config/' + filename
        gaParams.fileArgs(filename)
    else:
        gaParams.fileArgs('config/floorplan.yml')

    gaParams.setArgs(args)

    if gaParams.getVar('mode') == 'ga':
        gaParams.consoleGA()
    else:
        from gui import gawindow
        import wx

        app = wx.PySimpleApp()

        gaWindow = gawindow.GAWindow()
        gaWindow.SetFocus()

        app.MainLoop()
        app.Destroy()
#-------------------------------------------#