geophysicsbase.g[1] = singlepopulation['population_properties'][1] + geophysicsbase.g[1]
    geophysicsbase.g[2] = singlepopulation['population_properties'][2] + geophysicsbase.g[2]
    leastsquare = TReg(geophysicsbase.A, geophysicsbase.g, 1E-11)
    f = leastsquare.getf()
    ro = np.dot(geophysicsbase.A, f)
    ro = LA.norm(ro - geophysicsbase.g)**2
    return ro

def printBestValue(population):
    sortresult = np.sort(population, order=['fitness', 'population_properties'], axis=None)
    print(str(sortresult[0]['fitness']) + " " + str(sortresult[0]['population_properties'][0]) + " " + str(sortresult[0]['population_properties'][1])+ " " + str(sortresult[0]['population_properties'][2]))


if __name__ == '__main__':
    populationnumer_length = 100
    cea = CEAs(3, populationnumer_length)
    cea.init_individual(-1.0, 1.0, 100)
    for i in range(0, 1000):
        # for each node in the population
        for i in range(0, populationnumer_length):
            for j in range(0, populationnumer_length):
                # evaluate individual at node
                cea.population[i][j]['fitness'] = singlepopulationfitness(cea.population[i][j])
                # produce offspring
                offsprings = cea.produceOffSpring(i, j)
                # evaluate offspring
                for offspring in offsprings:
                    offspring['fitness'] = singlepopulationfitness(offspring)
                #assign one of the offspring to node according to a given criterion using binary tournament
                tournament_offspring = np.array([], dtype=cea.populationStruct)
                offspring_A_index = np.random.random_integers(0, len(offsprings)-1)
def halfplanprocessing1(q1, cea, populationnumer_length):
    for i in range(0, populationnumer_length):
        for j in range(0, int(populationnumer_length/2)):
            singlegenerationprocess(i, j, cea)
    q1.put(cea)

def halfplanprocessing2(q2, cea, populationnumer_length):
    for i in range(0, populationnumer_length):
        for j in range(int(populationnumer_length/2), populationnumer_length):
            singlegenerationprocess(i, j, cea)
    q2.put(cea)

from multiprocessing import Process, Queue
if __name__ == '__main__':
    populationnumer_length = 100
    cea = CEAs(3, populationnumer_length)
    cea.init_individual(-1.0, 1.0, 10)
    for loop in range(0, 1000):
        # for each node in the population
        import copy
        q1 = Queue()
        q2 = Queue()
        process1 = Process(target=halfplanprocessing1, args=(q1, cea, populationnumer_length,))
        process2 = Process(target=halfplanprocessing2, args=(q2, cea, populationnumer_length,))
        process1.start()
        process2.start()
        cea1 = q1.get()
        cea2 = q2.get()
        for i in range(0, populationnumer_length):
            for j in range(0, int(populationnumer_length/2)):
                cea.population[i][j] = cea1.population[i][j]