def calculate_Population_fitness(self, part): # (h,w) DomBlockSize = (16,16) RanBlockSize = (8,8) max_fitness = 1000000000 ranking = [] for chrom in part: # genes gen_x_dom = chrom[0:9] gen_y_dom = chrom[9:18] gen_flip = chrom[18:21] # fenotypes fen_xdom = int(gen_x_dom,2) # 2 for binary representation fen_ydom = int(gen_y_dom,2) fen_flip = int(gen_flip,2) try: DomBlk = self.Dom[fen_ydom:fen_ydom+DomBlockSize[0] ,fen_xdom:fen_xdom+DomBlockSize[1]] except: return "DomBlkError" try: DomBlk_hex = rgb2hex(DomBlk.copy()) except: return "rgb2hexError" try: temp = get_scaled.geometric_transform(DomBlk_hex, resize_func, output_shape=RanBlockSize) except: return "transformError" try: DomBlk_subsampled = get_dihedrical_transf(temp,fen_flip) except: return "dihedrTransformError" #p,q = calc_massic(DomBlk_subsampled,rngBlk) try: MSE = self.calculate_mse(DomBlk_subsampled) except MSEError,E: return E.reason try: rank = min(1/MSE,max_fitness) except ZeroDivisionError: rank = max_fitness heappush(ranking,(rank,chrom))
def get_phenotype(chrom, Dom,DomBlockSize, RanBlockSize ): gen_x_dom = chrom[0:9] gen_y_dom = chrom[9:18] gen_flip = chrom[18:21] # fenotypes fen_xdom = int(gen_x_dom,2) # 2 for binary representation fen_ydom = int(gen_y_dom,2) fen_flip = int(gen_flip,2) DomBlk = Dom[fen_ydom:fen_ydom+DomBlockSize[0] ,fen_xdom:fen_xdom+DomBlockSize[1]] DomBlk_hex = rgb2hex(DomBlk.copy()) temp = get_scaled.geometric_transform(DomBlk_hex, resize_func, output_shape=RanBlockSize) DomBlk_subsampled = get_dihedrical_transf(temp,fen_flip) return DomBlk_subsampled
def show_chrom(chrom, Dom, DomBlockSize ): RanBlockSize = (8,8) gen_x_dom = chrom[0:9] gen_y_dom = chrom[9:18] gen_flip = chrom[18:21] # fenotypes fen_xdom = int(gen_x_dom,2) # 2 for binary representation fen_ydom = int(gen_y_dom,2) fen_flip = int(gen_flip,2) DomBlk = Dom[fen_ydom:fen_ydom+DomBlockSize[0] ,fen_xdom:fen_xdom+DomBlockSize[1]] DomBlk_hex = rgb2hex(DomBlk.copy()) temp = get_scaled.geometric_transform(DomBlk_hex, resize_func, output_shape=RanBlockSize) DomBlk_subsampled = get_dihedrical_transf(temp,fen_flip) DomBlk_subsampled = DomBlk_subsampled.copy() pilImage = Image.frombuffer('RGBA',DomBlk_subsampled.shape,DomBlk_subsampled,'raw','RGBA',0,1) #for rgba #pilImage = Image.frombuffer('RGBA',DomBlk_hex.shape,DomBlk_hex,'raw','RGBA',0,1) #for rgba imshow(pilImage.transpose(1))