Download Ver Codigo Fuente
Document related concepts
no text concepts found
Transcript
#! /usr/bin/env python # -*- coding: utf-8 -*import random from copy import copy, deepcopy class Gen(object): """Objeto p""" caracteristicas = "000" valor = 0 ponderado = 0.0 def __init__(self): self.caracteristicas = self.generar_caracteristica() pass def __str__(self): return self.caracteristicas def get_caracteristica(self): return self.caracteristicas def set_caracteristicas(self, x): self.caracteristicas = x return def get_valor(self): return self.valor def set_valor(self, x): self.valor = x return def get_ponderado(self): return self.ponderado def set_ponderado(self, x): self.ponderado = x return def generar_caracteristica(self): l=["000","001","010","011","100","101","110","111"] return l[random.randrange(8)] class Empresa(object): """docstrinGenes""" def __init__(self): self.puntos_venta = [] self.n = 0 pass def nuevo_gen(self, x): self.puntos_venta.append(x) self.puntos_venta.append(x) def generarpv(self, n): self.n = n for i in range(n): x = Gen() x.set_valor(random.randrange(1,10)) self.puntos_venta.append(x) def imprimir(self): for i in range(self.n): print self.puntos_venta[i] print self.caracteristicas[i] def imprimir_ponderado(self): for i in range(self.n): print self.puntos_venta[i].get_ponderado() def imprimir_valores(self): for i in range(self.n): print self.puntos_venta[i].get_valor() def imprimir_caracteristicas(self): for i in range(self.n): print self.puntos_venta[i].get_caracteristica() def get_suma_valores(self): suma = 0 for i in range(self.n): suma = suma + self.puntos_venta[i].valor return suma def ponderacion(self): for i in range(self.n): a = self.puntos_venta[i].get_valor() / (self.get_suma_valores() + 0.0) self.puntos_venta[i].set_ponderado(a) return def set_best_caract(self, index, caract): for i in range(self.n): if i == index: self.puntos_venta[i].set_caracteristicas(caract) return True return False def get_best_valor_index(self): mejor = 0 index = 0 for i in range(self.n): aux = self.puntos_venta[i].get_valor() if aux > mejor: index = i mejor = aux return index def get_best_valor_index2(self, x): mejor = 0 index = 0 for i in range(self.n): aux = self.puntos_venta[i].get_valor() if x != i: if aux >= mejor: index = i mejor = aux return index def cruzar_genes(self, gen1, gen2): r = random.randrange(1,4) #print "real ",self.puntos_venta[gen1].get_caracteristica(), self.puntos_venta[gen2].get_caracteristica() a = self.puntos_venta[gen1].get_caracteristica()[0:r] c = self.puntos_venta[gen1].get_caracteristica()[r-3:] if r < 2: b = self.puntos_venta[gen2].get_caracteristica()[-2:] d = self.puntos_venta[gen2].get_caracteristica()[0:1] if r == 2: b = self.puntos_venta[gen2].get_caracteristica()[-1] d = self.puntos_venta[gen2].get_caracteristica()[0:2] if r > 2: b = "" d = self.puntos_venta[gen2].get_caracteristica()[-3:] c = "" return a + b, c + d def get_worst_valor_index(self): peor = 100 index = 0 for i in range(self.n): aux = self.puntos_venta[i].get_valor() if aux < peor: index = i peor = aux return index def get_worst_valor_index2(self, x): peor = 100 index = 0 for i in range(self.n): aux = self.puntos_venta[i].get_valor() if x != i: if aux <= peor: index = i peor = aux return index def change_best_to_worst(self): a = self.get_best_valor_index() b = self.get_best_valor_index2(a) new_caracteristica1, new_caracteristica2 = self.cruzar_genes(a, b) x = self.get_worst_valor_index() y = self.get_worst_valor_index2(x) self.set_best_caract(x, new_caracteristica1) self.set_best_caract(y, new_caracteristica2) return def ingresar_valores(): print "cuantas Empresas desea Agregar" print "Favor ingresar valores" return genes = Gen() genes.set_valor(5) EaGames = Empresa() EaGames.generarpv(5) EaGames.ponderacion() print "Estado inicial\n" EaGames.imprimir_caracteristicas() EaGames.imprimir_valores() EaGames.imprimir_ponderado() EaGames.change_best_to_worst(); print "\n\nNuevo estado \n" EaGames.imprimir_caracteristicas() EaGames.imprimir_valores() EaGames.imprimir_ponderado()
Related documents