diff --git a/spotpy/algorithms/__init__.py b/spotpy/algorithms/__init__.py index 26b0067a..2de3ea62 100644 --- a/spotpy/algorithms/__init__.py +++ b/spotpy/algorithms/__init__.py @@ -30,7 +30,6 @@ from .abc import abc # Artificial Bee Colony from .fscabc import fscabc # Fitness Scaling Artificial Bee Colony from .dream import dream # DiffeRential Evolution Adaptive Metropolis -from .list import list # Samples from given spotpy database from .nsgaii import NSGAII # A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II from .list_sampler import list_sampler # Samples from given spotpy database from .dds import dds # Dynamically Dimensioned Search algorithm diff --git a/spotpy/algorithms/nsgaii.py b/spotpy/algorithms/nsgaii.py index 1caad063..a3867305 100644 --- a/spotpy/algorithms/nsgaii.py +++ b/spotpy/algorithms/nsgaii.py @@ -1,7 +1,8 @@ +# -*- coding: utf-8 -*- ''' -Copyright (c) 2018 by Benjamin Manns +Copyright (c) 2018 by Tobias Houska This file is part of Statistical Parameter Optimization Tool for Python(SPOTPY). -:author: Benjamin Manns +:author: Iacopo Ferrario This file contains the NSGA-II Algorithm implemented for SPOTPY based on: - K. Deb, A. Pratap, S. Agarwal and T. Meyarivan, "A fast and elitist multiobjective genetic algorithm: @@ -13,22 +14,130 @@ ''' import numpy as np - +import math from spotpy.algorithms import _algorithm -from sys import exit +import copy + + + +class TournamentSelection: + + def __init__(self,pressure = 2): + self.pressure = pressure + + def calc(self,pop_rank): + + n_select = len(pop_rank) + n_random = n_select * self.pressure #n_select * n_parents * pressure + + n_perms = math.ceil(n_random / len(pop_rank)) + + P = random_permuations(n_perms, len(pop_rank))[:n_random] + + P = np.reshape(P, (n_select, self.pressure)) + + n_tournament,_ = P.shape + + ret = np.full(n_tournament,-1,dtype=np.int) + + for i in range(n_tournament): + a,b = P[i] + + if pop_rank[a] < pop_rank[b]: + ret[i] = a + else: + ret[i] = b + + return ret + + +def random_permuations(n, l): + perms = [] + for _ in range(n): + perms.append(np.random.permutation(l)) + return np.concatenate(perms) + + +class Crossover: + + def __init__(self,crossProb=0.9): + + self.crossProbThreshold = crossProb + + def calc(self,pop,n_var): + + n_pop = pop.shape[0] + crossProbability = np.random.random((n_pop)) + do_cross = crossProbability < self.crossProbThreshold + R = np.random.randint(0,n_pop,(n_pop,2)) + parents = R[do_cross] + crossPoint = np.random.randint(1,n_var,parents.shape[0]) + d = pop[parents,:] + child = [] + for i in range(parents.shape[0]): + child.append(np.concatenate([d[i,0,:crossPoint[i]],d[i,1,crossPoint[i]:]])) + child = np.vstack(child) + pop[do_cross,:] = child + return pop + + + + +class PolynomialMutation: + + def __init__(self,prob_mut,eta_mut): + + self.prob_mut = prob_mut + self.eta_mut = eta_mut + + def calc(self,x,xl,xu): + + X = copy.deepcopy(x) + Y = np.full(X.shape,np.inf) + + do_mutation = np.random.random(X.shape) < self.prob_mut + + m = np.sum(np.sum(do_mutation)) + + Y[:,:] = X + + xl = np.repeat(xl[None,:],X.shape[0],axis=0)[do_mutation] #selecting who is mutating + xu = np.repeat(xu[None,:],X.shape[0],axis=0)[do_mutation] + + X = X[do_mutation] + + delta1 = (X - xl) / (xu - xl) + delta2 = (xu - X) / (xu -xl) + + mut_pow = 1.0/(self.eta_mut + 1.0) + + rand = np.random.random(X.shape) + mask = rand <= 0.5 + mask_not = np.logical_not(mask) + + deltaq = np.zeros(X.shape) + + xy = 1.0 - delta1 + val = 2.0 * rand + (1.0 - 2.0 * rand) * (np.power(xy, (self.eta_mut + 1.0))) + d = np.power(val, mut_pow) - 1.0 + deltaq[mask] = d[mask] + + xy = 1.0 - delta2 + val = 2.0 * (1.0 - rand) + 2.0 * (rand - 0.5) * (np.power(xy, (self.eta_mut + 1.0))) + d = 1.0 - (np.power(val, mut_pow)) + deltaq[mask_not] = d[mask_not] + + ret = X + deltaq * (xu - xl) + ret[ret < xl] = xl[ret < xl] + ret[ret > xu] = xu[ret > xu] + + Y[do_mutation] = ret + + return Y -class ParaPop: - def __init__(self, params, m_vals=[], sim=None): - self.params = params - self.m_vals = m_vals - self.sim = sim - def __str__(self): - return " with content " + str(self.m_vals) - def __repr__(self): - return self.__str__() class NSGAII(_algorithm): @@ -70,270 +179,235 @@ def __init__(self, *args, **kwargs): * True: Simulation results will be saved * False: Simulation results will not be saved """ - + self._return_all_likes=True #alloes multi-objective calibration + kwargs['optimization_direction'] = 'minimize' + kwargs['algorithm_name'] = 'Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II' super(NSGAII, self).__init__(*args, **kwargs) - # self.all_objectives = [self.setup.__getattribute__(m) for m in dir(self.setup) if "objectivefunc" in m] - self.param_len = len(self.get_parameters()) - self.generation = 0 - self.length_of_objective_func = 0 - self.objfun_maxmin_list = None - self.objfun_normalize_list= [] + def fastSort(self,x): + n = x.shape[0] + S = np.zeros((n,n),dtype=bool) + Np = np.zeros(n) + + + for i in range(n): + for j in range(n): + S[i,j] = self.dominates(x[i,:],x[j,:]) + + nDom = np.sum(S,axis=0) # the n solutions that dominates i + Np[nDom == 0] = 1 # if i == 0, i is non-dominated, set i rank to 1, i belongs to first non-dominated front + k = 1 + # loop over pareto fronts + while np.sum(Np == 0) > 0: + l = np.arange(n)[Np==k] # first non-dominated front + for i in l: # loop over the non-dominated front + nDom[S[i,:]] = nDom[S[i,:]] -1 # reduce by 1 the rank of the solutions that i dominates + k += 1 + # now nDom has been reduced by 1, so the next non-dominated front will be nDom == 0 + # and Np == 0 ensure that we don't pass over the first ranked non-dom solutions + Np[(nDom == 0) & (Np == 0) ] = k + + return Np.astype(int) + + + + def dominates(self,a,b): + if len(a.shape) >1: + ret = (np.sum(a <= b,axis =1) == a.shape[1]) & (np.sum(a < b,axis=1) >0) + else: + ret = (np.sum(a <= b) == len(a)) & (np.sum(a < b) >0) + return ret - def fast_non_dominated_sort(self, P): - S = {} - n = {} - F = {} - rank = {} - F[1] = {} - if self.objfun_maxmin_list is None: - self.length_of_objective_func = 0 - # In the first iteration create this list to have it prepared for later use - self.objfun_maxmin_list = [] - for _ in self.objectivefunction(self.setup.evaluation(), self.setup.simulation(P[0])): - self.length_of_objective_func += 1 - self.objfun_maxmin_list.append([]) + def crowdDist(self,x): + n = x.shape[0] - param_generator = ((p, list(P[p])) for p in P) - calculated_sims = list(self.repeat(param_generator)) - for p, par_p, sim_p in calculated_sims: + nobj = x.shape[1] - S[p] = {} - S_p_index = 0 - n[p] = 0 - for q, par_q, sim_q in calculated_sims: + dist = np.zeros(n) - # check whether parameter set p or q is dominating so we test all objective functions here - # https://cims.nyu.edu/~gn387/glp/lec1.pdf / Definition / Dominance Relation + ord = np.argsort(x,axis=0) - # m_diffs = np.array([]) - m_vals_p = np.array([]) - m_vals_q = np.array([]) + X = x[ord,range(nobj)] + + dist = np.vstack([X,np.full(nobj,np.inf)]) - np.vstack([np.full(nobj,-np.inf),X]) - for i, m in enumerate(self.objectivefunction(self.setup.evaluation(), sim_q)): - m_vals_q = np.append(m_vals_q, m) - self.objfun_maxmin_list[i].append(m) + norm = np.max(X,axis=0) - np.min(X,axis=0) + dist_to_last,dist_to_next = dist, np.copy(dist) + dist_to_last,dist_to_next = dist_to_last[:-1]/norm ,dist_to_next[1:]/norm + J = np.argsort(ord,axis=0) + ret = np.sum(dist_to_last[J, np.arange(nobj)] + dist_to_next[J, np.arange(nobj)], axis=1) / nobj - for i, m in enumerate(self.objectivefunction(self.setup.evaluation(), sim_p)): - m_vals_p = np.append(m_vals_p, m) - self.objfun_maxmin_list[i].append(m) + return ret - m_diffs = m_vals_q - m_vals_p + def crowdDist2(self,x): + n = x.shape[0] + + dist = np.zeros(n) - # TODO ist Minimieren oder Maximieren richtig? + for obj in range(x.shape[1]): + ord = np.argsort(x[:,obj]) + dist[ord[[0,-1]]] = np.inf - pp_q = ParaPop(np.array(P[q]), list(m_vals_q.tolist()), sim_q) + norm = np.max(x[:,obj]) - np.min(x[:,obj]) - pp_p = ParaPop(np.array(P[q]), list(m_vals_p.tolist()), sim_p) + for i in range(1,n-1): + dist[i] = dist[ord[i]] + (x[ord[i+1],obj] - x[ord[i-1],obj])/norm - # Allow here also more then 2 - # if p dominates q - if (m_diffs >= 0).all and (m_diffs > 0).any(): + return dist - S[p][S_p_index] = pp_q - S_p_index += 1 - # elif q dominates p: - elif (m_diffs <= 0).all() and (m_diffs < 0).any(): - # else: - n[p] += 1 - if n[p] == 0: - rank[p] = 1 - F[1][p] = pp_p - i = 1 - while len(F[i]) > 0: - Q = {} - # q_ind is just a useless indices which may has to change somehow, it is only for the dict we use - q_ind = 0 - for p in F[i]: - for q in S[p]: - n[q] -= 1 - if n[q] == 0: - rank[q] = i + 1 - Q[q_ind] = S[p][q] - q_ind += 1 + def sample(self, generations, n_obj, n_pop = None, skip_duplicates = False, + selection = TournamentSelection(pressure=2), + crossover = Crossover(crossProb=0.9), + mutation = PolynomialMutation(prob_mut=0.25,eta_mut=30)): + + self.n_obj = n_obj + self.selection = selection + self.crossover = crossover + self.mutation = mutation + + self.n_pop = n_pop + self.generations= generations + self.set_repetiton(self.generations*self.n_pop) + self.skip_duplicates = skip_duplicates - i += 1 - F[i] = Q + Pt = np.vstack([self.parameter()['random'] for i in range(self.n_pop)]) + + #Burn-in + #TODO: I would suggest to make the burin-in sample indiviudual for each cpu-core in case of parallel usage, compare dream.py, but not sure if this is defined in the publication + # evaluate population + param_generator = ((i,Pt[i,:]) for i in range(self.n_pop)) + + ret = list(self.repeat(param_generator)) + + Of = [] + for p in range(self.n_pop): + index,parameters,simulation_results = ret[p] + Of.append(self.postprocessing(0, parameters, simulation_results, chains=p)) + Of = np.vstack(Of) - return F - def crowding_distance_assignement(self, I): - l = len(I) + nonDomRank = self.fastSort(Of) - if l > 2: + crDist = np.empty(self.n_pop) + for rk in range(1,np.max(nonDomRank)+1): + crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) - I = list(I.values()) - ################## - # I = sort(I,m) # - ################## + # sorting - sorting_m = [] + rank = np.lexsort((-crDist,nonDomRank)) + Ptsort = Pt[rank] + Ofsort = Of[rank] - for i in I: - sorting_m.append(i.m_vals) + Of_parent = Ofsort[:,:] + Pt_parent = Ptsort[:,:] + + # selection - sorting_m = np.array(sorting_m) + offsprings = self.selection.calc(pop_rank = rank) - new_order = np.argsort(np.sqrt(np.sum(sorting_m ** 2, 1))) + Qt = Ptsort[offsprings,:] - I = np.array(I) - I = I[new_order] + + # crossover + try: + n_var = self.setup.n_var + except AttributeError: + n_var = len(parameters) - distance_I = list(np.repeat(0, l)) - distance_I[0] = distance_I[l - 1] = np.inf + Qt = self.crossover.calc(pop = Qt,n_var = n_var) - for_distance = [] + # mutation + self.min_bound, self.max_bound = self.parameter()['minbound'], self.parameter()['maxbound'] + self.varminbound = np.array([]) + self.varmaxbound = np.array([]) + for i in range(len(self.min_bound)): + self.varminbound = np.append(self.varminbound,self.min_bound[i]) + self.varmaxbound = np.append(self.varmaxbound,self.max_bound[i]) - for i in I: - for_distance.append(i.m_vals) + Qt = self.mutation.calc(x = Qt,xl = self.varminbound,xu = self.varmaxbound) + + for igen in range(1,self.generations - 1): - which_obj_fn = 0 - for_distance = np.array(for_distance) - for k in for_distance.T: - tmp_dist = k[2:l] - k[0:l - 2] + Rt = np.vstack([Pt_parent,Qt]) - distance_I[1:l - 1] += tmp_dist / self.objfun_normalize_list[which_obj_fn] - which_obj_fn += 1 + if self.skip_duplicates: + # print(f"pop: {len(Qt)}") + # print(f"pop non dup: {len(np.unique(Qt,axis=0))}") - return distance_I + + #Qt_nondup = np.unique(Qt,axis=0) + #self.n_pop_nondup = len(Qt_nondup) - else: - return [np.inf] - - def sample(self, generations=2, paramsamp=20): - self.repetitions = int(generations) - self.status.repetitions = self.repetitions*paramsamp*2 - R_0 = {} - - for i in range(paramsamp * 2): - R_0[i] = list(self.parameter()['random']) - - while self.generation < self.repetitions: - - F = self.fast_non_dominated_sort(R_0) - - print("GENERATION: " + str(self.generation) + " of " + str(generations)) - - # Debuggin Issue - # import matplotlib.pyplot as pl - # from mpl_toolkits.mplot3d import Axes3D - # layer = 0 - # fig = pl.figure() - # - # if self.length_of_objective_func == 2: - # - # for i in F: - # if layer == 0: - # l_color = "b" - # else: - # l_color = "#" - # for _ in range(6): - # l_color += ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"][ - # np.random.randint(16)] - # for j in F[i]: - # pl.plot(F[i][j].m_vals[0], F[i][j].m_vals[1], color=l_color, marker='o') - # layer += 1 - # - # pl.show() - # - # elif self.length_of_objective_func == 3: - # - # ax = fig.add_subplot(111, projection='3d') - # - # for i in F: - # for j in F[i]: - # ax.scatter(F[i][j].m_vals[0], F[i][j].m_vals[1], - # F[i][j].m_vals[2]) # , lay_col[layer] + 'o') - # layer += 1 - # - # # ax.set_xlabel(m1_name) - # # ax.set_ylabel(m2_name) - # # ax.set_zlabel(m3_name) - # - # pl.show() - - # Now sort again - complete_sort_all_p = [] - - # post-proccesing min-max values of each objective function: - # reset the normalize list - self.objfun_normalize_list = [] - for i in self.objfun_maxmin_list: - # fill the normalize list - self.objfun_normalize_list.append(abs(max(i)-min(i))) - - # reset the objfun_maxmin_list - self.objfun_maxmin_list = None - - cChain = 0 - for k in F: - - # Save fronts we have now before sorting and mutation - for o in F[k]: - - self.postprocessing(self.generation, F[k][o].params, F[k][o].sim, cChain) - - F_I_distance = self.crowding_distance_assignement(F[k]) - - # print(F_I_distance) - - # sort within the list and then add to general list - # the partial order <_n is defined as follows: - # i <_n j if(i_rank < j_rank) or (i_rank = j_rank - # and i_distance > j_distance ) - i_distance_order = np.argsort(F_I_distance) - - F_ar = np.array(list(F[k].values())) - if len(F[k]) > 0: - for a in F_ar[i_distance_order]: - complete_sort_all_p.append(a) - - # TODO Why is algorithm to take all values again, I think only the first which are the best - cChain +=1 - - N = paramsamp - complete_sort_all_p = np.array(complete_sort_all_p) - P_new = complete_sort_all_p[0:N] - Q_new = {} - M = len(P_new) - if M < N: - P_new = np.append(P_new, complete_sort_all_p[0:N - M]) - if N > len(P_new): - exit("We still have to few parameters after selecting parent elements") - - list_index = 0 - while list_index < N: - # select pairs... with tournament, because this is a sorted list we just use the - # first occurence of a pick "out of M (= length of P_new) - tmp_parm_1 = P_new[np.random.randint(0, M, 1)[0]].params - tmp_parm_2 = P_new[np.random.randint(0, M, 1)[0]].params - - # select cross over point - xover_point = np.random.randint(0, self.param_len - 1, 1)[0] - - # cross over - A = np.append(tmp_parm_2[0:xover_point], tmp_parm_1[xover_point:]) + # evaluate population + param_generator = ((i,Qt[i,:]) for i in range(self.n_pop)) - # mutation - sign = [0, 1, -1][np.random.randint(0, 3, 1)[0]] - Q_new[list_index] = A + sign * (A / 4) # was 100 before - list_index += 1 + ret = list(self.repeat(param_generator)) + + Of = [] + for p in range(self.n_pop): + index, parameters,simulation_results = ret[p] + Of.append(self.postprocessing(igen, parameters, simulation_results, chains=p)) + Of = np.vstack(Of) + + Of = np.vstack([Of_parent ,Of]) + + nonDomRank = self.fastSort(Of) + + crDist = np.empty(len(Of)) + for rk in range(1,np.max(nonDomRank)+1): + crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) + else: + + # print(f"pop: {len(Qt)}") + # print(f"pop non dup: {len(np.unique(Qt,axis=0))}") + # evaluate population + param_generator = ((i,Rt[i,:]) for i in range(self.n_pop *2)) + + + + ret = list(self.repeat(param_generator)) + + Of = [] + for p in range(self.n_pop*2): + index, parameters,simulation_results = ret[p] + Of.append(self.postprocessing(igen, parameters, simulation_results, chains=p)) + Of = np.vstack(Of) + + nonDomRank = self.fastSort(Of) + + crDist = np.empty(self.n_pop*2) + for rk in range(1,np.max(nonDomRank)+1): + crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) + + + # sorting + rank = np.lexsort((-crDist,nonDomRank))[:self.n_pop] + Ptsort = Rt[rank] + Ofsort = Of[rank] + + Pt_parent = Ptsort[:,:] + + Of_parent = Ofsort[:,:] + + + # selection + offsprings = self.selection.calc(pop_rank = rank) + + Qt = Ptsort[offsprings,:] + # crossover + Qt = self.crossover.calc(pop = Qt,n_var = n_var) + # mutation + Qt = self.mutation.calc(x = Qt,xl = self.varminbound,xu =self.varmaxbound) - self.generation += 1 - # merge P and Q - for i in P_new.tolist(): - Q_new[list_index] = i.params - list_index += 1 - R_0 = Q_new self.final_call() diff --git a/spotpy/algorithms/nsgaii_dev.py b/spotpy/algorithms/nsgaii_dev.py deleted file mode 100644 index 45179ebf..00000000 --- a/spotpy/algorithms/nsgaii_dev.py +++ /dev/null @@ -1,398 +0,0 @@ - - -import numpy as np -import math -from spotpy.algorithms import _algorithm -import copy - - - -class TournamentSelection: - - def __init__(self,pressure = 2): - self.pressure = pressure - - def calc(self,pop_rank): - - n_select = len(pop_rank) - n_random = n_select * self.pressure #n_select * n_parents * pressure - - n_perms = math.ceil(n_random / len(pop_rank)) - - P = random_permuations(n_perms, len(pop_rank))[:n_random] - - P = np.reshape(P, (n_select, self.pressure)) - - n_tournament,_ = P.shape - - ret = np.full(n_tournament,-1,dtype=np.int) - - for i in range(n_tournament): - a,b = P[i] - - if pop_rank[a] < pop_rank[b]: - ret[i] = a - else: - ret[i] = b - - return ret - - -def random_permuations(n, l): - perms = [] - for _ in range(n): - perms.append(np.random.permutation(l)) - return np.concatenate(perms) - - -class Crossover: - - def __init__(self,crossProb=0.9): - - self.crossProbThreshold = crossProb - - def calc(self,pop,n_var): - - n_pop = pop.shape[0] - crossProbability = np.random.random((n_pop)) - do_cross = crossProbability < self.crossProbThreshold - R = np.random.randint(0,n_pop,(n_pop,2)) - parents = R[do_cross] - crossPoint = np.random.randint(1,n_var,parents.shape[0]) - d = pop[parents,:] - child = [] - for i in range(parents.shape[0]): - child.append(np.concatenate([d[i,0,:crossPoint[i]],d[i,1,crossPoint[i]:]])) - child = np.vstack(child) - pop[do_cross,:] = child - return pop - - - - -class PolynomialMutation: - - def __init__(self,prob_mut,eta_mut): - - self.prob_mut = prob_mut - self.eta_mut = eta_mut - - def calc(self,x,xl,xu): - - X = copy.deepcopy(x) - Y = np.full(X.shape,np.inf) - - do_mutation = np.random.random(X.shape) < self.prob_mut - - m = np.sum(np.sum(do_mutation)) - - Y[:,:] = X - - xl = np.repeat(xl[None,:],X.shape[0],axis=0)[do_mutation] #selecting who is mutating - xu = np.repeat(xu[None,:],X.shape[0],axis=0)[do_mutation] - - X = X[do_mutation] - - delta1 = (X - xl) / (xu - xl) - delta2 = (xu - X) / (xu -xl) - - mut_pow = 1.0/(self.eta_mut + 1.0) - - rand = np.random.random(X.shape) - mask = rand <= 0.5 - mask_not = np.logical_not(mask) - - deltaq = np.zeros(X.shape) - - xy = 1.0 - delta1 - val = 2.0 * rand + (1.0 - 2.0 * rand) * (np.power(xy, (self.eta_mut + 1.0))) - d = np.power(val, mut_pow) - 1.0 - deltaq[mask] = d[mask] - - xy = 1.0 - delta2 - val = 2.0 * (1.0 - rand) + 2.0 * (rand - 0.5) * (np.power(xy, (self.eta_mut + 1.0))) - d = 1.0 - (np.power(val, mut_pow)) - deltaq[mask_not] = d[mask_not] - - ret = X + deltaq * (xu - xl) - ret[ret < xl] = xl[ret < xl] - ret[ret > xu] = xu[ret > xu] - - Y[do_mutation] = ret - - return Y - - - - - - -class NSGAII_DEV(_algorithm): - """ - Implements the "Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II - by Kalyanmoy Deb, Associate Member, IEEE, Amrit Pratap, Sameer Agarwal, and T. Meyarivan - - """ - - def __init__(self, *args, **kwargs): - """ - Input - ---------- - spot_setup: class - model: function - Should be callable with a parameter combination of the parameter-function - and return an list of simulation results (as long as evaluation list) - parameter: function - When called, it should return a random parameter combination. Which can - be e.g. uniform or Gaussian - objectivefunction: function - Should return the objectivefunction for a given list of a model simulation and - observation. - evaluation: function - Should return the true values as return by the model. - - dbname: str - * Name of the database where parameter, objectivefunction value and simulation results will be saved. - - dbformat: str - * ram: fast suited for short sampling time. no file will be created and results are saved in an array. - * csv: A csv file will be created, which you can import afterwards. - - parallel: str - * seq: Sequentiel sampling (default): Normal iterations on one core of your cpu. - * mpi: Message Passing Interface: Parallel computing on cluster pcs (recommended for unix os). - - save_sim: boolean - * True: Simulation results will be saved - * False: Simulation results will not be saved - """ - self._return_all_likes=True #alloes multi-objective calibration - super(NSGAII_DEV, self).__init__(*args, **kwargs) - - - def fastSort(self,x): - n = x.shape[0] - S = np.zeros((n,n),dtype=bool) - Np = np.zeros(n) - - - for i in range(n): - for j in range(n): - S[i,j] = self.dominates(x[i,:],x[j,:]) - - nDom = np.sum(S,axis=0) # the n solutions that dominates i - Np[nDom == 0] = 1 # if i == 0, i is non-dominated, set i rank to 1, i belongs to first non-dominated front - k = 1 - # loop over pareto fronts - while np.sum(Np == 0) > 0: - l = np.arange(n)[Np==k] # first non-dominated front - for i in l: # loop over the non-dominated front - nDom[S[i,:]] = nDom[S[i,:]] -1 # reduce by 1 the rank of the solutions that i dominates - k += 1 - # now nDom has been reduced by 1, so the next non-dominated front will be nDom == 0 - # and Np == 0 ensure that we don't pass over the first ranked non-dom solutions - Np[(nDom == 0) & (Np == 0) ] = k - - return Np.astype(int) - - - - def dominates(self,a,b): - if len(a.shape) >1: - ret = (np.sum(a <= b,axis =1) == a.shape[1]) & (np.sum(a < b,axis=1) >0) - else: - ret = (np.sum(a <= b) == len(a)) & (np.sum(a < b) >0) - return ret - - - def crowdDist(self,x): - n = x.shape[0] - - nobj = x.shape[1] - - dist = np.zeros(n) - - ord = np.argsort(x,axis=0) - - X = x[ord,range(nobj)] - - dist = np.vstack([X,np.full(nobj,np.inf)]) - np.vstack([np.full(nobj,-np.inf),X]) - - norm = np.max(X,axis=0) - np.min(X,axis=0) - dist_to_last,dist_to_next = dist, np.copy(dist) - dist_to_last,dist_to_next = dist_to_last[:-1]/norm ,dist_to_next[1:]/norm - J = np.argsort(ord,axis=0) - ret = np.sum(dist_to_last[J, np.arange(nobj)] + dist_to_next[J, np.arange(nobj)], axis=1) / nobj - - return ret - - def crowdDist2(self,x): - n = x.shape[0] - - dist = np.zeros(n) - - for obj in range(x.shape[1]): - ord = np.argsort(x[:,obj]) - dist[ord[[0,-1]]] = np.inf - - norm = np.max(x[:,obj]) - np.min(x[:,obj]) - - for i in range(1,n-1): - dist[i] = dist[ord[i]] + (x[ord[i+1],obj] - x[ord[i-1],obj])/norm - - return dist - - - - - def sample(self, generations, n_obj, n_pop = None, skip_duplicates = False, - selection = TournamentSelection(pressure=2), - crossover = Crossover(crossProb=0.9), - mutation = PolynomialMutation(prob_mut=0.25,eta_mut=30)): - - self.n_obj = n_obj - self.selection = selection - self.crossover = crossover - self.mutation = mutation - - self.n_pop = n_pop - self.generations= generations - self.set_repetiton(self.generations*self.n_pop) - self.skip_duplicates = skip_duplicates - - Pt = np.vstack([self.parameter()['random'] for i in range(self.n_pop)]) - - #Burn-in - #TODO: I would suggest to make the burin-in sample indiviudual for each cpu-core in case of parallel usage, compare dream.py, but not sure if this is defined in the publication - # evaluate population - param_generator = ((i,Pt[i,:]) for i in range(self.n_pop)) - - ret = list(self.repeat(param_generator)) - - Of = [] - for p in range(self.n_pop): - index,parameters,simulation_results = ret[p] - Of.append(self.postprocessing(0, parameters, simulation_results, chains=p)) - Of = np.vstack(Of) - - - nonDomRank = self.fastSort(Of) - - crDist = np.empty(self.n_pop) - for rk in range(1,np.max(nonDomRank)+1): - crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) - - - # sorting - - rank = np.lexsort((-crDist,nonDomRank)) - Ptsort = Pt[rank] - Ofsort = Of[rank] - - Of_parent = Ofsort[:,:] - Pt_parent = Ptsort[:,:] - - # selection - - offsprings = self.selection.calc(pop_rank = rank) - - Qt = Ptsort[offsprings,:] - - - # crossover - try: - n_var = self.setup.n_var - except AttributeError: - n_var = len(parameters) - - - Qt = self.crossover.calc(pop = Qt,n_var = n_var) - - # mutation - self.min_bound, self.max_bound = self.parameter()['minbound'], self.parameter()['maxbound'] - self.varminbound = np.array([]) - self.varmaxbound = np.array([]) - for i in range(len(self.min_bound)): - self.varminbound = np.append(self.varminbound,self.min_bound[i]) - self.varmaxbound = np.append(self.varmaxbound,self.max_bound[i]) - - Qt = self.mutation.calc(x = Qt,xl = self.varminbound,xu = self.varmaxbound) - - for igen in range(1,self.generations - 1): - - Rt = np.vstack([Pt_parent,Qt]) - - - if self.skip_duplicates: - # print(f"pop: {len(Qt)}") - # print(f"pop non dup: {len(np.unique(Qt,axis=0))}") - - - #Qt_nondup = np.unique(Qt,axis=0) - #self.n_pop_nondup = len(Qt_nondup) - - # evaluate population - param_generator = ((i,Qt[i,:]) for i in range(self.n_pop)) - - - ret = list(self.repeat(param_generator)) - - Of = [] - for p in range(self.n_pop): - index, parameters,simulation_results = ret[p] - Of.append(self.postprocessing(igen, parameters, simulation_results, chains=p)) - Of = np.vstack(Of) - - Of = np.vstack([Of_parent ,Of]) - - nonDomRank = self.fastSort(Of) - - crDist = np.empty(len(Of)) - for rk in range(1,np.max(nonDomRank)+1): - crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) - else: - - # print(f"pop: {len(Qt)}") - # print(f"pop non dup: {len(np.unique(Qt,axis=0))}") - # evaluate population - param_generator = ((i,Rt[i,:]) for i in range(self.n_pop *2)) - - - - ret = list(self.repeat(param_generator)) - - Of = [] - for p in range(self.n_pop*2): - index, parameters,simulation_results = ret[p] - Of.append(self.postprocessing(igen, parameters, simulation_results, chains=p)) - Of = np.vstack(Of) - - nonDomRank = self.fastSort(Of) - - crDist = np.empty(self.n_pop*2) - for rk in range(1,np.max(nonDomRank)+1): - crDist[nonDomRank == rk] = self.crowdDist(Of[nonDomRank ==rk,:]) - - - # sorting - rank = np.lexsort((-crDist,nonDomRank))[:self.n_pop] - Ptsort = Rt[rank] - Ofsort = Of[rank] - - Pt_parent = Ptsort[:,:] - - Of_parent = Ofsort[:,:] - - - # selection - offsprings = self.selection.calc(pop_rank = rank) - - Qt = Ptsort[offsprings,:] - # crossover - Qt = self.crossover.calc(pop = Qt,n_var = n_var) - # mutation - Qt = self.mutation.calc(x = Qt,xl = self.varminbound,xu =self.varmaxbound) - - - - self.final_call() diff --git a/spotpy/examples/NSGA2.csv b/spotpy/examples/NSGA2.csv index e2fae161..9197c4d8 100644 --- a/spotpy/examples/NSGA2.csv +++ b/spotpy/examples/NSGA2.csv @@ -1,271 +1,511 @@ -like1,like2,like3,par0,par1,par2,par3,par4,simulation_0,simulation_1,simulation_2,chain -139.9,73.4,3.365,0.9844,0.656,0.264,0.04523,0.887,139.9,73.4,3.365,0.0 -19.94,157.6,16.16,0.9165,0.1123,0.6724,0.675,0.867,19.94,157.6,16.16,1.0 -88.5,0.4963,21.73,0.8037,0.9946,0.1226,0.3958,0.5723,88.5,0.4963,21.73,2.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,3.0 -8.5,125.25,62.4,0.6816,0.06354,0.66,0.925,0.277,8.5,125.25,62.4,4.0 -49.84,33.66,9.34,0.8994,0.5967,0.1805,0.7114,0.4783,49.84,33.66,9.34,5.0 -32.94,51.25,31.73,0.726,0.3914,0.2107,0.6694,0.619,32.94,51.25,31.73,6.0 -10.8,101.75,19.8,0.8506,0.0959,0.703,0.1698,0.373,10.8,101.75,19.8,7.0 -5.355,3.385,74.1,0.10547,0.613,0.7065,0.374,0.7856,5.355,3.385,74.1,8.0 -45.34,80.75,5.055,0.9614,0.3596,0.5024,0.7793,0.262,45.34,80.75,5.055,9.0 -17.97,2.957,34.06,0.3806,0.859,0.1992,0.703,0.476,17.97,2.957,34.06,10.0 -17.77,0.727,92.1,0.1672,0.961,0.1976,0.7515,0.7007,17.77,0.727,92.1,11.0 -59.0,76.9,16.61,0.891,0.4343,0.4065,0.3752,0.758,59.0,76.9,16.61,12.0 -58.12,107.6,33.22,0.833,0.3506,0.454,0.9346,0.9995,58.12,107.6,33.22,13.0 -0.4932,48.53,119.44,0.291,0.01006,0.2377,0.3784,0.5215,0.4932,48.53,119.44,14.0 -38.22,7.55,72.94,0.3857,0.835,0.2201,0.734,0.599,38.22,7.55,72.94,15.0 -7.637,54.88,86.3,0.4202,0.12213,0.2032,0.2788,0.156,7.637,54.88,86.3,16.0 -35.44,30.23,34.28,0.657,0.5396,0.176,0.994,0.6816,35.44,30.23,34.28,17.0 -42.25,8.73,65.8,0.4363,0.829,0.00533,0.3833,0.667,42.25,8.73,65.8,18.0 -0.6846,33.94,107.56,0.2435,0.01978,0.4038,0.05292,0.4814,0.6846,33.94,107.56,19.0 -5.684,18.69,118.75,0.1703,0.2333,0.774,0.3787,0.2766,5.684,18.69,118.75,20.0 -11.41,85.0,95.3,0.503,0.11835,0.5684,0.007137,0.1455,11.41,85.0,95.3,21.0 -63.66,87.94,50.06,0.7515,0.42,0.2505,0.633,0.2147,63.66,87.94,50.06,22.0 -55.22,18.58,155.8,0.3215,0.748,0.8354,0.02632,0.334,55.22,18.58,155.8,23.0 -65.94,12.14,78.56,0.4985,0.8447,0.779,0.10876,0.5522,65.94,12.14,78.56,24.0 -43.3,46.25,107.5,0.4543,0.4836,0.7466,0.1635,0.3064,43.3,46.25,107.5,25.0 -23.72,19.11,126.06,0.2537,0.5537,0.3694,0.827,0.3792,23.72,19.11,126.06,26.0 -16.58,113.2,100.5,0.5635,0.1278,0.861,0.0792,0.7627,16.58,113.2,100.5,27.0 -47.94,91.75,105.4,0.57,0.3433,0.8296,0.536,0.1378,47.94,91.75,105.4,28.0 -99.6,22.8,95.9,0.5605,0.814,0.715,0.05927,0.3584,99.6,22.8,95.9,29.0 -88.5,0.4963,21.73,0.8037,0.9946,0.1226,0.3958,0.5723,88.5,0.4963,21.73,0.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,1.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,2.0 -17.77,0.727,92.1,0.1672,0.961,0.1976,0.7515,0.7007,17.77,0.727,92.1,3.0 -2.26,1.428,31.28,0.10547,0.613,0.7065,0.406,0.2147,2.26,1.428,31.28,4.0 -49.84,33.66,9.34,0.8994,0.5967,0.1805,0.7114,0.4783,49.84,33.66,9.34,5.0 -17.97,2.957,34.06,0.3806,0.859,0.1992,0.703,0.476,17.97,2.957,34.06,6.0 -0.4932,48.53,119.44,0.291,0.01006,0.2377,0.3784,0.5215,0.4932,48.53,119.44,7.0 -19.67,155.5,15.93,0.9165,0.1123,0.6724,0.675,0.334,19.67,155.5,15.93,8.0 -32.28,63.62,2.742,0.972,0.3367,0.5024,0.7793,0.373,32.28,63.62,2.742,9.0 -8.5,125.25,62.4,0.6816,0.06354,0.66,0.925,0.277,8.5,125.25,62.4,10.0 -0.6846,33.94,107.56,0.2435,0.01978,0.4038,0.05292,0.4814,0.6846,33.94,107.56,11.0 -34.3,20.14,17.98,0.7515,0.6304,0.7065,0.3774,0.7856,34.3,20.14,17.98,12.0 -5.188,3.28,71.8,0.10547,0.613,0.7065,0.374,0.787,5.188,3.28,71.8,13.0 -30.0,98.6,14.55,0.8984,0.2333,0.774,0.3787,0.2766,30.0,98.6,14.55,14.0 -10.8,101.75,19.8,0.8506,0.0959,0.703,0.1698,0.373,10.8,101.75,19.8,15.0 -32.94,51.25,31.73,0.726,0.3914,0.2107,0.6694,0.619,32.94,51.25,31.73,16.0 -6.266,59.06,67.0,0.4937,0.0959,0.703,0.1698,0.373,6.266,59.06,67.0,17.0 -139.9,73.4,3.365,0.9844,0.656,0.264,0.04523,0.887,139.9,73.4,3.365,18.0 -19.94,157.6,16.16,0.9165,0.1123,0.6724,0.675,0.867,19.94,157.6,16.16,19.0 -20.4,3.21,38.44,0.3806,0.864,0.09235,0.994,0.6816,20.4,3.21,38.44,20.0 -5.324,17.5,133.9,0.1456,0.2333,0.779,0.10876,0.5522,5.324,17.5,133.9,21.0 -5.355,3.385,74.1,0.10547,0.613,0.7065,0.374,0.7856,5.355,3.385,74.1,22.0 -11.695,110.25,21.44,0.8506,0.0959,0.703,0.05292,0.4814,11.695,110.25,21.44,23.0 -59.0,76.9,16.61,0.891,0.4343,0.4065,0.3752,0.758,59.0,76.9,16.61,24.0 -35.44,30.23,34.28,0.657,0.5396,0.176,0.994,0.6816,35.44,30.23,34.28,25.0 -45.34,80.75,5.055,0.9614,0.3596,0.5024,0.7793,0.262,45.34,80.75,5.055,26.0 -36.22,67.06,17.4,0.856,0.3506,0.4385,0.888,0.9995,36.22,67.06,17.4,27.0 -51.8,80.6,16.19,0.891,0.3914,0.2107,0.6484,0.619,51.8,80.6,16.19,28.0 -59.0,76.9,16.61,0.891,0.4343,0.4065,0.3752,0.758,59.0,76.9,16.61,29.0 -88.5,0.4963,21.73,0.8037,0.9946,0.1226,0.3958,0.5723,88.5,0.4963,21.73,0.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,1.0 -0.1625,2.232,99.56,0.02348,0.0679,0.07465,0.592,0.6807,0.1625,2.232,99.56,2.0 -7.43,114.4,13.63,0.8994,0.061,0.07465,0.622,0.4805,7.43,114.4,13.63,3.0 -6.33,0.145,32.22,0.1672,0.9775,0.2169,0.7954,0.7007,6.33,0.145,32.22,4.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,5.0 -2.26,1.428,31.28,0.10547,0.613,0.7065,0.406,0.2147,2.26,1.428,31.28,6.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,7.0 -0.4932,48.53,119.44,0.291,0.01006,0.2377,0.3784,0.5215,0.4932,48.53,119.44,8.0 -32.28,63.62,2.742,0.972,0.3367,0.5024,0.7793,0.373,32.28,63.62,2.742,9.0 -124.8,0.7,22.08,0.8506,0.9946,0.1351,0.3958,0.5723,124.8,0.7,22.08,10.0 -0.528,8.13,164.9,0.04987,0.061,0.07465,0.592,0.851,0.528,8.13,164.9,11.0 -8.65,97.9,4.273,0.9614,0.0812,0.07465,0.5864,0.4805,8.65,97.9,4.273,12.0 -6.363,0.2605,33.0,0.1672,0.961,0.1976,0.598,0.4805,6.363,0.2605,33.0,13.0 -49.53,30.1,8.914,0.8994,0.622,0.703,0.2162,0.373,49.53,30.1,8.914,14.0 -0.6846,33.94,107.56,0.2435,0.01978,0.4038,0.05292,0.4814,0.6846,33.94,107.56,15.0 -5.188,3.28,71.8,0.10547,0.613,0.7065,0.374,0.787,5.188,3.28,71.8,16.0 -10.09,95.2,18.52,0.8506,0.0959,0.724,0.1698,0.7007,10.09,95.2,18.52,17.0 -39.6,51.56,11.14,0.891,0.4343,0.1226,0.3958,0.575,39.6,51.56,11.14,18.0 -3.62,48.6,53.6,0.4937,0.06934,0.703,0.1698,0.4814,3.62,48.6,53.6,19.0 -34.3,20.14,17.98,0.7515,0.6304,0.7065,0.3774,0.7856,34.3,20.14,17.98,20.0 -15.305,23.81,14.234,0.733,0.3914,0.2107,0.592,0.4812,15.305,23.81,14.234,21.0 -14.234,25.7,15.055,0.726,0.3562,0.1992,0.703,0.476,14.234,25.7,15.055,22.0 -8.5,125.25,62.4,0.6816,0.06354,0.66,0.925,0.277,8.5,125.25,62.4,23.0 -139.9,73.4,3.365,0.9844,0.656,0.264,0.04523,0.887,139.9,73.4,3.365,24.0 -5.324,17.5,133.9,0.1456,0.2333,0.779,0.10876,0.5522,5.324,17.5,133.9,25.0 -11.695,0.632,61.4,0.1672,0.9487,0.4868,0.3752,0.693,11.695,0.632,61.4,26.0 -49.84,33.66,9.34,0.8994,0.5967,0.1805,0.7114,0.4783,49.84,33.66,9.34,27.0 -5.355,3.385,74.1,0.10547,0.613,0.7065,0.374,0.7856,5.355,3.385,74.1,28.0 -26.39,41.03,25.42,0.726,0.3914,0.1805,0.7114,0.4783,26.39,41.03,25.42,29.0 -7.43,114.4,13.63,0.8994,0.061,0.07465,0.622,0.4805,7.43,114.4,13.63,0.0 -6.33,0.145,32.22,0.1672,0.9775,0.2169,0.7954,0.7007,6.33,0.145,32.22,1.0 -0.0794,3.938,167.0,0.02348,0.01978,0.4187,0.05292,0.4814,0.0794,3.938,167.0,2.0 -34.9,73.94,0.368,0.9966,0.3208,0.4797,0.7793,0.4805,34.9,73.94,0.368,3.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,4.0 -0.555,27.53,87.25,0.2435,0.01978,0.4038,0.592,0.851,0.555,27.53,87.25,5.0 -0.1625,2.232,99.56,0.02348,0.0679,0.07465,0.592,0.6807,0.1625,2.232,99.56,6.0 -3.912,0.2112,20.53,0.1672,0.9487,0.4868,0.4023,0.693,3.912,0.2112,20.53,7.0 -2.26,1.428,31.28,0.10547,0.613,0.7065,0.406,0.2147,2.26,1.428,31.28,8.0 -0.451,22.36,87.25,0.2073,0.01978,0.1226,0.3901,0.575,0.451,22.36,87.25,9.0 -0.195,4.8,95.1,0.04987,0.03903,0.5024,0.821,0.373,0.195,4.8,95.1,10.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,11.0 -0.3062,4.715,95.6,0.04987,0.061,0.07465,0.592,0.4805,0.3062,4.715,95.6,12.0 -8.65,97.9,4.273,0.9614,0.0812,0.07465,0.5864,0.4805,8.65,97.9,4.273,13.0 -6.363,0.2605,33.0,0.1672,0.961,0.1976,0.598,0.4805,6.363,0.2605,33.0,14.0 -0.381,5.87,119.06,0.04987,0.061,0.07465,0.592,0.8745,0.381,5.87,119.06,15.0 -90.2,47.34,2.17,0.9844,0.656,0.264,0.7114,0.4783,90.2,47.34,2.17,16.0 -32.28,63.62,2.742,0.972,0.3367,0.5024,0.7793,0.373,32.28,63.62,2.742,17.0 -88.5,0.4963,21.73,0.8037,0.9946,0.1226,0.3958,0.5723,88.5,0.4963,21.73,18.0 -49.53,30.1,8.914,0.8994,0.622,0.703,0.2162,0.373,49.53,30.1,8.914,19.0 -10.09,95.2,18.52,0.8506,0.0959,0.724,0.1698,0.7007,10.09,95.2,18.52,20.0 -3.62,48.6,53.6,0.4937,0.06934,0.703,0.1698,0.4814,3.62,48.6,53.6,21.0 -5.188,3.28,71.8,0.10547,0.613,0.7065,0.374,0.787,5.188,3.28,71.8,22.0 -0.6846,33.94,107.56,0.2435,0.01978,0.4038,0.05292,0.4814,0.6846,33.94,107.56,23.0 -39.6,51.56,11.14,0.891,0.4343,0.1226,0.3958,0.575,39.6,51.56,11.14,24.0 -34.3,20.14,17.98,0.7515,0.6304,0.7065,0.3774,0.7856,34.3,20.14,17.98,25.0 -15.305,23.81,14.234,0.733,0.3914,0.2107,0.592,0.4812,15.305,23.81,14.234,26.0 -2.87,1.684,86.7,0.04987,0.6304,0.7163,0.422,0.7856,2.87,1.684,86.7,27.0 -46.3,44.84,11.14,0.891,0.5083,0.1226,0.3958,0.575,46.3,44.84,11.14,28.0 -2.148,29.7,98.94,0.2435,0.06744,0.3857,0.11456,0.736,2.148,29.7,98.94,29.0 -6.33,0.145,32.22,0.1672,0.9775,0.2169,0.7954,0.7007,6.33,0.145,32.22,0.0 -0.0794,3.938,167.0,0.02348,0.01978,0.4187,0.05292,0.4814,0.0794,3.938,167.0,1.0 -34.9,73.94,0.368,0.9966,0.3208,0.4797,0.7793,0.4805,34.9,73.94,0.368,2.0 -81.75,0.4585,20.06,0.8037,0.9946,0.1226,0.3958,0.575,81.75,0.4585,20.06,3.0 -6.957,107.06,12.766,0.8994,0.061,0.1736,0.619,0.4805,6.957,107.06,12.766,4.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,5.0 -0.1625,2.232,99.56,0.02348,0.0679,0.07465,0.592,0.6807,0.1625,2.232,99.56,6.0 -0.1875,2.887,58.56,0.04987,0.061,0.07465,0.598,0.501,0.1875,2.887,58.56,7.0 -8.07,89.94,3.932,0.9614,0.08234,0.07465,0.592,0.6807,8.07,89.94,3.932,8.0 -0.2032,10.08,31.92,0.2435,0.01978,0.4038,0.1888,0.7153,0.2032,10.08,31.92,9.0 -0.588,5.31,18.31,0.2435,0.0997,0.507,0.8027,0.388,0.588,5.31,18.31,10.0 -3.912,0.2112,20.53,0.1672,0.9487,0.4868,0.4023,0.693,3.912,0.2112,20.53,11.0 -0.434,0.773,23.0,0.04987,0.3596,0.507,0.8027,0.388,0.434,0.773,23.0,12.0 -7.43,114.4,13.63,0.8994,0.061,0.07465,0.622,0.4805,7.43,114.4,13.63,13.0 -88.5,0.4963,21.73,0.8037,0.9946,0.1226,0.3958,0.5723,88.5,0.4963,21.73,14.0 -0.1855,2.857,134.6,0.02211,0.061,0.07294,0.604,0.4688,0.1855,2.857,134.6,15.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,16.0 -27.05,0.1516,135.5,0.1672,0.9946,0.1567,0.3958,0.5723,27.05,0.1516,135.5,17.0 -34.3,20.14,17.98,0.7515,0.6304,0.7065,0.3774,0.7856,34.3,20.14,17.98,18.0 -0.4006,49.28,50.97,0.4937,0.008064,0.07465,0.592,0.4805,0.4006,49.28,50.97,19.0 -10.09,95.2,18.52,0.8506,0.0959,0.724,0.1698,0.7007,10.09,95.2,18.52,20.0 -0.195,4.8,95.1,0.04987,0.03903,0.5024,0.821,0.373,0.195,4.8,95.1,21.0 -1.369,14.125,51.0,0.233,0.0884,0.4165,0.7793,0.4978,1.369,14.125,51.0,22.0 -0.2484,3.824,77.56,0.04987,0.061,0.07465,0.592,0.388,0.2484,3.824,77.56,23.0 -0.3826,2.678,127.3,0.02348,0.125,0.07465,0.5796,0.4805,0.3826,2.678,127.3,24.0 -8.65,97.9,4.273,0.9614,0.0812,0.07465,0.5864,0.4805,8.65,97.9,4.273,25.0 -15.305,23.81,14.234,0.733,0.3914,0.2107,0.592,0.4812,15.305,23.81,14.234,26.0 -6.363,0.2605,33.0,0.1672,0.961,0.1976,0.598,0.4805,6.363,0.2605,33.0,27.0 -2.26,1.428,31.28,0.10547,0.613,0.7065,0.406,0.2147,2.26,1.428,31.28,28.0 -0.2179,2.994,133.6,0.02348,0.0679,0.03763,0.592,0.4805,0.2179,2.994,133.6,29.0 -6.33,0.145,32.22,0.1672,0.9775,0.2169,0.7954,0.7007,6.33,0.145,32.22,0.0 -6.957,107.06,12.766,0.8994,0.061,0.1736,0.619,0.4805,6.957,107.06,12.766,1.0 -0.0743,9.14,76.06,0.1081,0.008064,0.0795,0.592,0.4805,0.0743,9.14,76.06,2.0 -27.4,66.6,0.318,0.9966,0.2915,0.4797,0.7847,0.4805,27.4,66.6,0.318,3.0 -43.22,0.2423,10.61,0.8037,0.9946,0.1226,0.3958,0.5967,43.22,0.2423,10.61,4.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,5.0 -0.07495,1.846,36.6,0.04987,0.03903,0.5024,0.598,0.5796,0.07495,1.846,36.6,6.0 -8.07,89.94,3.932,0.9614,0.08234,0.07465,0.592,0.6807,8.07,89.94,3.932,7.0 -0.2032,10.08,31.92,0.2435,0.01978,0.4038,0.1888,0.7153,0.2032,10.08,31.92,8.0 -3.912,0.2112,20.53,0.1672,0.9487,0.4868,0.4023,0.693,3.912,0.2112,20.53,9.0 -0.434,0.773,23.0,0.04987,0.3596,0.507,0.8027,0.388,0.434,0.773,23.0,10.0 -1.168,0.688,15.74,0.10547,0.6294,0.7065,0.406,0.693,1.168,0.688,15.74,11.0 -0.588,5.31,18.31,0.2435,0.0997,0.507,0.8027,0.388,0.588,5.31,18.31,12.0 -0.0794,3.938,167.0,0.02348,0.01978,0.4187,0.05292,0.4814,0.0794,3.938,167.0,13.0 -7.43,114.4,13.63,0.8994,0.061,0.07465,0.622,0.4805,7.43,114.4,13.63,14.0 -27.05,0.1516,135.5,0.1672,0.9946,0.1567,0.3958,0.5723,27.05,0.1516,135.5,15.0 -71.9,0.403,17.64,0.8037,0.9946,0.1226,0.1888,0.7153,71.9,0.403,17.64,16.0 -31.89,67.56,0.3362,0.9966,0.3208,0.4797,0.7793,0.6846,31.89,67.56,0.3362,17.0 -34.3,20.14,17.98,0.7515,0.6304,0.7065,0.3774,0.7856,34.3,20.14,17.98,18.0 -10.09,95.2,18.52,0.8506,0.0959,0.724,0.1698,0.7007,10.09,95.2,18.52,19.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,20.0 -0.4006,49.28,50.97,0.4937,0.008064,0.07465,0.592,0.4805,0.4006,49.28,50.97,21.0 -8.65,97.9,4.273,0.9614,0.0812,0.07465,0.5864,0.4805,8.65,97.9,4.273,22.0 -6.406,0.1783,74.4,0.0813,0.973,0.4868,0.604,0.4287,6.406,0.1783,74.4,23.0 -0.3987,49.06,52.5,0.485,0.008064,0.07465,0.592,0.6807,0.3987,49.06,52.5,24.0 -15.305,23.81,14.234,0.733,0.3914,0.2107,0.592,0.4812,15.305,23.81,14.234,25.0 -0.1383,2.129,100.3,0.02211,0.061,0.07294,0.604,0.6807,0.1383,2.129,100.3,26.0 -1.369,14.125,51.0,0.233,0.0884,0.4165,0.7793,0.4978,1.369,14.125,51.0,27.0 -5.992,0.2452,33.38,0.1575,0.961,0.1976,0.598,0.4805,5.992,0.2452,33.38,28.0 -2.26,1.428,31.28,0.10547,0.613,0.7065,0.406,0.2147,2.26,1.428,31.28,29.0 -6.33,0.145,32.22,0.1672,0.9775,0.2169,0.7954,0.7007,6.33,0.145,32.22,0.0 -27.4,66.6,0.318,0.9966,0.2915,0.4797,0.7847,0.4805,27.4,66.6,0.318,1.0 -43.22,0.2423,10.61,0.8037,0.9946,0.1226,0.3958,0.5967,43.22,0.2423,10.61,2.0 -0.02852,12.11,103.0,0.10547,0.00235,0.07,0.592,0.4805,0.02852,12.11,103.0,3.0 -11.18,105.44,0.3943,0.9966,0.0959,0.724,0.172,0.7007,11.18,105.44,0.3943,4.0 -22.48,1.214,0.9507,0.9614,0.9487,0.4868,0.4023,0.693,22.48,1.214,0.9507,5.0 -0.8037,39.84,1.569,0.963,0.01978,0.4038,0.1888,0.7153,0.8037,39.84,1.569,6.0 -2.111,32.53,3.875,0.8994,0.061,0.5024,0.598,0.5796,2.111,32.53,3.875,7.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,8.0 -8.336,4.89,4.37,0.7515,0.6304,0.7065,0.406,0.693,8.336,4.89,4.37,9.0 -3.912,0.2112,20.53,0.1672,0.9487,0.4868,0.4023,0.693,3.912,0.2112,20.53,10.0 -3.258,36.34,1.589,0.9614,0.0823,0.1175,0.7036,0.702,3.258,36.34,1.589,11.0 -0.07227,2.56,8.18,0.2435,0.02744,0.4038,0.7954,0.7007,0.07227,2.56,8.18,12.0 -0.06366,0.575,26.56,0.02348,0.0997,0.507,0.8027,0.3867,0.06366,0.575,26.56,13.0 -0.434,0.773,23.0,0.04987,0.3596,0.507,0.8027,0.388,0.434,0.773,23.0,14.0 -1.168,0.688,15.74,0.10547,0.6294,0.7065,0.406,0.693,1.168,0.688,15.74,15.0 -1.168,0.688,15.74,0.10547,0.6294,0.7065,0.406,0.693,1.168,0.688,15.74,16.0 -0.0743,9.14,76.06,0.1081,0.008064,0.0795,0.592,0.4805,0.0743,9.14,76.06,17.0 -8.07,89.94,3.932,0.9614,0.08234,0.07465,0.592,0.6807,8.07,89.94,3.932,18.0 -27.05,0.1516,135.5,0.1672,0.9946,0.1567,0.3958,0.5723,27.05,0.1516,135.5,19.0 -71.9,0.403,17.64,0.8037,0.9946,0.1226,0.1888,0.7153,71.9,0.403,17.64,20.0 -31.89,67.56,0.3362,0.9966,0.3208,0.4797,0.7793,0.6846,31.89,67.56,0.3362,21.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,22.0 -4.88,55.2,8.37,0.878,0.0812,0.07465,0.4023,0.693,4.88,55.2,8.37,23.0 -0.07495,1.846,36.6,0.04987,0.03903,0.5024,0.598,0.5796,0.07495,1.846,36.6,24.0 -6.406,0.1783,74.4,0.0813,0.973,0.4868,0.604,0.4287,6.406,0.1783,74.4,25.0 -0.124,15.26,15.78,0.4937,0.008064,0.4038,0.1969,0.7153,0.124,15.26,15.78,26.0 -3.727,57.38,7.242,0.894,0.061,0.4165,0.7793,0.505,3.727,57.38,7.242,27.0 -0.588,5.31,18.31,0.2435,0.0997,0.507,0.8027,0.388,0.588,5.31,18.31,28.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,29.0 -27.4,66.6,0.318,0.9966,0.2915,0.4797,0.7847,0.4805,27.4,66.6,0.318,0.0 -0.02852,12.11,103.0,0.10547,0.00235,0.07,0.592,0.4805,0.02852,12.11,103.0,1.0 -11.18,105.44,0.3943,0.9966,0.0959,0.724,0.172,0.7007,11.18,105.44,0.3943,2.0 -10.555,0.0592,52.88,0.1672,0.9946,0.126,0.3958,0.5986,10.555,0.0592,52.88,3.0 -52.34,0.2935,1.441,0.973,0.9946,0.1226,0.3958,0.5967,52.34,0.2935,1.441,4.0 -2.797,0.10614,14.46,0.1672,0.9634,0.51,0.4023,0.693,2.797,0.10614,14.46,5.0 -43.22,0.2423,10.61,0.8037,0.9946,0.1226,0.3958,0.5967,43.22,0.2423,10.61,6.0 -22.48,1.214,0.9507,0.9614,0.9487,0.4868,0.4023,0.693,22.48,1.214,0.9507,7.0 -0.8037,39.84,1.569,0.963,0.01978,0.4038,0.1888,0.7153,0.8037,39.84,1.569,8.0 -2.111,32.53,3.875,0.8994,0.061,0.5024,0.598,0.5796,2.111,32.53,3.875,9.0 -8.336,4.89,4.37,0.7515,0.6304,0.7065,0.406,0.693,8.336,4.89,4.37,10.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,11.0 -3.258,36.34,1.589,0.9614,0.0823,0.1175,0.7036,0.702,3.258,36.34,1.589,12.0 -43.62,0.196,10.695,0.8037,0.9956,0.1226,0.3958,0.7007,43.62,0.196,10.695,13.0 -0.07227,2.56,8.18,0.2435,0.02744,0.4038,0.7954,0.7007,0.07227,2.56,8.18,14.0 -0.02853,0.2578,12.21,0.0229,0.0997,0.507,0.4023,0.693,0.02853,0.2578,12.21,15.0 -8.34,14.85,1.012,0.958,0.3596,0.507,0.8027,0.388,8.34,14.85,1.012,16.0 -31.89,67.56,0.3362,0.9966,0.3208,0.4797,0.7793,0.6846,31.89,67.56,0.3362,17.0 -5.613,0.1287,28.61,0.1672,0.9775,0.2169,0.4045,0.5967,5.613,0.1287,28.61,18.0 -0.03354,4.13,34.34,0.1081,0.008064,0.5024,0.598,0.5796,0.03354,4.13,34.34,19.0 -6.324,70.5,3.08,0.9614,0.08234,0.07465,0.7974,0.388,6.324,70.5,3.08,20.0 -66.5,0.3728,16.31,0.8037,0.9946,0.0806,0.592,0.6807,66.5,0.3728,16.31,21.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,22.0 -4.88,55.2,8.37,0.878,0.0812,0.07465,0.4023,0.693,4.88,55.2,8.37,23.0 -31.97,56.94,1.015,0.989,0.3596,0.1226,0.1888,0.7153,31.97,56.94,1.015,24.0 -11.68,6.855,6.12,0.7515,0.6304,0.4868,0.4023,0.693,11.68,6.855,6.12,25.0 -0.124,15.26,15.78,0.4937,0.008064,0.4038,0.1969,0.7153,0.124,15.26,15.78,26.0 -3.727,57.38,7.242,0.894,0.061,0.4165,0.7793,0.505,3.727,57.38,7.242,27.0 -0.434,0.773,23.0,0.04987,0.3596,0.507,0.8027,0.388,0.434,0.773,23.0,28.0 -1.168,0.688,15.74,0.10547,0.6294,0.7065,0.406,0.693,1.168,0.688,15.74,29.0 -0.02852,12.11,103.0,0.10547,0.00235,0.07,0.592,0.4805,0.02852,12.11,103.0,0.0 -52.34,0.2935,1.441,0.973,0.9946,0.1226,0.3958,0.5967,52.34,0.2935,1.441,1.0 -0.4382,41.62,0.1422,0.9966,0.01042,0.4038,0.1888,0.7153,0.4382,41.62,0.1422,2.0 -0.2605,110.56,4.277,0.963,0.00235,0.07,0.592,0.4805,0.2605,110.56,4.277,3.0 -11.89,0.05344,101.3,0.10547,0.9956,0.1376,0.3958,0.7134,11.89,0.05344,101.3,4.0 -10.555,0.0592,52.88,0.1672,0.9946,0.126,0.3958,0.5986,10.555,0.0592,52.88,5.0 -19.34,0.1085,4.75,0.8037,0.9946,0.507,0.8027,0.388,19.34,0.1085,4.75,6.0 -2.797,0.10614,14.46,0.1672,0.9634,0.51,0.4023,0.693,2.797,0.10614,14.46,7.0 -3.258,36.34,1.589,0.9614,0.0823,0.1175,0.7036,0.702,3.258,36.34,1.589,8.0 -1.838,20.5,1.868,0.923,0.0823,0.507,0.8027,0.388,1.838,20.5,1.868,9.0 -8.336,4.89,4.37,0.7515,0.6304,0.7065,0.406,0.693,8.336,4.89,4.37,10.0 -18.22,0.9834,0.77,0.9614,0.9487,0.4868,0.4023,0.7007,18.22,0.9834,0.77,11.0 -8.37,14.91,0.9336,0.9614,0.3596,0.507,0.8027,0.388,8.37,14.91,0.9336,12.0 -0.843,0.519,11.555,0.10547,0.6187,0.7065,0.406,0.7007,0.843,0.519,11.555,13.0 -0.07227,2.56,8.18,0.2435,0.02744,0.4038,0.7954,0.7007,0.07227,2.56,8.18,14.0 -0.8037,39.84,1.569,0.963,0.01978,0.4038,0.1888,0.7153,0.8037,39.84,1.569,15.0 -10.72,12.555,0.9336,0.9614,0.4607,0.507,0.8027,0.388,10.72,12.555,0.9336,16.0 -0.1564,2.553,8.414,0.2435,0.05774,0.4038,0.7954,0.7017,0.1564,2.553,8.414,17.0 -0.02853,0.2578,12.21,0.0229,0.0997,0.507,0.4023,0.693,0.02853,0.2578,12.21,18.0 -8.34,14.85,1.012,0.958,0.3596,0.507,0.8027,0.388,8.34,14.85,1.012,19.0 -27.4,66.6,0.318,0.9966,0.2915,0.4797,0.7847,0.4805,27.4,66.6,0.318,20.0 -11.18,105.44,0.3943,0.9966,0.0959,0.724,0.172,0.7007,11.18,105.44,0.3943,21.0 -43.62,0.196,10.695,0.8037,0.9956,0.1226,0.3958,0.7007,43.62,0.196,10.695,22.0 -5.613,0.1287,28.61,0.1672,0.9775,0.2169,0.4045,0.5967,5.613,0.1287,28.61,23.0 -0.03354,4.13,34.34,0.1081,0.008064,0.5024,0.598,0.5796,0.03354,4.13,34.34,24.0 -2.111,32.53,3.875,0.8994,0.061,0.5024,0.598,0.5796,2.111,32.53,3.875,25.0 -6.324,70.5,3.08,0.9614,0.08234,0.07465,0.7974,0.388,6.324,70.5,3.08,26.0 -43.22,0.2423,10.61,0.8037,0.9946,0.1226,0.3958,0.5967,43.22,0.2423,10.61,27.0 -14.44,25.72,1.61,0.9614,0.3596,0.496,0.7954,0.4805,14.44,25.72,1.61,28.0 -27.34,66.5,0.5464,0.994,0.2915,0.4797,0.7847,0.4805,27.34,66.5,0.5464,29.0 +like1,like2,like3,par0,par1,par2,par3,par4,simulation1_1,simulation2_1,simulation3_1,chain +69.56,23.84,150.6,0.3828,0.7446,0.6465,0.7314,0.83,69.56,23.84,150.6,0.0 +13.29,6.305,40.66,0.3252,0.678,0.1247,0.603,0.3013,13.29,6.305,40.66,1.0 +79.06,11.414,218.6,0.2927,0.874,0.5547,0.2489,0.955,79.06,11.414,218.6,2.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,3.0 +37.22,42.22,112.25,0.4146,0.4685,0.8457,0.83,0.8105,37.22,42.22,112.25,4.0 +29.0,58.5,183.6,0.3228,0.3313,0.7397,0.0561,0.9717,29.0,58.5,183.6,5.0 +202.2,10.04,50.9,0.8066,0.9526,0.636,0.5635,0.2585,202.2,10.04,50.9,6.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,7.0 +113.0,4.703,59.66,0.6636,0.96,0.2192,0.578,0.448,113.0,4.703,59.66,8.0 +63.0,18.53,94.25,0.4636,0.773,0.5244,0.2795,0.661,63.0,18.53,94.25,9.0 +65.1,99.7,25.27,0.867,0.3953,0.3643,0.8906,0.761,65.1,99.7,25.27,10.0 +19.1,93.5,51.25,0.687,0.1697,0.896,0.9785,0.8555,19.1,93.5,51.25,11.0 +16.92,8.34,149.9,0.1443,0.67,0.1874,0.07916,0.0533,16.92,8.34,149.9,12.0 +164.5,30.58,18.8,0.912,0.8433,0.6235,0.2695,0.5444,164.5,30.58,18.8,13.0 +5.133,1.131,192.0,0.0316,0.8193,0.01531,0.828,0.4487,5.133,1.131,192.0,14.0 +97.56,16.53,134.8,0.4585,0.855,0.638,0.7485,0.4724,97.56,16.53,134.8,15.0 +130.6,5.355,59.75,0.695,0.9604,0.5127,0.932,0.1416,130.6,5.355,59.75,16.0 +69.2,107.1,74.7,0.7026,0.3926,0.767,0.349,0.769,69.2,107.1,74.7,17.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,18.0 +41.56,20.81,14.6,0.8105,0.6665,0.9834,0.4854,0.6143,41.56,20.81,14.6,19.0 +3.453,13.836,158.6,0.0983,0.1997,0.914,0.123,0.2576,3.453,13.836,158.6,20.0 +7.414,31.3,170.5,0.185,0.1915,0.858,0.8955,0.9395,7.414,31.3,170.5,21.0 +78.7,68.5,21.34,0.873,0.5347,0.3467,0.08044,0.08636,78.7,68.5,21.34,22.0 +14.74,15.07,132.6,0.1836,0.4944,0.4202,0.05133,0.7886,14.74,15.07,132.6,23.0 +22.56,34.0,46.62,0.5483,0.399,0.0189,0.9824,0.99,22.56,34.0,46.62,24.0 +50.62,43.2,77.06,0.549,0.5396,0.7603,0.729,0.9062,50.62,43.2,77.06,25.0 +20.38,5.19,145.5,0.1494,0.797,0.838,0.928,0.7925,20.38,5.19,145.5,26.0 +83.0,18.03,103.25,0.4946,0.822,0.9165,0.836,0.933,83.0,18.03,103.25,27.0 +34.5,16.66,97.44,0.3442,0.6743,0.9175,0.31,0.6494,34.5,16.66,97.44,28.0 +27.9,11.59,91.56,0.3013,0.7065,0.1011,0.381,0.0351,27.9,11.59,91.56,29.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,0.0 +3.453,13.836,158.6,0.0983,0.1997,0.914,0.123,0.2576,3.453,13.836,158.6,1.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,2.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,3.0 +5.133,1.131,192.0,0.0316,0.8193,0.01531,0.828,0.4487,5.133,1.131,192.0,4.0 +7.414,31.3,170.5,0.185,0.1915,0.858,0.8955,0.9395,7.414,31.3,170.5,5.0 +13.29,6.305,40.66,0.3252,0.678,0.1247,0.603,0.3013,13.29,6.305,40.66,6.0 +14.74,15.07,132.6,0.1836,0.4944,0.4202,0.05133,0.7886,14.74,15.07,132.6,7.0 +16.92,8.34,149.9,0.1443,0.67,0.1874,0.07916,0.0533,16.92,8.34,149.9,8.0 +19.1,93.5,51.25,0.687,0.1697,0.896,0.9785,0.8555,19.1,93.5,51.25,9.0 +20.38,5.19,145.5,0.1494,0.797,0.838,0.928,0.7925,20.38,5.19,145.5,10.0 +22.56,34.0,46.62,0.5483,0.399,0.0189,0.9824,0.99,22.56,34.0,46.62,11.0 +27.9,11.59,91.56,0.3013,0.7065,0.1011,0.381,0.0351,27.9,11.59,91.56,12.0 +29.0,58.5,183.6,0.3228,0.3313,0.7397,0.0561,0.9717,29.0,58.5,183.6,13.0 +34.5,16.66,97.44,0.3442,0.6743,0.9175,0.31,0.6494,34.5,16.66,97.44,14.0 +37.22,42.22,112.25,0.4146,0.4685,0.8457,0.83,0.8105,37.22,42.22,112.25,15.0 +41.56,20.81,14.6,0.8105,0.6665,0.9834,0.4854,0.6143,41.56,20.81,14.6,16.0 +50.62,43.2,77.06,0.549,0.5396,0.7603,0.729,0.9062,50.62,43.2,77.06,17.0 +63.0,18.53,94.25,0.4636,0.773,0.5244,0.2795,0.661,63.0,18.53,94.25,18.0 +65.1,99.7,25.27,0.867,0.3953,0.3643,0.8906,0.761,65.1,99.7,25.27,19.0 +69.2,107.1,74.7,0.7026,0.3926,0.767,0.349,0.769,69.2,107.1,74.7,20.0 +69.56,23.84,150.6,0.3828,0.7446,0.6465,0.7314,0.83,69.56,23.84,150.6,21.0 +78.7,68.5,21.34,0.873,0.5347,0.3467,0.08044,0.08636,78.7,68.5,21.34,22.0 +79.06,11.414,218.6,0.2927,0.874,0.5547,0.2489,0.955,79.06,11.414,218.6,23.0 +83.0,18.03,103.25,0.4946,0.822,0.9165,0.836,0.933,83.0,18.03,103.25,24.0 +97.56,16.53,134.8,0.4585,0.855,0.638,0.7485,0.4724,97.56,16.53,134.8,25.0 +113.0,4.703,59.66,0.6636,0.96,0.2192,0.578,0.448,113.0,4.703,59.66,26.0 +130.6,5.355,59.75,0.695,0.9604,0.5127,0.932,0.1416,130.6,5.355,59.75,27.0 +164.5,30.58,18.8,0.912,0.8433,0.6235,0.2695,0.5444,164.5,30.58,18.8,28.0 +202.2,10.04,50.9,0.8066,0.9526,0.636,0.5635,0.2585,202.2,10.04,50.9,29.0 +31.94,64.44,202.2,0.3228,0.3313,0.7397,0.0561,0.961,31.94,64.44,202.2,30.0 +15.45,9.984,150.9,0.1443,0.6074,0.9644,0.4272,0.1848,15.45,9.984,150.9,31.0 +4.312,106.8,159.4,0.411,0.03882,0.5376,0.336,0.8574,4.312,106.8,159.4,32.0 +72.06,61.5,109.75,0.549,0.5396,0.7603,0.729,0.2642,72.06,61.5,109.75,33.0 +16.92,8.34,149.9,0.1443,0.67,0.1874,0.07916,0.0533,16.92,8.34,149.9,34.0 +20.38,99.7,43.75,0.733,0.1697,0.896,0.9785,0.8555,20.38,99.7,43.75,35.0 +43.34,65.3,89.5,0.5483,0.399,0.0189,0.07916,0.0533,43.34,65.3,89.5,36.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,37.0 +71.1,1.189,31.77,0.695,0.9834,0.5127,0.932,0.8057,71.1,1.189,31.77,38.0 +23.98,24.53,195.5,0.1989,0.4944,0.6465,0.7314,0.83,23.98,24.53,195.5,39.0 +15.17,7.477,134.4,0.1443,0.67,0.1874,0.07916,0.1626,15.17,7.477,134.4,40.0 +20.55,100.6,55.16,0.687,0.1697,0.896,0.2695,0.5444,20.55,100.6,55.16,41.0 +152.0,19.11,16.48,0.912,0.888,0.62,0.33,0.1343,152.0,19.11,16.48,42.0 +4.76,87.25,102.8,0.4722,0.0518,0.9644,0.379,0.228,4.76,87.25,102.8,43.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,44.0 +4.13,17.95,151.8,0.1271,0.1869,0.62,0.2788,0.5444,4.13,17.95,151.8,45.0 +52.53,7.582,145.2,0.2927,0.874,0.559,0.2915,0.8555,52.53,7.582,145.2,46.0 +24.94,122.06,66.94,0.687,0.1697,0.6235,0.2695,0.5444,24.94,122.06,66.94,47.0 +3.148,78.0,130.9,0.3828,0.03882,0.5376,0.4504,0.7847,3.148,78.0,130.9,48.0 +39.4,18.7,120.5,0.3252,0.678,0.1247,0.3428,0.7847,39.4,18.7,120.5,49.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,50.0 +153.4,6.387,74.25,0.6826,0.96,0.2334,0.07916,0.0533,153.4,6.387,74.25,51.0 +65.56,6.04,173.0,0.2927,0.9155,0.5547,0.981,0.8555,65.56,6.04,173.0,52.0 +1.375,0.3027,307.5,0.00543,0.8193,0.5547,0.2489,0.955,1.375,0.3027,307.5,53.0 +27.16,54.78,171.9,0.3228,0.3313,0.772,0.06445,0.4487,27.16,54.78,171.9,54.0 +17.69,8.72,129.1,0.1698,0.67,0.9644,0.4207,0.1848,17.69,8.72,129.1,55.0 +50.4,22.19,150.6,0.3252,0.6943,0.1247,0.2695,0.5444,50.4,22.19,150.6,56.0 +201.2,29.05,78.7,0.745,0.874,0.5547,0.2489,0.955,201.2,29.05,78.7,57.0 +40.5,17.17,119.7,0.3252,0.702,0.2192,0.578,0.448,40.5,17.17,119.7,58.0 +26.36,12.51,80.6,0.3252,0.678,0.1247,0.4207,0.1848,26.36,12.51,80.6,59.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,0.0 +1.375,0.3027,307.5,0.00543,0.8193,0.5547,0.2489,0.955,1.375,0.3027,307.5,1.0 +3.148,78.0,130.9,0.3828,0.03882,0.5376,0.4504,0.7847,3.148,78.0,130.9,2.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,3.0 +3.453,13.836,158.6,0.0983,0.1997,0.914,0.123,0.2576,3.453,13.836,158.6,4.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,5.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,6.0 +4.13,17.95,151.8,0.1271,0.1869,0.62,0.2788,0.5444,4.13,17.95,151.8,7.0 +4.312,106.8,159.4,0.411,0.03882,0.5376,0.336,0.8574,4.312,106.8,159.4,8.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,9.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,10.0 +4.76,87.25,102.8,0.4722,0.0518,0.9644,0.379,0.228,4.76,87.25,102.8,11.0 +5.133,1.131,192.0,0.0316,0.8193,0.01531,0.828,0.4487,5.133,1.131,192.0,12.0 +7.414,31.3,170.5,0.185,0.1915,0.858,0.8955,0.9395,7.414,31.3,170.5,13.0 +13.29,6.305,40.66,0.3252,0.678,0.1247,0.603,0.3013,13.29,6.305,40.66,14.0 +14.74,15.07,132.6,0.1836,0.4944,0.4202,0.05133,0.7886,14.74,15.07,132.6,15.0 +15.17,7.477,134.4,0.1443,0.67,0.1874,0.07916,0.1626,15.17,7.477,134.4,16.0 +15.45,9.984,150.9,0.1443,0.6074,0.9644,0.4272,0.1848,15.45,9.984,150.9,17.0 +16.92,8.34,149.9,0.1443,0.67,0.1874,0.07916,0.0533,16.92,8.34,149.9,18.0 +16.92,8.34,149.9,0.1443,0.67,0.1874,0.07916,0.0533,16.92,8.34,149.9,19.0 +17.69,8.72,129.1,0.1698,0.67,0.9644,0.4207,0.1848,17.69,8.72,129.1,20.0 +19.1,93.5,51.25,0.687,0.1697,0.896,0.9785,0.8555,19.1,93.5,51.25,21.0 +20.38,5.19,145.5,0.1494,0.797,0.838,0.928,0.7925,20.38,5.19,145.5,22.0 +20.38,99.7,43.75,0.733,0.1697,0.896,0.9785,0.8555,20.38,99.7,43.75,23.0 +20.55,100.6,55.16,0.687,0.1697,0.896,0.2695,0.5444,20.55,100.6,55.16,24.0 +22.56,34.0,46.62,0.5483,0.399,0.0189,0.9824,0.99,22.56,34.0,46.62,25.0 +23.98,24.53,195.5,0.1989,0.4944,0.6465,0.7314,0.83,23.98,24.53,195.5,26.0 +24.94,122.06,66.94,0.687,0.1697,0.6235,0.2695,0.5444,24.94,122.06,66.94,27.0 +26.36,12.51,80.6,0.3252,0.678,0.1247,0.4207,0.1848,26.36,12.51,80.6,28.0 +27.16,54.78,171.9,0.3228,0.3313,0.772,0.06445,0.4487,27.16,54.78,171.9,29.0 +2.73,50.0,67.2,0.4397,0.0518,0.9644,0.4966,0.1848,2.73,50.0,67.2,30.0 +4.83,20.38,111.0,0.185,0.1915,0.858,0.8955,0.7847,4.83,20.38,111.0,31.0 +4.46,18.08,154.9,0.1271,0.1979,0.9775,0.4207,0.1353,4.46,18.08,154.9,32.0 +21.56,5.5,154.1,0.1494,0.797,0.838,0.928,0.2864,21.56,5.5,154.1,33.0 +11.42,5.055,34.2,0.3252,0.6934,0.0844,0.603,0.91,11.42,5.055,34.2,34.0 +5.992,122.4,58.47,0.687,0.0467,0.5376,0.3428,0.7993,5.992,122.4,58.47,35.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,36.0 +8.945,97.3,57.6,0.6484,0.08417,0.896,0.9785,0.8555,8.945,97.3,57.6,37.0 +7.81,32.97,179.5,0.185,0.1915,0.858,0.4417,0.1848,7.81,32.97,179.5,38.0 +22.34,5.7,159.8,0.1494,0.797,0.838,0.928,0.1848,22.34,5.7,159.8,39.0 +3.48,3.559,31.31,0.1836,0.4944,0.3894,0.1045,0.7886,3.48,3.559,31.31,40.0 +25.52,124.9,68.44,0.687,0.1697,0.6235,0.973,0.8457,25.52,124.9,68.44,41.0 +8.61,7.133,144.4,0.0983,0.547,0.4202,0.0549,0.7886,8.61,7.133,144.4,42.0 +2.768,68.56,119.5,0.3738,0.03882,0.53,0.4504,0.7847,2.768,68.56,119.5,43.0 +2.508,10.586,57.66,0.185,0.1915,0.898,0.8955,0.923,2.508,10.586,57.66,44.0 +12.19,51.44,241.8,0.2084,0.1915,0.858,0.8496,0.9395,12.19,51.44,241.8,45.0 +18.28,18.7,132.6,0.2181,0.4944,0.64,0.7314,0.8027,18.28,18.7,132.6,46.0 +16.97,17.36,152.8,0.1836,0.4944,0.4202,0.33,0.1343,16.97,17.36,152.8,47.0 +28.12,114.6,52.03,0.733,0.1969,0.9644,0.379,0.228,28.12,114.6,52.03,48.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,49.0 +20.16,7.613,143.4,0.1624,0.7256,0.838,0.928,0.7925,20.16,7.613,143.4,50.0 +1.725,55.34,92.06,0.3828,0.03021,0.5156,0.4504,0.7847,1.725,55.34,92.06,51.0 +5.285,1.164,197.8,0.0316,0.8193,0.5376,0.441,0.7847,5.285,1.164,197.8,52.0 +6.12,79.5,122.75,0.411,0.0715,0.5376,0.3428,0.1848,6.12,79.5,122.75,53.0 +4.043,100.1,149.4,0.411,0.03882,0.5376,0.05133,0.774,4.043,100.1,149.4,54.0 +6.83,66.4,93.25,0.4397,0.0933,0.896,0.9785,0.848,6.83,66.4,93.25,55.0 +2.229,0.4907,83.4,0.0316,0.8193,0.01473,0.4207,0.11,2.229,0.4907,83.4,56.0 +22.06,5.62,157.6,0.1494,0.797,0.837,0.928,0.7847,22.06,5.62,157.6,57.0 +27.98,108.25,62.03,0.687,0.2053,0.01531,0.828,0.4487,27.98,108.25,62.03,58.0 +3.309,60.6,91.6,0.411,0.0518,0.9644,0.4207,0.1848,3.309,60.6,91.6,59.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,0.0 +1.375,0.3027,307.5,0.00543,0.8193,0.5547,0.2489,0.955,1.375,0.3027,307.5,1.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,2.0 +1.725,55.34,92.06,0.3828,0.03021,0.5156,0.4504,0.7847,1.725,55.34,92.06,3.0 +2.229,0.4907,83.4,0.0316,0.8193,0.01473,0.4207,0.11,2.229,0.4907,83.4,4.0 +2.508,10.586,57.66,0.185,0.1915,0.898,0.8955,0.923,2.508,10.586,57.66,5.0 +2.73,50.0,67.2,0.4397,0.0518,0.9644,0.4966,0.1848,2.73,50.0,67.2,6.0 +2.768,68.56,119.5,0.3738,0.03882,0.53,0.4504,0.7847,2.768,68.56,119.5,7.0 +3.148,78.0,130.9,0.3828,0.03882,0.5376,0.4504,0.7847,3.148,78.0,130.9,8.0 +3.309,60.6,91.6,0.411,0.0518,0.9644,0.4207,0.1848,3.309,60.6,91.6,9.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,10.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,11.0 +3.453,13.836,158.6,0.0983,0.1997,0.914,0.123,0.2576,3.453,13.836,158.6,12.0 +3.48,3.559,31.31,0.1836,0.4944,0.3894,0.1045,0.7886,3.48,3.559,31.31,13.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,14.0 +3.541,64.8,87.1,0.4397,0.0518,0.9644,0.4207,0.1848,3.541,64.8,87.1,15.0 +4.043,100.1,149.4,0.411,0.03882,0.5376,0.05133,0.774,4.043,100.1,149.4,16.0 +4.13,17.95,151.8,0.1271,0.1869,0.62,0.2788,0.5444,4.13,17.95,151.8,17.0 +4.312,106.8,159.4,0.411,0.03882,0.5376,0.336,0.8574,4.312,106.8,159.4,18.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,19.0 +4.457,19.38,163.8,0.1271,0.1869,0.62,0.33,0.1343,4.457,19.38,163.8,20.0 +4.46,18.08,154.9,0.1271,0.1979,0.9775,0.4207,0.1353,4.46,18.08,154.9,21.0 +4.76,87.25,102.8,0.4722,0.0518,0.9644,0.379,0.228,4.76,87.25,102.8,22.0 +4.83,20.38,111.0,0.185,0.1915,0.858,0.8955,0.7847,4.83,20.38,111.0,23.0 +5.133,1.131,192.0,0.0316,0.8193,0.01531,0.828,0.4487,5.133,1.131,192.0,24.0 +5.285,1.164,197.8,0.0316,0.8193,0.5376,0.441,0.7847,5.285,1.164,197.8,25.0 +5.992,122.4,58.47,0.687,0.0467,0.5376,0.3428,0.7993,5.992,122.4,58.47,26.0 +6.12,79.5,122.75,0.411,0.0715,0.5376,0.3428,0.1848,6.12,79.5,122.75,27.0 +6.83,66.4,93.25,0.4397,0.0933,0.896,0.9785,0.848,6.83,66.4,93.25,28.0 +7.414,31.3,170.5,0.185,0.1915,0.858,0.8955,0.9395,7.414,31.3,170.5,29.0 +4.25,77.8,91.75,0.4722,0.0518,0.62,0.2788,0.5444,4.25,77.8,91.75,30.0 +1.023,18.73,135.8,0.1271,0.0518,0.9644,0.4207,0.1848,1.023,18.73,135.8,31.0 +3.38,83.75,124.9,0.411,0.03882,0.5376,0.4504,0.7847,3.38,83.75,124.9,32.0 +1.903,8.03,43.75,0.185,0.1915,0.989,0.4946,0.1848,1.903,8.03,43.75,33.0 +2.002,79.06,103.3,0.4397,0.02469,0.62,0.2715,0.1343,2.002,79.06,103.3,34.0 +1.894,8.234,69.6,0.1271,0.1869,0.7754,0.1045,0.7886,1.894,8.234,69.6,35.0 +1.712,9.29,100.94,0.0983,0.1555,0.8833,0.3716,0.11,1.712,9.29,100.94,36.0 +32.2,6.36,62.2,0.3828,0.835,0.01147,0.3274,0.11,32.2,6.36,62.2,37.0 +1.049,67.4,98.1,0.411,0.01532,0.671,0.4207,0.1718,1.049,67.4,98.1,38.0 +4.566,83.6,112.4,0.4397,0.0518,0.5376,0.4504,0.81,4.566,83.6,112.4,39.0 +2.238,8.12,71.1,0.1271,0.2161,0.62,0.2788,0.7993,2.238,8.12,71.1,40.0 +0.1384,4.44,140.5,0.0316,0.03021,0.5156,0.4504,0.786,0.1384,4.44,140.5,41.0 +1.894,34.7,46.62,0.4397,0.0518,0.9907,0.4207,0.7847,1.894,34.7,46.62,42.0 +1.881,68.0,89.06,0.4397,0.02692,0.0573,0.4207,0.11,1.881,68.0,89.06,43.0 +3.27,80.94,135.9,0.3828,0.03882,0.5376,0.379,0.259,3.27,80.94,135.9,44.0 +1.449,46.53,77.4,0.3828,0.03021,0.5156,0.379,0.228,1.449,46.53,77.4,45.0 +3.3,23.77,119.25,0.185,0.12195,0.898,0.2788,0.5444,3.3,23.77,119.25,46.0 +11.97,44.0,80.25,0.411,0.2137,0.858,0.8955,0.7847,11.97,44.0,80.25,47.0 +4.625,114.5,151.9,0.4397,0.03882,0.5376,0.336,0.8433,4.625,114.5,151.9,48.0 +3.457,85.6,143.6,0.3828,0.03882,0.5376,0.4504,0.8223,3.457,85.6,143.6,49.0 +2.902,71.9,107.2,0.411,0.03882,0.5376,0.336,0.7905,2.902,71.9,107.2,50.0 +4.31,106.75,182.9,0.378,0.03882,0.5376,0.4504,0.955,4.31,106.75,182.9,51.0 +5.066,92.75,114.3,0.4612,0.0518,0.5547,0.2489,0.8945,5.066,92.75,114.3,52.0 +2.465,45.16,60.7,0.4397,0.0518,0.9644,0.4966,0.9077,2.465,45.16,60.7,53.0 +12.08,12.35,108.7,0.1836,0.4944,0.4197,0.1045,0.837,12.08,12.35,108.7,54.0 +4.176,16.61,190.6,0.0983,0.2009,0.914,0.3584,0.864,4.176,16.61,190.6,55.0 +4.2,18.27,154.4,0.1271,0.1869,0.719,0.3728,0.1343,4.2,18.27,154.4,56.0 +14.12,14.43,127.0,0.1836,0.4944,0.9644,0.4207,0.1848,14.12,14.43,127.0,57.0 +5.035,47.9,72.56,0.4219,0.09515,0.5376,0.8955,0.8164,5.035,47.9,72.56,58.0 +2.854,12.414,104.9,0.1271,0.1869,0.62,0.33,0.7886,2.854,12.414,104.9,59.0 +0.1384,4.44,140.5,0.0316,0.03021,0.5156,0.4504,0.786,0.1384,4.44,140.5,0.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,1.0 +1.023,18.73,135.8,0.1271,0.0518,0.9644,0.4207,0.1848,1.023,18.73,135.8,2.0 +1.049,67.4,98.1,0.411,0.01532,0.671,0.4207,0.1718,1.049,67.4,98.1,3.0 +1.375,0.3027,307.5,0.00543,0.8193,0.5547,0.2489,0.955,1.375,0.3027,307.5,4.0 +1.449,46.53,77.4,0.3828,0.03021,0.5156,0.379,0.228,1.449,46.53,77.4,5.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,6.0 +1.712,9.29,100.94,0.0983,0.1555,0.8833,0.3716,0.11,1.712,9.29,100.94,7.0 +1.725,55.34,92.06,0.3828,0.03021,0.5156,0.4504,0.7847,1.725,55.34,92.06,8.0 +1.881,68.0,89.06,0.4397,0.02692,0.0573,0.4207,0.11,1.881,68.0,89.06,9.0 +1.894,34.7,46.62,0.4397,0.0518,0.9907,0.4207,0.7847,1.894,34.7,46.62,10.0 +1.894,8.234,69.6,0.1271,0.1869,0.7754,0.1045,0.7886,1.894,8.234,69.6,11.0 +1.903,8.03,43.75,0.185,0.1915,0.989,0.4946,0.1848,1.903,8.03,43.75,12.0 +2.002,79.06,103.3,0.4397,0.02469,0.62,0.2715,0.1343,2.002,79.06,103.3,13.0 +2.229,0.4907,83.4,0.0316,0.8193,0.01473,0.4207,0.11,2.229,0.4907,83.4,14.0 +2.238,8.12,71.1,0.1271,0.2161,0.62,0.2788,0.7993,2.238,8.12,71.1,15.0 +2.465,45.16,60.7,0.4397,0.0518,0.9644,0.4966,0.9077,2.465,45.16,60.7,16.0 +2.508,10.586,57.66,0.185,0.1915,0.898,0.8955,0.923,2.508,10.586,57.66,17.0 +2.73,50.0,67.2,0.4397,0.0518,0.9644,0.4966,0.1848,2.73,50.0,67.2,18.0 +2.768,68.56,119.5,0.3738,0.03882,0.53,0.4504,0.7847,2.768,68.56,119.5,19.0 +2.854,12.414,104.9,0.1271,0.1869,0.62,0.33,0.7886,2.854,12.414,104.9,20.0 +2.902,71.9,107.2,0.411,0.03882,0.5376,0.336,0.7905,2.902,71.9,107.2,21.0 +3.148,78.0,130.9,0.3828,0.03882,0.5376,0.4504,0.7847,3.148,78.0,130.9,22.0 +3.27,80.94,135.9,0.3828,0.03882,0.5376,0.379,0.259,3.27,80.94,135.9,23.0 +3.3,23.77,119.25,0.185,0.12195,0.898,0.2788,0.5444,3.3,23.77,119.25,24.0 +3.309,60.6,91.6,0.411,0.0518,0.9644,0.4207,0.1848,3.309,60.6,91.6,25.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,26.0 +3.318,82.2,122.56,0.411,0.03882,0.5376,0.3428,0.7847,3.318,82.2,122.56,27.0 +3.38,83.75,124.9,0.411,0.03882,0.5376,0.4504,0.7847,3.38,83.75,124.9,28.0 +3.453,13.836,158.6,0.0983,0.1997,0.914,0.123,0.2576,3.453,13.836,158.6,29.0 +1.012,0.2228,226.2,0.00543,0.8193,0.5547,0.2489,0.1848,1.012,0.2228,226.2,30.0 +2.229,0.4907,83.4,0.0316,0.8193,0.01473,0.4207,0.11,2.229,0.4907,83.4,31.0 +1.8545,45.94,68.5,0.411,0.03882,0.5376,0.3042,0.517,1.8545,45.94,68.5,32.0 +0.4429,17.5,22.88,0.4397,0.02469,0.7197,0.603,0.3013,0.4429,17.5,22.88,33.0 +2.373,11.55,61.3,0.185,0.1704,0.898,0.2788,0.7847,2.373,11.55,61.3,34.0 +5.54,20.22,177.0,0.1271,0.2151,0.5903,0.2489,0.9355,5.54,20.22,177.0,35.0 +1.973,8.58,85.94,0.1093,0.1869,0.719,0.8955,0.923,1.973,8.58,85.94,36.0 +1.425,25.5,43.44,0.3828,0.05292,0.5156,0.4216,0.7075,1.425,25.5,43.44,37.0 +7.33,52.78,86.2,0.411,0.12195,0.898,0.2788,0.5444,7.33,52.78,86.2,38.0 +1.242,79.8,92.56,0.4668,0.01532,0.697,0.3428,0.7686,1.242,79.8,92.56,39.0 +0.835,59.56,97.44,0.3828,0.013824,0.9546,0.4207,0.1912,0.835,59.56,97.44,40.0 +1.406,25.75,186.5,0.1271,0.0518,0.9644,0.4207,0.1343,1.406,25.75,186.5,41.0 +3.002,74.3,124.7,0.3828,0.03882,0.5464,0.434,0.7847,3.002,74.3,124.7,42.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,43.0 +0.942,0.2085,210.9,0.00543,0.819,0.5376,0.4504,0.7847,0.942,0.2085,210.9,44.0 +2.56,18.44,93.94,0.1826,0.12195,0.898,0.2788,0.1718,2.56,18.44,93.94,45.0 +3.133,13.625,21.36,0.4397,0.1869,0.719,0.603,0.3013,3.133,13.625,21.36,46.0 +4.734,117.25,174.9,0.411,0.03882,0.5376,0.2489,0.955,4.734,117.25,174.9,47.0 +2.3,90.94,118.8,0.4397,0.02469,0.5376,0.4504,0.7847,2.3,90.94,118.8,48.0 +3.936,16.61,90.5,0.185,0.1915,0.898,0.4207,0.1718,3.936,16.61,90.5,49.0 +0.06586,0.2866,65.94,0.005318,0.1869,0.719,0.603,0.3179,0.06586,0.2866,65.94,50.0 +0.742,47.72,97.8,0.3313,0.01532,0.898,0.2788,0.5444,0.742,47.72,97.8,51.0 +1.372,5.97,56.75,0.1145,0.1869,0.7197,0.4966,0.1848,1.372,5.97,56.75,52.0 +0.9854,31.62,52.6,0.3828,0.03021,0.5156,0.8955,0.923,0.9854,31.62,52.6,53.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,54.0 +0.5557,0.12244,124.3,0.00543,0.8193,0.5547,0.1045,0.7886,0.5557,0.12244,124.3,55.0 +2.531,0.5576,94.7,0.0316,0.8193,0.01473,0.4216,0.1848,2.531,0.5576,94.7,56.0 +3.014,13.11,110.75,0.1271,0.1869,0.9214,0.914,0.923,3.014,13.11,110.75,57.0 +0.3062,0.08746,152.9,0.00257,0.778,0.01473,0.4207,0.1343,0.3062,0.08746,152.9,58.0 +1.832,58.8,97.8,0.3828,0.03021,0.5156,0.3682,0.228,1.832,58.8,97.8,59.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,0.0 +0.06586,0.2866,65.94,0.005318,0.1869,0.719,0.603,0.3179,0.06586,0.2866,65.94,1.0 +0.1384,4.44,140.5,0.0316,0.03021,0.5156,0.4504,0.786,0.1384,4.44,140.5,2.0 +0.3062,0.08746,152.9,0.00257,0.778,0.01473,0.4207,0.1343,0.3062,0.08746,152.9,3.0 +0.4429,17.5,22.88,0.4397,0.02469,0.7197,0.603,0.3013,0.4429,17.5,22.88,4.0 +0.5557,0.12244,124.3,0.00543,0.8193,0.5547,0.1045,0.7886,0.5557,0.12244,124.3,5.0 +0.742,47.72,97.8,0.3313,0.01532,0.898,0.2788,0.5444,0.742,47.72,97.8,6.0 +0.835,59.56,97.44,0.3828,0.013824,0.9546,0.4207,0.1912,0.835,59.56,97.44,7.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,8.0 +0.942,0.2085,210.9,0.00543,0.819,0.5376,0.4504,0.7847,0.942,0.2085,210.9,9.0 +0.9854,31.62,52.6,0.3828,0.03021,0.5156,0.8955,0.923,0.9854,31.62,52.6,10.0 +1.012,0.2228,226.2,0.00543,0.8193,0.5547,0.2489,0.1848,1.012,0.2228,226.2,11.0 +1.023,18.73,135.8,0.1271,0.0518,0.9644,0.4207,0.1848,1.023,18.73,135.8,12.0 +1.049,67.4,98.1,0.411,0.01532,0.671,0.4207,0.1718,1.049,67.4,98.1,13.0 +1.242,79.8,92.56,0.4668,0.01532,0.697,0.3428,0.7686,1.242,79.8,92.56,14.0 +1.372,5.97,56.75,0.1145,0.1869,0.7197,0.4966,0.1848,1.372,5.97,56.75,15.0 +1.375,0.3027,307.5,0.00543,0.8193,0.5547,0.2489,0.955,1.375,0.3027,307.5,16.0 +1.406,25.75,186.5,0.1271,0.0518,0.9644,0.4207,0.1343,1.406,25.75,186.5,17.0 +1.425,25.5,43.44,0.3828,0.05292,0.5156,0.4216,0.7075,1.425,25.5,43.44,18.0 +1.449,46.53,77.4,0.3828,0.03021,0.5156,0.379,0.228,1.449,46.53,77.4,19.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,20.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,21.0 +1.712,9.29,100.94,0.0983,0.1555,0.8833,0.3716,0.11,1.712,9.29,100.94,22.0 +1.725,55.34,92.06,0.3828,0.03021,0.5156,0.4504,0.7847,1.725,55.34,92.06,23.0 +1.832,58.8,97.8,0.3828,0.03021,0.5156,0.3682,0.228,1.832,58.8,97.8,24.0 +1.8545,45.94,68.5,0.411,0.03882,0.5376,0.3042,0.517,1.8545,45.94,68.5,25.0 +1.881,68.0,89.06,0.4397,0.02692,0.0573,0.4207,0.11,1.881,68.0,89.06,26.0 +1.894,34.7,46.62,0.4397,0.0518,0.9907,0.4207,0.7847,1.894,34.7,46.62,27.0 +1.894,8.234,69.6,0.1271,0.1869,0.7754,0.1045,0.7886,1.894,8.234,69.6,28.0 +1.903,8.03,43.75,0.185,0.1915,0.989,0.4946,0.1848,1.903,8.03,43.75,29.0 +3.336,107.1,178.1,0.3828,0.03021,0.5625,0.4504,0.856,3.336,107.1,178.1,30.0 +1.258,40.38,67.1,0.3828,0.03021,0.5156,0.379,0.3235,1.258,40.38,67.1,31.0 +3.104,16.84,183.0,0.0983,0.1555,0.8833,0.3657,0.7617,3.104,16.84,183.0,32.0 +0.648,0.1427,144.9,0.00543,0.8193,0.62,0.33,0.1791,0.648,0.1427,144.9,33.0 +10.484,58.66,79.6,0.4648,0.1516,0.9644,0.4207,0.1876,10.484,58.66,79.6,34.0 +1.685,7.33,178.6,0.04803,0.1869,0.62,0.33,0.1343,1.685,7.33,178.6,35.0 +2.438,13.234,143.8,0.0983,0.1555,0.5234,0.4504,0.907,2.438,13.234,143.8,36.0 +0.9517,61.16,66.44,0.4832,0.01532,0.5156,0.4348,0.2156,0.9517,61.16,66.44,37.0 +0.01674,4.023,121.3,0.03226,0.004143,0.5156,0.379,0.228,0.01674,4.023,121.3,38.0 +0.1788,5.008,35.62,0.1271,0.0345,0.7197,0.603,0.3013,0.1788,5.008,35.62,39.0 +0.007133,0.2128,78.4,0.002796,0.03244,0.9824,0.4207,0.3013,0.007133,0.2128,78.4,40.0 +1.685,9.14,160.1,0.06335,0.1555,0.671,0.452,0.1952,1.685,9.14,160.1,41.0 +1.817,8.12,43.75,0.185,0.183,0.989,0.4946,0.1848,1.817,8.12,43.75,42.0 +1.513,59.75,78.06,0.4397,0.02469,0.7197,0.379,0.228,1.513,59.75,78.06,43.0 +23.14,5.094,222.5,0.1126,0.8193,0.5547,0.2489,0.1769,23.14,5.094,222.5,44.0 +1.919,97.75,127.06,0.4397,0.01926,0.5537,0.4216,0.7373,1.919,97.75,127.06,45.0 +12.17,2.68,294.2,0.04803,0.8193,0.5547,0.2489,0.955,12.17,2.68,294.2,46.0 +1.005,4.37,106.56,0.04803,0.1869,0.8833,0.3716,0.11,1.005,4.37,106.56,47.0 +0.9473,4.12,100.4,0.04803,0.1869,0.62,0.33,0.3013,0.9473,4.12,100.4,48.0 +4.77,20.75,148.1,0.147,0.1869,0.697,0.3428,0.7686,4.77,20.75,148.1,49.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,50.0 +1.718,62.1,81.3,0.4397,0.02692,0.0573,0.414,0.786,1.718,62.1,81.3,51.0 +1.369,5.953,50.3,0.1271,0.1869,0.719,0.603,0.786,1.369,5.953,50.3,52.0 +1.029,0.2367,232.0,0.00543,0.813,0.5156,0.2489,0.955,1.029,0.2367,232.0,53.0 +2.318,12.586,82.06,0.1537,0.1555,0.8833,0.3716,0.3013,2.318,12.586,82.06,54.0 +0.1299,4.17,85.2,0.04803,0.03021,0.5156,0.395,0.228,0.1299,4.17,85.2,55.0 +0.557,0.12274,124.6,0.00543,0.8193,0.5547,0.1045,0.11,0.557,0.12274,124.6,56.0 +2.377,76.3,126.94,0.3828,0.03021,0.5117,0.3428,0.7417,2.377,76.3,126.94,57.0 +0.583,23.05,30.11,0.4397,0.02469,0.7197,0.6123,0.3013,0.583,23.05,30.11,58.0 +0.58,0.1499,133.8,0.00543,0.795,0.5576,0.2893,0.1848,0.58,0.1499,133.8,59.0 +0.007133,0.2128,78.4,0.002796,0.03244,0.9824,0.4207,0.3013,0.007133,0.2128,78.4,0.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,1.0 +0.01674,4.023,121.3,0.03226,0.004143,0.5156,0.379,0.228,0.01674,4.023,121.3,2.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,3.0 +0.06586,0.2866,65.94,0.005318,0.1869,0.719,0.603,0.3179,0.06586,0.2866,65.94,4.0 +0.1299,4.17,85.2,0.04803,0.03021,0.5156,0.395,0.228,0.1299,4.17,85.2,5.0 +0.1384,4.44,140.5,0.0316,0.03021,0.5156,0.4504,0.786,0.1384,4.44,140.5,6.0 +0.1788,5.008,35.62,0.1271,0.0345,0.7197,0.603,0.3013,0.1788,5.008,35.62,7.0 +0.3062,0.08746,152.9,0.00257,0.778,0.01473,0.4207,0.1343,0.3062,0.08746,152.9,8.0 +0.4429,17.5,22.88,0.4397,0.02469,0.7197,0.603,0.3013,0.4429,17.5,22.88,9.0 +0.5557,0.12244,124.3,0.00543,0.8193,0.5547,0.1045,0.7886,0.5557,0.12244,124.3,10.0 +0.557,0.12274,124.6,0.00543,0.8193,0.5547,0.1045,0.11,0.557,0.12274,124.6,11.0 +0.58,0.1499,133.8,0.00543,0.795,0.5576,0.2893,0.1848,0.58,0.1499,133.8,12.0 +0.583,23.05,30.11,0.4397,0.02469,0.7197,0.6123,0.3013,0.583,23.05,30.11,13.0 +0.648,0.1427,144.9,0.00543,0.8193,0.62,0.33,0.1791,0.648,0.1427,144.9,14.0 +0.742,47.72,97.8,0.3313,0.01532,0.898,0.2788,0.5444,0.742,47.72,97.8,15.0 +0.835,59.56,97.44,0.3828,0.013824,0.9546,0.4207,0.1912,0.835,59.56,97.44,16.0 +0.9053,3.938,33.28,0.1271,0.1869,0.719,0.603,0.3013,0.9053,3.938,33.28,17.0 +0.942,0.2085,210.9,0.00543,0.819,0.5376,0.4504,0.7847,0.942,0.2085,210.9,18.0 +0.9473,4.12,100.4,0.04803,0.1869,0.62,0.33,0.3013,0.9473,4.12,100.4,19.0 +0.9517,61.16,66.44,0.4832,0.01532,0.5156,0.4348,0.2156,0.9517,61.16,66.44,20.0 +0.9854,31.62,52.6,0.3828,0.03021,0.5156,0.8955,0.923,0.9854,31.62,52.6,21.0 +1.005,4.37,106.56,0.04803,0.1869,0.8833,0.3716,0.11,1.005,4.37,106.56,22.0 +1.012,0.2228,226.2,0.00543,0.8193,0.5547,0.2489,0.1848,1.012,0.2228,226.2,23.0 +1.023,18.73,135.8,0.1271,0.0518,0.9644,0.4207,0.1848,1.023,18.73,135.8,24.0 +1.029,0.2367,232.0,0.00543,0.813,0.5156,0.2489,0.955,1.029,0.2367,232.0,25.0 +1.049,67.4,98.1,0.411,0.01532,0.671,0.4207,0.1718,1.049,67.4,98.1,26.0 +1.242,79.8,92.56,0.4668,0.01532,0.697,0.3428,0.7686,1.242,79.8,92.56,27.0 +1.258,40.38,67.1,0.3828,0.03021,0.5156,0.379,0.3235,1.258,40.38,67.1,28.0 +1.369,5.953,50.3,0.1271,0.1869,0.719,0.603,0.786,1.369,5.953,50.3,29.0 +0.1581,0.03482,35.34,0.00543,0.8193,0.5156,0.4004,0.3103,0.1581,0.03482,35.34,30.0 +0.9624,17.62,127.7,0.1271,0.0518,0.898,0.2788,0.5444,0.9624,17.62,127.7,31.0 +1.688,7.344,179.0,0.04803,0.1869,0.8833,0.3716,0.1381,1.688,7.344,179.0,32.0 +1.692,108.8,97.6,0.531,0.01532,0.5474,0.412,0.3584,1.692,108.8,97.6,33.0 +0.8477,54.47,59.16,0.4832,0.01532,0.5156,0.4348,0.3103,0.8477,54.47,59.16,34.0 +0.8,51.4,105.44,0.3313,0.01532,0.898,0.2593,0.5264,0.8,51.4,105.44,35.0 +0.08136,2.611,82.5,0.0316,0.03021,0.5156,0.8955,0.923,0.08136,2.611,82.5,36.0 +0.00858,0.2129,40.6,0.00543,0.03876,0.7197,0.603,0.3013,0.00858,0.2129,40.6,37.0 +0.8374,53.8,47.16,0.5366,0.01532,0.697,0.3428,0.3013,0.8374,53.8,47.16,38.0 +0.833,53.53,62.1,0.4668,0.01532,0.697,0.3428,0.7886,0.833,53.53,62.1,39.0 +0.12396,0.539,124.06,0.005318,0.1869,0.65,0.603,0.786,0.12396,0.539,124.06,40.0 +1.12,0.2467,250.5,0.00543,0.8193,0.5547,0.2488,0.776,1.12,0.2467,250.5,41.0 +1.14,73.25,70.6,0.513,0.01532,0.5156,0.4504,0.786,1.14,73.25,70.6,42.0 +0.03796,1.537,48.28,0.0316,0.02412,0.5156,0.1045,0.7886,0.03796,1.537,48.28,43.0 +0.05725,3.68,115.94,0.03122,0.01532,0.898,0.3115,0.5444,0.05725,3.68,115.94,44.0 +0.4924,0.1084,110.1,0.00543,0.8193,0.5547,0.2078,0.3013,0.4924,0.1084,110.1,45.0 +0.04007,1.194,147.5,0.0083,0.03244,0.5156,0.447,0.2156,0.04007,1.194,147.5,46.0 +1.332,52.62,68.75,0.4397,0.02469,0.7197,0.379,0.3235,1.332,52.62,68.75,47.0 +0.9785,62.88,96.2,0.399,0.01532,0.9644,0.4778,0.1848,0.9785,62.88,96.2,48.0 +1.376,44.16,57.38,0.4426,0.03021,0.8833,0.3716,0.10126,1.376,44.16,57.38,49.0 +1.675,53.78,89.44,0.3828,0.03021,0.5156,0.4207,0.1345,1.675,53.78,89.44,50.0 +1.902,23.34,173.5,0.1271,0.0753,0.9644,0.5664,0.3179,1.902,23.34,173.5,51.0 +1.211,5.496,46.06,0.1271,0.1805,0.719,0.603,0.7886,1.211,5.496,46.06,52.0 +0.8936,18.19,30.77,0.3828,0.04684,0.5156,0.1045,0.7886,0.8936,18.19,30.77,53.0 +0.0761,2.443,77.25,0.0316,0.03021,0.5156,0.41,0.3235,0.0761,2.443,77.25,54.0 +0.01772,0.5283,194.6,0.002796,0.03244,0.9375,0.4207,0.228,0.01772,0.5283,194.6,55.0 +0.5938,23.45,31.42,0.4336,0.02469,0.7197,0.603,0.7886,0.5938,23.45,31.42,56.0 +0.9688,4.21,158.9,0.0316,0.1869,0.8833,0.3716,0.1289,0.9688,4.21,158.9,57.0 +0.9854,31.62,52.6,0.3828,0.03021,0.5156,0.8955,0.923,0.9854,31.62,52.6,58.0 +1.0,32.1,53.4,0.3828,0.03021,0.5156,0.8955,0.9233,1.0,32.1,53.4,59.0 +0.007133,0.2128,78.4,0.002796,0.03244,0.9824,0.4207,0.3013,0.007133,0.2128,78.4,0.0 +0.00858,0.2129,40.6,0.00543,0.03876,0.7197,0.603,0.3013,0.00858,0.2129,40.6,1.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,2.0 +0.01674,4.023,121.3,0.03226,0.004143,0.5156,0.379,0.228,0.01674,4.023,121.3,3.0 +0.01772,0.5283,194.6,0.002796,0.03244,0.9375,0.4207,0.228,0.01772,0.5283,194.6,4.0 +0.03796,1.537,48.28,0.0316,0.02412,0.5156,0.1045,0.7886,0.03796,1.537,48.28,5.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,6.0 +0.04007,1.194,147.5,0.0083,0.03244,0.5156,0.447,0.2156,0.04007,1.194,147.5,7.0 +0.05725,3.68,115.94,0.03122,0.01532,0.898,0.3115,0.5444,0.05725,3.68,115.94,8.0 +0.06586,0.2866,65.94,0.005318,0.1869,0.719,0.603,0.3179,0.06586,0.2866,65.94,9.0 +0.0761,2.443,77.25,0.0316,0.03021,0.5156,0.41,0.3235,0.0761,2.443,77.25,10.0 +0.08136,2.611,82.5,0.0316,0.03021,0.5156,0.8955,0.923,0.08136,2.611,82.5,11.0 +0.12396,0.539,124.06,0.005318,0.1869,0.65,0.603,0.786,0.12396,0.539,124.06,12.0 +0.1299,4.17,85.2,0.04803,0.03021,0.5156,0.395,0.228,0.1299,4.17,85.2,13.0 +0.1384,4.44,140.5,0.0316,0.03021,0.5156,0.4504,0.786,0.1384,4.44,140.5,14.0 +0.1581,0.03482,35.34,0.00543,0.8193,0.5156,0.4004,0.3103,0.1581,0.03482,35.34,15.0 +0.1788,5.008,35.62,0.1271,0.0345,0.7197,0.603,0.3013,0.1788,5.008,35.62,16.0 +0.3062,0.08746,152.9,0.00257,0.778,0.01473,0.4207,0.1343,0.3062,0.08746,152.9,17.0 +0.4429,17.5,22.88,0.4397,0.02469,0.7197,0.603,0.3013,0.4429,17.5,22.88,18.0 +0.4924,0.1084,110.1,0.00543,0.8193,0.5547,0.2078,0.3013,0.4924,0.1084,110.1,19.0 +0.5557,0.12244,124.3,0.00543,0.8193,0.5547,0.1045,0.7886,0.5557,0.12244,124.3,20.0 +0.557,0.12274,124.6,0.00543,0.8193,0.5547,0.1045,0.11,0.557,0.12274,124.6,21.0 +0.58,0.1499,133.8,0.00543,0.795,0.5576,0.2893,0.1848,0.58,0.1499,133.8,22.0 +0.583,23.05,30.11,0.4397,0.02469,0.7197,0.6123,0.3013,0.583,23.05,30.11,23.0 +0.5938,23.45,31.42,0.4336,0.02469,0.7197,0.603,0.7886,0.5938,23.45,31.42,24.0 +0.648,0.1427,144.9,0.00543,0.8193,0.62,0.33,0.1791,0.648,0.1427,144.9,25.0 +0.742,47.72,97.8,0.3313,0.01532,0.898,0.2788,0.5444,0.742,47.72,97.8,26.0 +0.8,51.4,105.44,0.3313,0.01532,0.898,0.2593,0.5264,0.8,51.4,105.44,27.0 +0.833,53.53,62.1,0.4668,0.01532,0.697,0.3428,0.7886,0.833,53.53,62.1,28.0 +0.835,59.56,97.44,0.3828,0.013824,0.9546,0.4207,0.1912,0.835,59.56,97.44,29.0 +0.010124,0.302,111.3,0.002796,0.03244,0.9824,0.4314,0.3013,0.010124,0.302,111.3,30.0 +0.3245,0.0928,162.0,0.00257,0.778,0.01473,0.4236,0.1343,0.3245,0.0928,162.0,31.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,32.0 +0.1951,6.26,127.94,0.04803,0.03021,0.4575,0.2893,0.1848,0.1951,6.26,127.94,33.0 +0.3982,0.08765,89.0,0.00543,0.8193,0.5156,0.395,0.228,0.3982,0.08765,89.0,34.0 +0.7393,47.5,97.44,0.3313,0.01532,0.62,0.33,0.1791,0.7393,47.5,97.44,35.0 +0.003393,0.2181,40.6,0.00543,0.01532,0.7197,0.603,0.3013,0.003393,0.2181,40.6,36.0 +0.003393,0.2181,40.6,0.00543,0.01532,0.7197,0.603,0.3013,0.003393,0.2181,40.6,37.0 +0.0549,1.763,143.0,0.01255,0.03021,0.5156,0.4504,0.2856,0.0549,1.763,143.0,38.0 +0.5996,38.56,107.1,0.2676,0.01532,0.898,0.2788,0.5444,0.5996,38.56,107.1,39.0 +0.02827,0.701,133.6,0.00543,0.03876,0.7197,0.603,0.2411,0.02827,0.701,133.6,40.0 +0.1198,3.846,121.56,0.0316,0.03021,0.5156,0.4504,0.3013,0.1198,3.846,121.56,41.0 +2.338,75.06,158.6,0.3281,0.03021,0.4746,0.4504,0.8345,2.338,75.06,158.6,42.0 +0.1328,0.03796,79.7,0.002136,0.778,0.01203,0.4207,0.11,0.1328,0.03796,79.7,43.0 +1.17,37.56,50.78,0.4329,0.03021,0.5156,0.395,0.228,1.17,37.56,50.78,44.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,45.0 +0.05728,0.2491,57.3,0.005318,0.1869,0.719,0.603,0.786,0.05728,0.2491,57.3,46.0 +0.1377,4.418,139.8,0.0316,0.03021,0.5156,0.4207,0.1343,0.1377,4.418,139.8,47.0 +0.1241,3.984,125.94,0.0316,0.03021,0.5156,0.4626,0.786,0.1241,3.984,125.94,48.0 +0.01628,0.467,88.56,0.00543,0.0337,0.898,0.2788,0.5786,0.01628,0.467,88.56,49.0 +0.02982,1.203,147.2,0.0083,0.02419,0.5156,0.447,0.2156,0.02982,1.203,147.2,50.0 +0.015205,0.4534,167.1,0.002796,0.03244,0.671,0.4207,0.1718,0.015205,0.4534,167.1,51.0 +0.58,0.1499,133.8,0.00543,0.795,0.5576,0.2893,0.1848,0.58,0.1499,133.8,52.0 +2.818,87.94,115.6,0.4397,0.03107,0.898,0.3518,0.5444,2.818,87.94,115.6,53.0 +0.9067,58.25,76.6,0.4358,0.01532,0.898,0.2822,0.5444,0.9067,58.25,76.6,54.0 +0.5557,0.1241,124.6,0.00543,0.8174,0.5547,0.1045,0.11,0.5557,0.1241,124.6,55.0 +0.012474,0.372,162.9,0.002356,0.03244,0.9824,0.33,0.1746,0.012474,0.372,162.9,56.0 +0.02089,5.023,151.5,0.03226,0.004143,0.5156,0.379,0.7407,0.02089,5.023,151.5,57.0 +0.012054,2.898,87.3,0.03226,0.004143,0.5156,0.3943,0.228,0.012054,2.898,87.3,58.0 +3.85,0.8477,141.0,0.03226,0.8193,0.62,0.33,0.1791,3.85,0.8477,141.0,59.0 +0.003393,0.2181,40.6,0.00543,0.01532,0.7197,0.603,0.3013,0.003393,0.2181,40.6,0.0 +0.003393,0.2181,40.6,0.00543,0.01532,0.7197,0.603,0.3013,0.003393,0.2181,40.6,1.0 +0.007133,0.2128,78.4,0.002796,0.03244,0.9824,0.4207,0.3013,0.007133,0.2128,78.4,2.0 +0.00858,0.2129,40.6,0.00543,0.03876,0.7197,0.603,0.3013,0.00858,0.2129,40.6,3.0 +0.010124,0.302,111.3,0.002796,0.03244,0.9824,0.4314,0.3013,0.010124,0.302,111.3,4.0 +0.012054,2.898,87.3,0.03226,0.004143,0.5156,0.3943,0.228,0.012054,2.898,87.3,5.0 +0.012474,0.372,162.9,0.002356,0.03244,0.9824,0.33,0.1746,0.012474,0.372,162.9,6.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,7.0 +0.01393,0.8955,166.6,0.00543,0.01532,0.671,0.4207,0.1718,0.01393,0.8955,166.6,8.0 +0.015205,0.4534,167.1,0.002796,0.03244,0.671,0.4207,0.1718,0.015205,0.4534,167.1,9.0 +0.01628,0.467,88.56,0.00543,0.0337,0.898,0.2788,0.5786,0.01628,0.467,88.56,10.0 +0.01674,4.023,121.3,0.03226,0.004143,0.5156,0.379,0.228,0.01674,4.023,121.3,11.0 +0.01772,0.5283,194.6,0.002796,0.03244,0.9375,0.4207,0.228,0.01772,0.5283,194.6,12.0 +0.02089,5.023,151.5,0.03226,0.004143,0.5156,0.379,0.7407,0.02089,5.023,151.5,13.0 +0.02827,0.701,133.6,0.00543,0.03876,0.7197,0.603,0.2411,0.02827,0.701,133.6,14.0 +0.02982,1.203,147.2,0.0083,0.02419,0.5156,0.447,0.2156,0.02982,1.203,147.2,15.0 +0.03796,1.537,48.28,0.0316,0.02412,0.5156,0.1045,0.7886,0.03796,1.537,48.28,16.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,17.0 +0.03955,17.9,22.88,0.4397,0.002205,0.7197,0.603,0.3013,0.03955,17.9,22.88,18.0 +0.04007,1.194,147.5,0.0083,0.03244,0.5156,0.447,0.2156,0.04007,1.194,147.5,19.0 +0.0549,1.763,143.0,0.01255,0.03021,0.5156,0.4504,0.2856,0.0549,1.763,143.0,20.0 +0.05725,3.68,115.94,0.03122,0.01532,0.898,0.3115,0.5444,0.05725,3.68,115.94,21.0 +0.05728,0.2491,57.3,0.005318,0.1869,0.719,0.603,0.786,0.05728,0.2491,57.3,22.0 +0.06586,0.2866,65.94,0.005318,0.1869,0.719,0.603,0.3179,0.06586,0.2866,65.94,23.0 +0.0761,2.443,77.25,0.0316,0.03021,0.5156,0.41,0.3235,0.0761,2.443,77.25,24.0 +0.08136,2.611,82.5,0.0316,0.03021,0.5156,0.8955,0.923,0.08136,2.611,82.5,25.0 +0.1198,3.846,121.56,0.0316,0.03021,0.5156,0.4504,0.3013,0.1198,3.846,121.56,26.0 +0.12396,0.539,124.06,0.005318,0.1869,0.65,0.603,0.786,0.12396,0.539,124.06,27.0 +0.1241,3.984,125.94,0.0316,0.03021,0.5156,0.4626,0.786,0.1241,3.984,125.94,28.0 +0.1299,4.17,85.2,0.04803,0.03021,0.5156,0.395,0.228,0.1299,4.17,85.2,29.0 +0.003273,0.1324,48.38,0.002796,0.02412,0.5156,0.098,0.7886,0.003273,0.1324,48.38,30.0 +0.0188,0.466,98.6,0.004894,0.03876,0.7407,0.603,0.3013,0.0188,0.466,98.6,31.0 +0.0377,1.524,47.9,0.0316,0.02412,0.5156,0.11334,0.3013,0.0377,1.524,47.9,32.0 +0.0337,0.4197,89.06,0.005066,0.0743,0.5156,0.395,0.228,0.0337,0.4197,89.06,33.0 +0.0236,1.518,47.8,0.03122,0.01532,0.898,0.3115,0.3167,0.0236,1.518,47.8,34.0 +0.02122,0.681,74.44,0.009346,0.03021,0.5156,0.4207,0.312,0.02122,0.681,74.44,35.0 +0.02716,6.53,196.9,0.03226,0.004143,0.5156,0.453,0.2343,0.02716,6.53,196.9,36.0 +0.010124,0.302,111.3,0.002796,0.03244,0.9824,0.4314,0.3013,0.010124,0.302,111.3,37.0 +0.01539,0.3816,12.164,0.0316,0.03876,0.609,0.603,0.3013,0.01539,0.3816,12.164,38.0 +0.03004,1.931,38.84,0.04803,0.01532,0.7197,0.603,0.3013,0.03004,1.931,38.84,39.0 +0.123,0.5825,131.9,0.005318,0.1743,0.7197,0.603,0.2598,0.123,0.5825,131.9,40.0 +0.6655,2.895,62.72,0.05374,0.1869,0.719,0.603,0.3179,0.6655,2.895,62.72,41.0 +0.0627,3.623,86.4,0.04092,0.01701,0.5176,0.8955,0.923,0.0627,3.623,86.4,42.0 +0.02008,3.643,109.94,0.03226,0.00548,0.565,0.4912,0.2156,0.02008,3.643,109.94,43.0 +0.01793,0.4446,84.75,0.00543,0.03876,0.5156,0.8955,0.923,0.01793,0.4446,84.75,44.0 +0.04663,2.996,101.2,0.0292,0.01532,0.671,0.4207,0.3013,0.04663,2.996,101.2,45.0 +0.01732,1.113,135.0,0.0083,0.01532,0.7197,0.5557,0.3013,0.01732,1.113,135.0,46.0 +0.004715,0.1908,69.7,0.002796,0.02412,0.5225,0.1045,0.7886,0.004715,0.1908,69.7,47.0 +0.0244,0.7275,137.8,0.00543,0.03244,0.5117,0.447,0.2156,0.0244,0.7275,137.8,48.0 +0.01179,0.3516,129.6,0.002796,0.03244,0.9375,0.603,0.2812,0.01179,0.3516,129.6,49.0 +0.02681,1.085,34.06,0.0316,0.02412,0.5156,0.1045,0.3013,0.02681,1.085,34.06,50.0 +0.2299,7.38,150.8,0.04803,0.03021,0.5156,0.4207,0.2568,0.2299,7.38,150.8,51.0 +0.003702,0.1104,40.7,0.002796,0.03244,0.7197,0.603,0.3013,0.003702,0.1104,40.7,52.0 +0.2703,17.38,151.4,0.10443,0.01532,0.898,0.3289,0.5444,0.2703,17.38,151.4,53.0 +0.01822,0.585,110.5,0.00543,0.03021,0.5376,0.4841,0.3013,0.01822,0.585,110.5,54.0 +0.006306,0.4053,190.4,0.002157,0.01532,0.671,0.447,0.2156,0.006306,0.4053,190.4,55.0 +0.00999,0.2343,87.06,0.002796,0.0409,0.664,0.603,0.3013,0.00999,0.2343,87.06,56.0 +0.02046,1.315,69.75,0.0188,0.01532,0.876,0.3115,0.3013,0.02046,1.315,69.75,57.0 +0.00989,0.6353,118.25,0.00543,0.01532,0.671,0.4207,0.7886,0.00989,0.6353,118.25,58.0 +0.8486,3.691,100.7,0.04315,0.1869,0.65,0.603,0.3013,0.8486,3.691,100.7,59.0 diff --git a/spotpy/examples/tutorial_nsgaii.py b/spotpy/examples/tutorial_nsgaii.py index 54b48254..444f28ee 100644 --- a/spotpy/examples/tutorial_nsgaii.py +++ b/spotpy/examples/tutorial_nsgaii.py @@ -33,12 +33,12 @@ def multi_obj_func(evaluation, simulation): if __name__ == "__main__": - generations=15 - n_pop = 50 + generations=40 + n_pop = 20 skip_duplicates = True sp_setup=spot_setup(obj_func= multi_obj_func) - sampler = spotpy.algorithms.NSGAII_DEV(spot_setup=sp_setup, dbname='NSGA2', dbformat="csv") + sampler = spotpy.algorithms.NSGAII(spot_setup=sp_setup, dbname='NSGA2', dbformat="csv") sampler.sample(generations, n_obj= 3, n_pop = n_pop, skip_duplicates = skip_duplicates) #sampler.sample(generations=5, paramsamp=40) @@ -160,30 +160,50 @@ def plot_parameter_histogram(ax, results, parameter): # Example plot to show remaining parameter uncertainty # fields=[word for word in results.dtype.names if word.startswith('sim')] fig= plt.figure(3, figsize=(16,9)) - ax = plt.subplot(1,1,1) + ax11 = plt.subplot(1,1,1) q5,q25,q75,q95=[],[],[],[] for field in fields: q5.append(np.percentile(results[field][-100:-1],2.5)) q95.append(np.percentile(results[field][-100:-1],97.5)) - ax.plot(q5,color='dimgrey',linestyle='solid') - ax.plot(q95,color='dimgrey',linestyle='solid') - ax.fill_between(np.arange(0,len(q5),1),list(q5),list(q95),facecolor='dimgrey',zorder=0, + ax11.plot(q5,color='dimgrey',linestyle='solid') + ax11.plot(q95,color='dimgrey',linestyle='solid') + ax11.fill_between(np.arange(0,len(q5),1),list(q5),list(q95),facecolor='dimgrey',zorder=0, linewidth=0,label='parameter uncertainty') - ax.plot(sp_setup.evaluation(),'r.',label='data') - ax.set_ylim(-50,450) - ax.set_xlim(0,729) - ax.legend() + ax11.plot(sp_setup.evaluation(),'r.',label='data') + ax11.set_ylim(-50,450) + ax11.set_xlim(0,729) + ax11.legend() fig.savefig('python_hymod.png',dpi=300) ######################################################### + + + x,y,z = results['like1'][-n_pop:],results['like2'][-n_pop:],results['like3'][-n_pop:] + fig = plt.figure(4) + ax12 = fig.add_subplot(111, projection='3d') + ax12.scatter(x,y,z,marker="o") + ax12.set_xlabel("pbias") + ax12.set_ylabel("rmse") + ax12.set_zlabel("rsquared") + plt.show() + + class Test_NSGAII(unittest.TestCase): + def multi_obj_func(evaluation, simulation): + #used to overwrite objective function in hymod example + like1 = abs(spotpy.objectivefunctions.pbias(evaluation, simulation)) + like2 = spotpy.objectivefunctions.rmse(evaluation, simulation) + like3 = spotpy.objectivefunctions.rsquared(evaluation, simulation)*-1 + return [like1, like2, like3] + def setUp(self): - self.sp_setup = spot_setup() - self.sampler = spotpy.algorithms.NSGAII(self.sp_setup, dbname='NSGA2', dbformat="csv") + generations=40 + n_pop = 20 + skip_duplicates = True - self.sampler.sample(generations=5, paramsamp=40) + self.sp_setup=spot_setup(obj_func= multi_obj_func) + self.sampler = spotpy.algorithms.NSGAII(self.sp_setup, dbname='NSGA2', dbformat="csv") + self.sampler.sample(generations, n_obj= 3, n_pop = n_pop, skip_duplicates = skip_duplicates) def test_sampler_output(self): - self.assertGreaterEqual(400, len(self.sampler.getdata())) - self.assertLessEqual(300, len(self.sampler.getdata())) - + self.assertEqual(200, len(self.sampler.getdata())) diff --git a/spotpy/examples/tutorial_nsgaii_dev.py b/spotpy/examples/tutorial_nsgaii_dev.py deleted file mode 100644 index b2a9bb2b..00000000 --- a/spotpy/examples/tutorial_nsgaii_dev.py +++ /dev/null @@ -1,25 +0,0 @@ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -import spotpy - - -from spotpy.examples.spot_setup_dtlz1 import spot_setup -from spotpy.algorithms.nsgaii_dev import TournamentSelection,Crossover,PolynomialMutation - - -if __name__ == "__main__": - #Create samplers for every algorithm: - results=[] - spot_setup=spot_setup(n_var=5, n_obj=3) - generations=10 - n_pop = 30 - skip_duplicates = False - - sampler=spotpy.algorithms.NSGAII_DEV(spot_setup=spot_setup, - dbname='NSGA2', - dbformat='csv', - save_sim=True) - sampler.sample(generations,n_obj=3, n_pop=n_pop,skip_duplicates=skip_duplicates) diff --git a/spotpy/examples/tutorial_nsgaii_dltz1.py b/spotpy/examples/tutorial_nsgaii_dltz1.py new file mode 100644 index 00000000..96031b5b --- /dev/null +++ b/spotpy/examples/tutorial_nsgaii_dltz1.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import spotpy +from spotpy.examples.spot_setup_dtlz1 import spot_setup +import numpy as np +import sys +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +import pandas as pd + + +if __name__ == "__main__": + #Create samplers for every algorithm: + results=[] + n_obj = 3 + spot_setup=spot_setup(n_var=5, n_obj=n_obj) + generations=10 + n_pop = 30 + skip_duplicates = False + + sampler=spotpy.algorithms.NSGAII(spot_setup=spot_setup, + dbname='NSGA2', + dbformat='csv', + save_sim=True) + sampler.sample(generations,n_obj=3, n_pop=n_pop,skip_duplicates=skip_duplicates) + + + last = None + first = None + + # output calibration + + df = pd.read_csv("NSGA2.csv") + + df["like3"] = df.like3 * -1 + + + if last: + df = df.iloc[-last:,:] + elif first: + df = df.iloc[:first,:] + else: + pass + + + + # plot objective functions + fig = plt.figure() + for i,name in enumerate(df.columns[:n_obj]): + ax = fig.add_subplot(n_obj,1,i +1) + df.loc[::5,name].plot(lw=0.5,figsize=(18,8),ax = ax,color="black") + plt.title(name) + plt.show() + + + + x,y,z = df.iloc[-n_pop:,0],df.iloc[-n_pop:,1],df.iloc[-n_pop:,2] + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + ax.scatter(x,y,z,marker="o") + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_zlabel("z") + plt.show() + + # plot parameters + fig = plt.figure() + for i,name in enumerate(df.columns[n_obj:8]): + ax = fig.add_subplot(5,1,i +1) + df.loc[:,name].plot(lw=0.5,figsize=(18,8),ax = ax,color="black") + plt.title(name) + plt.show() +