Exemplo n.º 1
0
def main():
    m = 20  # dimensiune populație
    err = 0.0006

    popu = pcrmz.PCrmz()
    # inițializare populație
    for i in range(m):
        popu.cr.append(crmz.CrmzCR(pr=4))
        popu.cr[-1].reset((a1, b1, ''))

    # afișare populație
    print('Cromozomi generați automat:')
    for c in popu.cr:
        x1 = c.getv(1)
        vfx1 = fx1(x1)
        print('%2d: %s, coeficient de adecvare %f, f(%.3f)=%f' %
              (c.id, c.sir(), adecv(c), x1, vfx1))
        pylab.plot(x1, vfx1, 'go', linewidth=2, markersize=6)

    for gnr in range(60):
        print('')
        print('gen #%2d: încrucișări ..' % gnr)
        popu.xbin(adecv)

        print('gen #%2d: mutații ..' % gnr)
        popu.mbin(adecv)

        fg = []  # fitnes generația curentă
        fgmax = 0  # fitnes maxim al generației curente
        icmax = 0  # index cromozom cu fitnes maxim
        for i, c in enumerate(popu.cr):
            a = adecv(c)
            fg.append(a)
            if a > fgmax:
                fgmax = a  # adjustare maxim
                icmax = i
            x1 = c.getv(1)  # afișare punct
            vfx1 = fx1(x1)
            pylab.plot(x1, vfx1, 'b+')

        x1 = popu.cr[icmax].getv(1)
        vfx1 = fx1(x1)
        print('gen #%2d: fitnes total %f' % (gnr, sum(fg)))
        print('         fitnes maxim %f (cr#%d)' % (fgmax, icmax))
        print('         %s, f(%f)=%f' % (popu.cr[icmax].sir(), x1, vfx1))
        if abs(vfx1 - fx1min) < err:
            print('eroarea de aproximare < err')
            pylab.plot(x1, vfx1, 'rd')
            break
        else:
            pylab.plot(x1, vfx1, 'r.')

    # afișare grafic
    pylab.axis([a1, b1, -1.3, 0.3])
    pylab.show()
Exemplo n.º 2
0
def main():
    cr = crmz.CrmzCR(4)
    cr.reset((-3, 12.1, '010001001011010000'), (4.1, 5.8, '111110010100010'))
    print('cr#%d: %d variabile, precizie %d cifre zecimale' %
          (cr.id, len(cr.ln), cr._p))
    f = 0
    for i, l in enumerate(cr.ln):
        # variabila curentă este reprezentată în cromozom astfel:
        #   .. s+[0..l-1] ..
        s = f  # prima genă
        f = s + l  # ultima genă (+1)
        print('  x%d: %s (%d biți)' % ((i + 1), cr.sir(s, f), l))
        print('    = %f ∈ [%f, %f]' %
              (cr.getv(i + 1), cr.ab[i][0], cr.ab[i][1]))
Exemplo n.º 3
0
def main():
    m = 10      # dimensiune populație
    popu = pcrmz.PCrmz()
    # inițializare populație
    for i in range(m):
        popu.cr.append(crmz.CrmzCR(pr = 4))
        popu.cr[-1].reset( (a1, b1, '') )

    # afișare populație
    print('Cromozomi generați automat:')
    for c in popu.cr:
        x1 = c.getv(1)
        print('%2d: %s, coeficient de adecvare %f, f(%.3f)=%f' % (c.id, c.sir(), adecv(c), x1, fx1(x1)))

    print('')
    print popu.sel(adecv, info=True)
Exemplo n.º 4
0
def main():
    m = 10      # dimensiune populație
    popu = pcrmz.PCrmz()
    # inițializare populație
    for i in range(m):
        popu.cr.append(crmz.CrmzCR(pr = 4))
        popu.cr[-1].reset( (a1, b1, ''),
                           (a2, b2, '') )

    # afișare populație
    print('Cromozomi generați automat:')
    for c in popu.cr:
        x1 = c.getv(1)
        x2 = c.getv(2)
        print('%2d: %s, fitnes %f, f(%.2f, %.2f)=%f' % (c.id, c.sir(), adecv(c), x1, x2, fx2([x1, x2])))

    print('')
    print popu.sel(adecv, info=True)