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()
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]))
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)
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)