http://www.redcientifica.com/gaia/

http://www.redcientifica.com/gaia/pseu_c.htm
Castellano > Sección del desarrollador > Algoritmos ...


Ejemplos de algoritmos en pseudocódigo

Manuel de la Herrán Gascón

Indice:


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 simulado

Adaptado 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
mostrarResumenDeTodaLaEjecucion
Siendo
tiempo[t+1] = tiempo[t] / (1 + B * tiempo[t])
B << 1 / maximaDiferenciaDeTodasLasCalculadas 

[ Volver al Indice ]



El tres en línea

Un 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 ]
Traduccion