I'm trying to program a percepton. What you must do is recognize when a AND
is true or false, through two input data and their weights, and finally print the number of attempts that were necessary to learn. The problem is that it leaves the loop before learning correctly.
class Program {
static void Main(string[] args) {
Program p = new Program();
float peso1 , peso2, umbral;
Random r = new Random();
bool sw = false;
int intento=0;
while (!sw) {
sw = true;
peso1 = Convert.ToSingle(r.NextDouble() - r.NextDouble());
peso2 = Convert.ToSingle(r.NextDouble() - r.NextDouble());
umbral = Convert.ToSingle(r.NextDouble() - r.NextDouble());
Console.WriteLine("----------------------------------------");
Console.WriteLine("Peso 1: " + peso1);
Console.WriteLine("Peso 2: " + peso2);
Console.WriteLine("Umbral: " + umbral);
Console.WriteLine("E1:1 E2:1 : " + p.funcion(p.neurona(1f, 1f, peso1, peso2, umbral)));
Console.WriteLine("E1:1 E2:0 : " + p.funcion(p.neurona(1f, 1f, peso1, peso2, umbral)));
Console.WriteLine("E1:0 E2:1 : " + p.funcion(p.neurona(1f, 1f, peso1, peso2, umbral)));
Console.WriteLine("E1:0 E2:0 : " + p.funcion(p.neurona(1f, 1f, peso1, peso2, umbral)));
if (p.funcion(p.neurona(1f, 1f, peso1, peso2, umbral)) != 1) {
sw = false;
}
if (p.funcion(p.neurona(1f, 0f, peso1, peso2, umbral)) != 0) {
sw = false;
}
if (p.funcion(p.neurona(0f, 1f, peso1, peso2, umbral)) != 0) {
sw = false;
}
if (p.funcion(p.neurona(0f, 0f, peso1, peso2, umbral)) != 0) {
sw = false;
}
intento = intento + 1;
}
Console.WriteLine("Me tomo " + intento + " aprender ");
}
float neurona(float entrada1, float entrada2, float peso1, float peso2, float umbral) {
return umbral + entrada1 * peso1 + entrada2 * peso2;
}
float funcion (float d) { return d > 0 ? 1 : 0; }
}