ALGORITMO DISEÑADO
El algoritmo cuenta con el siguiente diagrama de flujo
La función de costo
El primer paso en el desarrollo del algoritmo consiste en definir la función
de costo, para nuestro caso en particular la función que evalúa la aptitud es la
ecuación de dos variables que buscamos resolver se reemplazan los valores de
x y de y en la ecuación y la aptitud será la distancia al resultado.
5.2. Las restricciones
Con el fin de permitir que el algoritmo converja hacia la solución de una
manera más rápida se restringe el valor de la variable x para que no sea
mayor que doce, el valor de y para que no sea mayor que cien; los valores en
sí mismos deben ser enteros y se ajusta el algoritmo para que busque la mínima
solución posible debido a que la ecuación en si misma tiene múltiples
soluciones.
La codificación
Para el presente algoritmo no se utilizó codificación binaria ni de ningún
tipo debido a que los valores de las parejas enteras (x,y) aleatoriamente generadas
pertenecientes a la población pueden evaluarse directamente en la función
de aptitud Selección
El algoritmo escoge de cada población de 10 elementos los 5 mejores y
estos los cruza para generar 5 descendientes para completar los 10 elementos
de la segunda generación se agregan 5 parejas aleatorias.
Cruce
Debido a que el algoritmo evalúa cantidades enteras que no han pasado
por ningún proceso de codificación se utilizó como método de cruce el promedio
de las dos cantidades enteras, como este promedio no siempre corresponde
a una cantidad entera, si el resultado era decimal, se redondeaba a la cantidad
entera más cercana.
5.6. Mutación
En el presente algoritmo no se utilizó la mutación para los elementos de la
población
Una estructura de datos es una representación de datos junto con las operaciones
permitidas sobre dichos datos.
Típicamente todas las estructuras de datos permiten inserciones arbitrarias. Las estructuras de datos varían en como permiten el acceso a los miembros del grupo.
Algunas permiten tanto accesos como operaciones de borrado arbitrarios.
Otras imponen restricciones, tales como permitir el acceso sólo al elemento más recientemente insertado, o al menos recientemente insertado.
Las estructuras de datos nos permiten lograr un importante objetivo de la programación
orientada a objetos: la reutilización de componentes. Una vez que una estructura de datos ha sido implementada, puede ser utilizada una y otra vez en diversas aplicaciones.
El enfoque, separación de la interfaz y la implementación, es parte del paradigma de
la programación orientada a objetos.
El usuario de la estructura de datos no necesita ver la implementación, sólo las operaciones disponibles. Esta es la parte de ocultamiento y encapsulación, de la programación orientada a objetos.
Otra parte importante de la programación orientada a objetos es la abstracción, Se deben
pensar cuidadosamente el diseño de las estructuras de datos sin tener en cuenta la
implementación. Esto hace la interfaz más limpia, más flexible, más reutilizable y generalmente más fácil de implementar.
Para añadir un nuevo elemento al final:
ultimo.siguiente = new NodoLista( ); //nuevo nodo lista
ultimo = ultimo.siguiente; //ajusta el ultimo
ultimo.dato = x ; // coloca x en el nodo
ultimo.siguiente = null; // Es el último, ajusta el siguiente
Iterar a través de una lista enlazada (básico):
for ( NodoLista p=analista.primero ; p ! = null ; p.siguiente)
System.out.println( p.dato )
Iterar a través de una lista enlazada (con un iterador):
//recorrer la lista, utilizando la abstracción y el iterador…
ListaIter iter = new ListaIter (laLista); // cuidado…
for ( iter.primero( ) ; iter.estaDentro( ); iter.avanzar ( ) )
System.out.println( iter.recuperar( )