Semana 9 - Vicvargas/PortafolioDigital GitHub Wiki
Martes 17/09/19
Observer
El sujeto concreto notifica a sus observadores cuando un cambio ocurre que podría hacer que el estado de sus observers sea inconsistente al suyo.
Aplica cuando:
El cambio en un objeto requiere cambiar a otros objetos (no sé cuales son). Cuando hay objetos que dependen entre sí o cuando muchos dependen de uno.
Consecuencias:
-
Desacopla el sujeto del Observer.
-
Permite comunicación masiva.
-
Es complicado para los Observers saber qué cambió.
Cadena de responsabilidad
Cuando un cliente envía una solicitud ésta se propaga a través de una cadena hasta que un objeto tome la responsabilidad de manejarla.
Aplica cuando:
Más de un objeto puede atender una solocitud.
Consecuencias:
-
Libera a un objeto de saber cuál objeto está manejando una solicitud. (Reduce el acoplamiento).
-
Permite flexibilidad en asignación de responsabilidades. Existe la posibilidad de que una solicitud no sea atendida pues no se especifica quién la debía atender.
¿Cómo seleccionar un patrón de diseño?
Preguntarnos qué queremos resolver. ¿Hay acoplamiento? Pensar en lo que podría cambiar después de forma que no tenga que cambiar el diseño.
Calidad del Software (Software Product Quality)
Nos referimos a dos cosas:
Calidad en el proceso.
Calidad en el producto.
- QA
- QC
- Testing
QA: Quality Assurance
Es un conjunto de actividades diseñadas para asegurar que el desarrollo y mantenimiento es adecuado y garantiza que un sistema cumpla con sus objetivos.
QC: Quality Control
Actividades diseñadas para evaluar un producto en desarrollo.
Testing
Una de las actividades de QC. Es el proceso de ejecutar el sistema con el objetivo de encontrar defectos.
Auditoría
Evaluación del proceso con el cual se está llevando a cabo el producto.
¿Qué es calidad?
ISO la define como el grado con el cual un conjunto de características cumplen con requisitos.
Functional requirements: Algo que deba realizar el producto.
Non-functional requirements: Describir cómo deben funcionar las funcionalidades. (Atributos de calidad)
ISO/IEC 9126-I Software Quality
Generally accepted software quality standard
Se divide en:
-
Modelo de calidad
-
Métricas internas
-
Métricas externas
Calidad en el uso de métricas
Enfocado en el producto y no en el proceso pero no significa que no sea importante para QA.
El modelo define atributos internos y externos.
Internos: Estructua del software arquitectura código atributos estáticos.
Externos: Cómo se comporta el software ante ciertas circunstancias.
External and internal: Categorías
Functionality Reliability Usability Efficiency Maintainability Portability
Jueves 19/09
Técnicas de diseño de algoritmos
Algoritmos genéticos
En los años 50 y 60, los informáticos estudiaron los sistemas evolutivos con la idea de usarlos como una herramienta para optimizar problemas de ingeniería. Fue desarrollado por John Henry Holland (1970's) y está inspirado en el proceso de evolución biológica.
Basado en conceptos como:
-
Seleccion natural
-
Herencia genética
-
Mutaciones
-
Basado en el trabajo de Charles Darwin (1859)
Los algoritmos genéticos (AG) son algoritmos de búsqueda heurística adaptativa basados en las ideas evolutivas de la selección natural y la genética.
Representan una explotación inteligente de una búsqueda aleatoria utilizada para resolver problemas de optimización
No es totalmente aleatorio, explotan información histórica para dirigir la búsqueda. Esto simula el proceso de selección natural. Utiliza técnicas inspiradas en la biología evolutiva, como la herencia, la mutación, la selección y la recombinación.
¿Qué debe ser definido?
- Representación genética del dominio de la solución.
- Función de aptitud para evaluar el dominio de la solución.
Algunas definiciones:
- Célula: contiene cromosomas (cadena de ADN)
- Cromosoma: conjunto de genes (bloque de ADN)
- Genotipo: colección de genes de un responsable de un rasgo particularReproducción: combinación de genes de padres
- Mutación: errores durante la reproducción
- Fitness: cuánto puede reproducirse antes de morir
- Supervivencia del más apto
¿Cómo funciona?
La evolución comienza con una población aleatoria, esto se llama primera generación. En cada generación, se calcula la aptitud de cada individuo, después se seleccionan varios individuos de la población actual en función de su estado físico. Estos individuos se combinan para obtener nuevos individuos. Algunos individuos son descartados de la nueva población (condición física más baja). Tenemos una nueva población, la próxima generación, esta generación se usa en la próxima iteración del algoritmo
¿Cuándo ha terminado?
- Alcanzar un número máximo de generaciones
- No hay cambios en el material genético de la población.
- Una solución adecuada puede o no haber alcanzado
Más definiciones
-
Individuo: cualquier solución posible
-
Población: grupo de todos los individuos.
-
Espacio de búsqueda: todas las soluciones posibles para un problema
-
Cromosoma: esquema / plan para un individuo
-
Rasgo: Aspecto de un individuo
-
Genoma: colección de cromosomas para un individuo
Representación de la solución:
La representación típica de una solución es una matriz de bits. Intente utilizar una representación de longitud fija, esto facilitará el cruce.
Vectores de bits
- Tipo especializado para trabajar con matrices de bits (valores booleanos).
- Sin desperdicio de espacio.
- No hay un tipo "bit" en algunos lenguajes de programación, trabajamos con tipos más grandes para representar una matriz de bits (bytes).
- Ahorre espacio cuando vamos a transferir datos a través de la red.
- Uso eficiente de los recursos.
- Utilizado para comprimir datos y algoritmos de encriptación.
Puedo representar un vector de bits de la siguiente manera:
int bit_vector = 0;
Esto da un vector de bits de 32 posiciones (4 bytes)
Función fitness
-
Definido sobre la representación genética
-
Mide la calidad de una solución dada
-
Define qué soluciones tienen muchas más probabilidades de sobrevivir y reproducirse
-
Queremos maximizar la sensación de plenitud dada la restricción de una cantidad de calorías.
Flujo de un algoritmo genético
- Crear población inicial
- Calcular el fitness
- Proceso de selección
- Cruce entre los individuos
- Algunos de los individuos resultantes se les pueden aplicar mutación o inversión
- Esos individuos son introducidos en la población
- ¿Terminó? Sí, fin. No, volver al paso 1.
Población inicial
- Generado aleatoriamente, cubriendo todo el espacio de búsqueda.
- El tamaño de la población depende del problema (generalmente tiene varios cientos o miles).
- La solución se puede sembrar en áreas donde se pueden encontrar soluciones óptimas.
- Una población pequeña puede darle un máximo local, una población enorme requiere demasiados recursos computacionales.
Selección
- Durante cada generación, selecciona una parte de la población para crear una nueva generación.
- Las personas se seleccionan en función de su estado físico (proporcional al estado físico).
- Existen otros métodos para seleccionar individuos, por ejemplo, al azar.
Reproducción
- Crossover
- Mutación
- Inversión
Para cada nueva solución, se selecciona un par de padres (proporcional a su estado físico).
Mutación e inversión
- Mutación (baja probabilidad) e inversión (muy baja probabilidad).
- En la mutación seleccionamos un bit aleatorio y agregamos 1, descartamos el desbordamiento.
- En la inversión, seleccione una cadena aleatoria de bits y aplique el complemento a esta cadena.