http://www.redcientifica.com/gaia/pseu_c.htm
Castellano > Sección del desarrollador > Algoritmos ...Indice:
Ejemplos de algoritmos en pseudocódigo
- Un mundo de Vida Artificial
- Un autómata celular
- Un algoritmo evolutivo
- La ejecución de un agente de Hormigas y Plantas
- Recocido simulado
- El tres en línea
Un mundo de Vida Artificial
inicializarMundo ciclo = 1 While Not criterioDeParada agente = 1 While agente <= numeroTotalDeAgentes ejecutarAgente(agente) mostrarResumenDeLaEjecucionDeUnAgente agente="agente" + 1 Wend mostrarResumenDelCiclo ciclo="ciclo" + 1 Wend mostrarResumenDeTodaLaEjecucion[ Volver al Indice ]
Un autómata celular
inicializarCelulas ciclo = 1 While Not criterioDeParada celula = 1 While celula <= numeroTotalDeCelulas memoriaTemporal(celula)="calcularNuevoEstado(celula)" celula="celula" + 1 Wend copiarNuevosEstados memoriaTemporal() mostrarResumenDelCiclo ciclo="ciclo" + 1 Wend mostrarResumenDeTodaLaEjecucion[ Volver al Indice ]
Un algoritmo evolutivo
inicializarOpciones() definirEstructuraGeneticaDeLaPoblacion() numeroTotalDeAgentes = crearAgentesIniciales() ciclo = 1 While Not criterioDeParada() agente = 1 While agente <= numeroTotalDeAgentes peso[agente]="evaluarAgente(agente)" agente="agente" + 1 Wend ajustarPesosDeAgentes() ordenarAgentesSegunPesos() seleccionParaLaReproduccion() seleccionParaLaSupervivencia() reproducirYMutarHijos() mostrarResumenDelCiclo() ciclo="ciclo" + 1 Wend mostrarResumenDeTodaLaEjecucion()[ Volver al Indice ]
La ejecución de un agente de Hormigas y Plantas
If energia(agente) <= 0 Then muerte(agente) Else entorno="observarEntorno(agente)" comerPlantasProximas proximaAccion="decidirAccionARealizar(entorno," tipoDeAgente(agente)) Select Case proximaAccion Case 1 moverAgente Case 2 regarPlanta Case 3 reproducirAgente Case 4 pelear Case Else error End Select End If[ Volver al Indice ]
Recocido simuladoAdaptado de Bonsón, Enrique. 1999. Tecnologías inteligentes para la gestión empresarial. Ed Ra-Ma.
generarSolucionInicial ciclo = 1 While Not criterioDeParada agente = 1 For i = 1 to numeroDeSubciclos generarNuevaSolucionCercanaALaAnterior diferencia = evaluar(solucionAnterior) - evaluar(nuevaSolucion) 'Si la nueva solución es mejor que la anterior If diferencia <0 Then 'Tomamos la nueva solución solucionAnterior="nuevaSolucion" Else 'Se admite un margen de error en funcion del tiempo If e(-diferencia/tiempo) > Rnd(0,1) Then solucionAnterior = nuevaSolucion End If End If Next i mostrarResumenDelCiclo ciclo = ciclo + 1 Wend mostrarResumenDeTodaLaEjecucionSiendotiempo[t+1] = tiempo[t] / (1 + B * tiempo[t]) B << 1 / maximaDiferenciaDeTodasLasCalculadas[ Volver al Indice ]
El tres en líneaUn ejemplo simplificado del funcionamiento general de este programa sería:
1.- Creamos 40 agentes compuestos cada uno de 100 reglas; estas reglas están generadas al azar. Cada regla dice que acción realizar ante cierto estado del tablero. Cada regla posee asociado un valor de prioridad de 0 a 3, generado también al azar.
2.- Ponemos a los agentes a jugar partidas por parejas. Es decir, tomamos agentes de dos en dos y hacemos que cada pareja juegue 5 partidas seguidas al tres en raya.
3.- Asígnamos puntuaciones a los agentes: cada vez que un agente gana una partida, gana un punto, y si la pierde, pierde un punto.
4.- Ordenamos a los agentes en función de sus puntos (a esto lo llamamos "peso" del agente")
5.- Ahora vamos a hacer que los mejores agentes sigan "viviendo" y en cambio mueran los otros, cuyo lugar será ocupado por nuevos agentes. Selecciónamos los 20 mejores agentes, y los combinamos por parejas, creando por cada pareja dos nuevos descendientes que tienen las reglas de uno y otro progenitor intercaladas, y los copiamos en al zona de memoria de los 20 agentes peores.
6.- Volvemos al paso 2
[ Volver al Indice ]
[ Home Page Castellano | Home Page English ]