RNA

Diego
14 de Noviembre del 2009
Hola,

Quiero programar una red neuronal que abra una persiana en tres niveles segun el nivel de luz,

mi salida desea es 0 para cerrada, 1 para entreabierta, 2 para abierto total.

Este el código:
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
cout << system("cls") << "\n";
double Xi, u, e, Wij, vWij, r, Yr, P;
float Euler = 2.7182;
int k = 0, Yd;

cout << "Ingrese el nivel de luz: ";
cin >> Xi;

if (Xi >= 0){ // Salida deseada Esta función DEBE ser lógica más allá de evaluaar una variable y asignarlo UN valor
if (Xi <= 2){
Yd = 0;
}
else{
if (Xi >= 3){
if (Xi <= 5){
Yd = 1;
}
else{
if (Xi >= 6){
Yd = 2;
}
}
}
}
}

cout << "Su salida deseada es: " << Yd << "\n";

cout << "Ingrese un peso sinaptico: ";
cin >> Wij;
cout << "Ingrese una tasa de aprendizaje: ";
cin >> r;

while (e != 0){
k = k + 1;
u = Xi * Wij;

Yr = cos(u); // Función de activación

e = Yd - Yr;

vWij = r * e * Xi;
Wij = Wij + vWij;
cout << "Iteracion " << k << "(" << Yr << ")\n";
}
cout << "Su salida real es " << Yr << " obtenida en " << k << " iteraciones.\n\n";
cout << system("pause");
}

No se porque no funciona, puedo cambiar función de activación, los pesos sinapticos, tasa de aprendizaje y todo el disño a gusto me podrían ayudar porque con el código anterior no aprende para todos los casos