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