Ejemplo n.º 1
0
 def __init__(self, parent=None):
   QtGui.QWidget.__init__(self, parent)
   self.ui = Ui_GeneticDrift()
   self.ui.setupUi(self)
   QtCore.QObject.connect(self.ui.pushRun, QtCore.SIGNAL("clicked()"), self.run_sim )
Ejemplo n.º 2
0
class MyForm(QtGui.QMainWindow):
  def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)
    self.ui = Ui_GeneticDrift()
    self.ui.setupUi(self)
    QtCore.QObject.connect(self.ui.pushRun, QtCore.SIGNAL("clicked()"), self.run_sim )
 
  def run_sim(self):
    # The user will enter the population size and the number of generations in our GUI
    popsize = int(self.ui.linePopsize.text())
    numgen = int(self.ui.lineGenerations.text())
 
    # initialize some arrays
    allele = ['P' , 'Q']
    i = 0
    gen0 = []
    listP = []
    listQ = []

    # This next part randomly generates the initial population diversity. 
    # With a large population it is close to 50/50. With a small population it can be anything.
    while i < popsize:
         gen0 = gen0 + [allele[(randint(0,1))]]
##       print gen0
         i = i+1

    gen0.sort()
    print gen0
    listP.append(gen0.count('P'))
    listQ.append(gen0.count('Q'))

    # j is going to be the counter that steps through the generations
    j = 1
    prevgen = gen0

    while j < numgen+1:

	i = 0

	nextgen = []

        # This is where the magic happens.
        # Each time through the loop over the entire population we select a
        # random member of the previous generation to reproduce.
        # Effectively this means that some members will not reproduce and
        # that other members will produce multiple offspring.
	while i < popsize:
		nextgen = nextgen + [prevgen[(randint(0,popsize-1))]]
     		i = i+1

	# Clean up and count stats for each generation.
	prevgen = nextgen
	nextgen.sort()
	numP = nextgen.count('P')
##	print 'Generation', j, ':', nextgen, 'Number of P alleles: ', numP
	listP.append(nextgen.count('P'))
	listQ.append(nextgen.count('Q'))

	j = j+1
    # Output some info to the console. (This could be removed for the GUI version.)
    print 'P alleles in each generation:', listP
    print 'Q alleles in each generation:', listQ

    genlist = range(0,numgen+1)
    freqP = [float(i)/popsize for i in listP]
    freqQ = [float(i)/popsize for i in listQ]
    P = scatter(genlist,freqP,c='b',lw=1)
    Q = scatter(genlist,freqQ, c='r',lw=1)
    plot(genlist,freqP,c='b',lw=1)
    plot(genlist,freqQ, c='r',lw=1)
    ylabel('frequency')
    xlabel('generation')
    legend((P,Q),('P', 'Q'))
    ylim(ymin=0, ymax=1)
    show()