Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/09/2015, 18:46
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 8 meses
Puntos: 0
Exclamación Se cierra programa al aproximarse a 1

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
  1. #include <iostream>
  2. #include <math.h>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. struct dendrita{
  8.     double peso=0.32;
  9. };
  10.  
  11. //3.368998902283415031178037679637782275676727294921875 peso
  12. //0.99883983
  13. class neurona{
  14. private:
  15.     dendrita dendritas[2];
  16.     int i1,i2;
  17.     double sum=0;
  18.     double sesgo=0.02;
  19.  
  20. public:
  21.     neurona(int i, int j){
  22.         i1=i;
  23.         i2=j;
  24.         sum=sesgo+i*dendritas[0].peso+j*dendritas[1].peso;
  25.         cout<<"sum= "<<sum;
  26.     }
  27.  
  28.     void evaluar(){
  29.         double x;
  30.         int xx;
  31.         x=1/(1+pow(2.718281828,(-1*sum)));
  32.         xx=x*10000000;
  33.         x=xx/10000000.0;
  34.  
  35.         cout<<"este es x: "<<x<<endl;
  36.  
  37.         if(x>=1.0){
  38.             cout<<"estoy excitada"<<endl;
  39.             cout<<"Peso: "<<dendritas[0].peso;
  40.         }else{
  41.             //"no estoy excitada, x= "<<
  42.             //cout<<setprecision(150)<<x<<endl<<endl<<endl<<endl;
  43.             recalcular(x);
  44.         }
  45.  
  46.     }
  47.  
  48.     void recalcular(double x){
  49.         double delta=(1-x)*0.01;
  50.  
  51.         int peso1,peso2,delt=delta*10000000;
  52.         delta=delt/10000000.0;
  53.  
  54.  
  55.         dendritas[0].peso=dendritas[0].peso+delta;
  56.         peso1=dendritas[0].peso*100000;
  57.         dendritas[0].peso=peso1/100000.0;
  58.  
  59.         dendritas[1].peso=dendritas[0].peso+delta;
  60.         peso2=dendritas[1].peso*100000;
  61.         dendritas[1].peso=peso2/100000.0;
  62.  
  63.         //cout<<"delta w: "<<setprecision(15)<<delta<<endl;
  64.         cout<<"dendritas peso: "<<dendritas[0].peso<<endl;
  65.         instanciar();
  66.     }
  67.  
  68.     void instanciar(){
  69.         int summ;
  70.         sum=sesgo+i1*dendritas[0].peso+i2*dendritas[1].peso;
  71.         summ=sum*10000000;
  72.         sum=summ/10000000.0;
  73.         cout<<"suma: "<<sum<<endl;
  74.  
  75.         evaluar();
  76.     }
  77.  
  78.     void peso(){
  79.         cout<<"peso= "<<dendritas[0].peso;
  80.     }
  81. };
  82.  
  83. int main()
  84. {
  85.     int x,i1,i2;
  86.  
  87.     cout<<"Digite entrada 1: ";
  88.     cin>>i1;
  89.     cout<<"Digite entrada 2: ";
  90.     cin>>i2;
  91.  
  92.  
  93.     neurona prueba(i1,i2);
  94.  
  95.     prueba.instanciar();
  96.  
  97.     return 0;
  98. }