Пример #1
0
 def _gset_tail_settings(self):
     """Compute settings relevant to tail selection
     """
     tails_to_anal = []
     if self.anal_right:
         tails_to_anal.append(Tail.right)
     if self.anal_left:
         tails_to_anal.append(Tail.left)
     self.tails_to_anal = tuple(tails_to_anal)
     if bool(self.tails_to_anal):
         self.analyze_tails = True
         nd = NormalDist()
         self.alpha_qntl = nd.inv_cdf(1 - len(self.tails_to_anal) / 2 *
                                      self.alpha_signif)
     else:
         self.analyze_tails = False
         self._enforce_null_tail_analysis_opts()
Пример #2
0
def one_one(low, high, n, p, f, it, fit):

    dec = round(mt.pow(1.5, -0.25), 15)
    np.set_printoptions(precision=p)

    #initialization
    values = np.random.uniform(low, high, n)
    sigma = 0.2
    print("Init population")
    print(values, sigma, '\n')

    #first aptitude
    ap = f(values)
    print("Aptitude of the population")
    print(values, sigma, ap, '\n')

    ii = 1
    it += 1

    while (ii < it):

        print("*****Iteration ", ii, "*****")
        print(values, sigma, ap)
        al_g = np.zeros((n, ))
        N = NormalDist(0, sigma)
        for i in range(0, n):
            al = rdm.uniform(0, 1)
            al_g[i] = N.inv_cdf(al)
            print_al(i + 1, al, al_g[i])

        new_values = np.copy(values)
        for i in range(0, n):
            new_values[i] += al_g[i]

        if f(new_values) <= f(values):
            values = np.copy(new_values)
            sigma *= 1.5
        else:
            sigma *= dec
        sigma = round(sigma, 30)

        print(values, sigma, f(values), '\n')
        ii += 1
Пример #3
0
def mu_lam(low, high, n, mu, lam, p, f, it, fit):

    dec = round(mt.pow(1.5, -0.25), 15)
    det = round(mt.sqrt(2 * mt.sqrt(n)), 15)
    np.set_printoptions(precision=p)

    #initialization
    values = np.random.uniform(low, high, (mu, n))
    sigma = np.full((mu, n), 0.2)
    print("Init population")
    print_po(values, sigma, mu)

    #first aptitude
    ap = calc(values, f, mu)
    print("Aptitude of the population")
    print_ap(values, sigma, ap, mu)

    ii = 1
    it += 1

    while (ii < it):

        values_n = np.zeros((lam, n))
        sigma_n = np.zeros((lam, n))
        f_n = np.zeros((lam, 1))
        print("*****Iteration ", ii, "*****")
        for i in range(0, lam):
            #Select the parents
            print("Descendent N", i + 1)
            print("Cross")
            mu_ = mu - 1
            indx1 = rdm.randint(0, mu_)
            indx2 = rdm.randint(0, mu_)
            if f(values[indx1]) < f(values[indx2]):
                p1 = indx1
            else:
                p1 = indx2
            print(indx1, '-', indx2, ' => ', p1, ' => ', values[p1], sigma[p1])
            indx1 = rdm.randint(0, mu_)
            indx2 = rdm.randint(0, mu_)
            if f(values[indx1]) < f(values[indx2]):
                p2 = indx1
            else:
                p2 = indx2
            print(indx1, '-', indx2, ' => ', p2, ' => ', values[p2], sigma[p2])

            child = np.zeros(n)
            sigma_ = np.zeros(n)
            for j in range(0, n):
                child[j] = np.mean([values[p1][j], values[p2][j]])
                sigma_[j] = mt.sqrt(sigma[p1][j] * sigma[p2][j])

            al_g = np.zeros(n)
            N1 = NormalDist(0, det)
            print("Mutation")
            for j in range(0, n):
                al = rdm.uniform(0, 1)
                sigma_[j] *= mt.exp(N1.inv_cdf(al))
                N2 = NormalDist(0, sigma_[j])
                al = rdm.uniform(0, 1)
                child[j] += N2.inv_cdf(al)
            print(child, sigma_, '\n')
            values_n[i] = child
            sigma_n[i] = sigma_
            f_n[i] = f(child)

        print("Aptitude of the all population")
        print_ap(values, sigma, ap, mu)

        L = np.hstack([values_n, sigma_n, f_n.reshape(1, lam).T])
        L = L[L[:, 2 * n].argsort(axis=0)]
        L = np.delete(L, slice(mu, lam), axis=0)
        values = np.copy(L[:, [0, n - 1]])
        sigma = np.copy(L[:, [n, (2 * n) - 1]])
        ap = calc(values, f, mu)
        print("Aptitude of the new population")
        print_ap(values, sigma, ap, mu)
        #print(values,sigma,f(values),'\n')
        ii += 1