Hola a todos, tengo el siguiente algoritmo y se me cierra al aproximarse a 1; el algoritmo simula una neurona que reconoce una entrada AND, para probar el algoritmo hay que meter las entradas 1 y 1.
Código C++:
Ver original#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
struct dendrita{
double peso=0.32;
};
//3.368998902283415031178037679637782275676727294921875 peso
//0.99883983
class neurona{
private:
dendrita dendritas[2];
int i1,i2;
double sum=0;
double sesgo=0.02;
public:
neurona(int i, int j){
i1=i;
i2=j;
sum=sesgo+i*dendritas[0].peso+j*dendritas[1].peso;
cout<<"sum= "<<sum;
}
void evaluar(){
double x;
int xx;
x
=1/(1+pow(2.718281828,(-1*sum
))); xx=x*10000000;
x=xx/10000000.0;
cout<<"este es x: "<<x<<endl;
if(x>=1.0){
cout<<"estoy excitada"<<endl;
cout<<"Peso: "<<dendritas[0].peso;
}else{
//"no estoy excitada, x= "<<
//cout<<setprecision(150)<<x<<endl<<endl<<endl<<endl;
recalcular(x);
}
}
void recalcular(double x){
double delta=(1-x)*0.01;
int peso1,peso2,delt=delta*10000000;
delta=delt/10000000.0;
dendritas[0].peso=dendritas[0].peso+delta;
peso1=dendritas[0].peso*100000;
dendritas[0].peso=peso1/100000.0;
dendritas[1].peso=dendritas[0].peso+delta;
peso2=dendritas[1].peso*100000;
dendritas[1].peso=peso2/100000.0;
//cout<<"delta w: "<<setprecision(15)<<delta<<endl;
cout<<"dendritas peso: "<<dendritas[0].peso<<endl;
instanciar();
}
void instanciar(){
int summ;
sum=sesgo+i1*dendritas[0].peso+i2*dendritas[1].peso;
summ=sum*10000000;
sum=summ/10000000.0;
cout<<"suma: "<<sum<<endl;
evaluar();
}
void peso(){
cout<<"peso= "<<dendritas[0].peso;
}
};
int main()
{
int x,i1,i2;
cout<<"Digite entrada 1: ";
cin>>i1;
cout<<"Digite entrada 2: ";
cin>>i2;
neurona prueba(i1,i2);
prueba.instanciar();
return 0;
}