Résultats de 1 à 7 sur 7

Sujet : Mauvaise modif des abscisses ordonnées

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    5
    Salut tlm,

    J\'ai écrit un algo gén en C++/windows (laborieusement, je découvre ce langage...), et il fonctionne mais il doit y avoir un (gros) pb lors des modifications des abscisses/ordonnées des individus que je fais évoluer à l\'écran.

    Voilà le squelette de l\'algorithme, puis le programme entier pour les courageux qui seraient parvenus à ce stade du post :

    #include, #define ...etc.
    variables globales pabs[N], pord[N], idem avec un \"P\" à la place de \"p\", indiquant les positions des bestioles sur l\'écran + qqes vecteurs, matrices

    déclaration de Winproc + 2 fonctions.

    WinMain,
    Winproc
    boucle, boucle
    (...) case WM_PAINT (affichage des positions + appel des fonctions)
    fin de première boucle

    instructions diverses pour modifier pabs, pord (à mon avis c là que ça pêche :-/)
    fin de seconde boucle

    qqes fonctions qui ont été déclarées au début.
    Et voilou!!

    Si quelqu\'un pense pouvoir m\'aider, je lui envoie mon prog complet par mail (trop long pour être mis ici, mais c\'est sérieux c pr mon TIPE et y\'a plus bcp de temps...)

    Merci d\'avance!!
    Benjamin.

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    5
    J\'ai oublié de préciser que le programme tourne, mais pas du tout comme je m\'y attendais: les individus n\'évoluent quasimment pas sur le plateau, d\'où mon message :-)

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    329

    Mauvaise modif des abscisses ordonnées

    Es-tu sûr d\'actualiser correctement l\'affichage ? Sinon, postes ton code ici, cela te permettra d\'obtenir de l\'aide de la part d\'un maximum de monde.

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    5
    Voici ma boucle que je lance à chaque début de boucle while:

    for (i=0; i<N; i++)
    {hBrush = CreateSolidBrush (RGB (50, 200, 100)) ;

    hdc = GetDC (hwnd) ;

    SetRect (&rect, pabs[i]+4, pord[i]+4,
    pabs[i], pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;

    hBrush = CreateSolidBrush (RGB (0, 100, 200)) ;
    hdc = GetDC (hwnd) ;

    SetRect (&rect, Pabs[i]+4, Pord[i]+4,
    Pabs[i], Pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;

    Sleep(100); // on passe à l\'effacage

    hBrush = CreateSolidBrush (RGB (255, 255, 255)) ;
    hdc = GetDC (hwnd) ;

    SetRect (&rect, pabs[i]+4, pord[i]+4,
    pabs[i], pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    SetRect (&rect, Pabs[i]+4, Pord[i]+4,
    Pabs[i], Pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;}

    Et si le pb est pas là je poste la suite dans qqes minutes, mais c long :-/

    @+,
    Ben.

  5. #5
    Membre MP
    Inscrit
    août 2013
    Messages
    5
    Vala, g viré qqes commentaires pour alléger, mais ça reste bien lourd, hélas!

    Code:
    #include <windows.h>
    #include <math.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    #define C 600 
    #define N 10 // nombre de proies/pred
    #define K 20 // nombre de gènes par chromosome représentant d\'un individu
    typedef double real;
    
    // variables globales: (est-ce une bonne idée d\'en mettre autant en global? 
    // Comment faire pour passer pord, pabs...etc sinon? )
    real E[C][C]; 
    int pabs[N],pord[N],Pabs[N],Pord[N];
    int w,Nmax=10,maxi=10;
    real fitness[N],fitpred[N];
    real V[N][K],V_[N][K];
    
    // déclaration de fonctions:
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    void proie(void);
    void pred(void);
    
    // Vaut-il mieux mettre Winmain avant ou après Winproc? Ca change qqch?
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT (\"TIPE\") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
    
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
              
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT (\"Program requires Windows NT!\"), 
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName, TEXT (\"Evolution Proie-Predateur\"),
                              WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
    
         ShowWindow (hwnd, SW_SHOWMAXIMIZED) ;
         UpdateWindow (hwnd) ;
    
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC         hdc ;
         int         i,j,k,y=0,z=0;
         PAINTSTRUCT ps ;
    
         HBRUSH hBrush ;
         RECT   rect ;
    
         for (i=0; i<C; i++) 
         for (j=0; j<C; j++)
         E[i][j]=rand()%(10)+1; 
         // initialisation des vecteurs d\'état:
    for (i=0; i<N; i++)
    for (j=0; j<K; j++) 
      {V[i][j]=(rand()%(10)+1)/(rand()%(10)+1); 
      V_[i][j]=(rand()%(10)+1)/(rand()%(10)+1);}
    for (i=0; i<N; i++) {pabs[i]=60*i; pord[i]=rand  ()%(600);
      Pabs[i]=rand()%(600); Pord[i]=60*i;}
      for (i=0; i<N; i++) {fitness[i]=0; fitpred[i]=40;}
    
         switch (message)
         {
         case WM_PAINT:
         {hdc = BeginPaint (hwnd, &ps) ;
             
    while (z<=Nmax)
    {
    while (y<=maxi)
    {
    	for (i=0; i<N; i++)
         {hBrush = CreateSolidBrush (RGB (50, 200, 100)) ; 
         hdc = GetDC (hwnd) ;
         
         SetRect (&rect, pabs[i]+4, pord[i]+4, 
                         pabs[i], pord[i]) ; 
         FillRect (hdc, &rect, hBrush) ; 
    
         ReleaseDC (hwnd, hdc) ;
         DeleteObject (hBrush) ;
     
         hBrush = CreateSolidBrush (RGB (0, 100, 200)) ; 
         hdc = GetDC (hwnd) ;
         
         SetRect (&rect, Pabs[i]+4, Pord[i]+4,
                         Pabs[i], Pord[i]) ;
         FillRect (hdc, &rect, hBrush) ;
        
         ReleaseDC (hwnd, hdc) ;
         DeleteObject (hBrush) ;
    	 
         Sleep(100); // on efface ensuite :-)
        
         hBrush = CreateSolidBrush (RGB (255, 255, 255)) ; 
         hdc = GetDC (hwnd) ;
    	 
         SetRect (&rect, pabs[i]+4, pord[i]+4, 
                         pabs[i], pord[i]) ;  
         FillRect (hdc, &rect, hBrush) ; 
    
         SetRect (&rect, Pabs[i]+4, Pord[i]+4,
                         Pabs[i], Pord[i]) ;
         FillRect (hdc, &rect, hBrush) ;
        
         ReleaseDC (hwnd, hdc) ;
         DeleteObject (hBrush) ;}
    proie();
    pred();
    
    //calcul de l\'adaptation:
    for (i=0; i<N; i++)
    for (j=0; j<N; j++) 
    {if (Pord[j]==pord[i] && Pabs[j]==pabs[i]) {fitness[i]+=0.1; fitpred[j]-=fitpred[j]/2;}}
    
    y+=1;}
    
    /**** à la fin d\'une génération: ****/
    /**** sélection proie: ****/
    
    {real r=0,u;
    int t=0,a,b;
    real proba[N]; // vecteur de probabilité de sélection
    for (i=0; i<N; i++)
    {for (j=0; j<N; j++) r+=(1/(1+fitness[j]*fitness[j]));
    proba[i]=(1/(1+fitness[i]*fitness[i]))/r;}  }
    
    {real cons[N]={0}; // vecteur des individus à conserver
    for (i=0; i<N; i++) 
    {a=rand()%((int)(1/proba[i]))+1;
    if (a<=1) cons[i]=1;}  }
    
    {i=0; 
    do
    {while (cons[i]==1 && i<N) {i+=1; t+=1;}
    j=i;
    while (j<N && cons[j]==0) j+=1;
    {if (j!=N) // échange
    {for (k=0; k<K; k++) {u=V[j][k]; V[j][k]=V[i][k]; V[i][k]=u;}
    t+=1; i+=1;} }}
    while (i<N);  } // t donne le nb de bestioles à garder
    
    //croisement 
    {real U[N][K]={0}; 
    for (i=t; i<N; i++)
    {a=rand()%(N-t)+t; 
    u=10/(rand()%(100)+10);
    for (k=0; k<K; k++) U[i][k]=(1-u)*V[i][k]+u*V[a][k];}
    for (i=t; i<N; i++)  
    for (j=0; j<K; j++)
    V[i][j]=U[i][j];  }
    
    //mutation
    {a=rand()%(50); // proba de 1/50 pr une mutation
    if (a==5) 
    {b=rand()%(N);
    for (i=0; i<K; i++) V[b][k]=1/V[b][k];}  }
    
    /**** sélection predateur: ****/
    
    {r=0;t=0;
    real Proba[N];
    for (i=0; i<N; i++)
    {{for (j=0; j<N; j++) r+=1/(fitpred[j]+1);}
    Proba[i]=(1/(fitpred[i]+1))/r;}  }
    
    {real Cons[N]={0}; 
    for (i=0; i<N; i++) 
    {a=rand()%((int)(1/(Proba[i]+0.000000001)))+1;
    if (a<=2) Cons[i]=1;}  }
    
    {i=0; 
    do
    {while (Cons[i]==1 && i<N) {i+=1; t+=1;}
    j=i;
    while (j<N && Cons[j]==0) j+=1;
    {if (j!=N) 
    {for (k=0; k<K; k++) {u=V_[j][k]; V_[j][k]=V_[i][k]; V_[i][k]=u;}
    t+=1; i+=1;} }}
    while (i<N);  } 
    
    //croisement 
    {real U_[N][K]; 
    for (i=t; i<N; i++)
    {a=rand()%(N-t)+t; 
    u=10/(rand()%(100)+10);
    for (k=0; k<K; k++) U_[i][k]=(1-u)*V_[i][k]+u*V_[a][k];}
    for (i=t; i<N; i++) 
    for (j=0; j<K; j++)
    V_[i][j]=U_[i][j];  }
    
    //mutation
    {a=rand()%(50); 
    if (a==5) 
    {b=rand()%(N);
    for (i=0; i<K; i++) V_[b][k]=1/V_[b][k];}  }
    
    Sleep(1000); 
    z+=1;}
    
    return 0 ;}
              
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    
    void proie(void) 
    { 
    real S[N][4]={0}; 
    int h=(int)(K/4); 
    int seuil=(int)(C/4); 
    int i,j,a,b;
    
    for (i=0; i<N; i++)
    {{a=pabs[i]; b=pord[i];
      j=0;
      while (a<=C && a-pabs[i]<=seuil)
      {S[i][0]+=V[i][j]*E[a][b]; // permet une certaine influence de l\'\"environnement\"
       a+=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
      j=h;
      while (b<=C && b-pord[i]<=seuil)
      {S[i][1]+=V[i][j]*E[a][b];
       b+=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
      j=2*h;
      while (a>=0 && pabs[i]-a<=seuil)
      {S[i][2]+=V[i][j]*E[a][b];
       a-=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
      j=3*h;
      while (b>=0 && pord[i]-b<=seuil)
      {S[i][3]+=V[i][j]*E[a][b];
       b-=1; j+=1;}
    }}
    for (i=0; i<N; i++)
    {if (S[i][0]>S[i][1] && S[i][0]>S[i][2] && S[i][0]>S[i][3]) pabs[i]+=1;
    else if (S[i][1]>S[i][0] && S[i][1]>S[i][2] && S[i][1]>S[i][3]) pord[i]+=1;
    else if (S[i][2]>S[i][0] && S[i][2]>S[i][1] && S[i][2]>S[i][3]) pabs[i]-=1;
    else if (S[i][3]>S[i][0] && S[i][3]>S[i][1] && S[i][3]>S[i][2]) pord[i]-=1; 
    else {j=rand()%(4); if (j==0) pabs[i]=1; 
    					else if (j==1) pabs[i]-=1;
    					else if (j==2) pord[i]+=1;
    					else pord[i]-=1;}}
    return;
    }
    
    void pred(void) 
    { 
    real S[N][4]={0}; 
    int h=(int)(K/4); 
    int seuil=(int)(C/4); 
    int i,j,a,b;
    
    for (i=0; i<N; i++) // choix de la direction à prendre
    {{a=Pabs[i]; b=Pord[i];
      j=0;
      while (a<=C && a-Pabs[i]<=seuil)
      {S[i][0]+=V_[i][j]*E[a][b]; 
       a+=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
      j=h;
      while (b<=C && b-Pord[i]<=seuil)
      {S[i][1]+=V_[i][j]*E[a][b];
       b+=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
      j=2*h;
      while (a>=0 && Pabs[i]-a<=seuil)
      {S[i][2]+=V_[i][j]*E[a][b];
       a-=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
      j=3*h;
      while (b>=0 && Pord[i]-b<=seuil)
      {S[i][3]+=V_[i][j]*E[a][b];
       b-=1; j+=1;}
    }}
    for (i=0; i<N; i++)
    {if (S[i][0]>S[i][1] && S[i][0]>S[i][2] && S[i][0]>S[i][3]) Pabs[i]+=1;
    else if (S[i][1]>S[i][0] && S[i][1]>S[i][2] && S[i][1]>S[i][3]) Pord[i]+=1;
    else if (S[i][2]>S[i][0] && S[i][2]>S[i][1] && S[i][2]>S[i][3]) Pabs[i]-=1;
    else if (S[i][3]>S[i][0] && S[i][3]>S[i][1] && S[i][3]>S[i][2]) Pord[i]-=1;
    else {j=rand()%(4); if (j==0) Pabs[i]=1; 
    					else if (j==1) Pabs[i]-=1;
    					else if (j==2) Pord[i]+=1;
    					else Pord[i]-=1;}}
    return;
    }
    Merci d\'avance ;-)
    Ben.

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    5
    Je ne comprend pas pkoi la fin est en gras; je le renvoie en non codé, ça me semble plus lisible:

    #include <windows.h>
    #include <math.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;

    #define C 600
    #define N 10 // nombre de proies/pred
    #define K 20 // nombre de gènes par chromosome représentant d\'un individu
    typedef double real;

    // variables globales: (est-ce une bonne idée d\'en mettre autant en global?
    // Comment faire pour passer pord, pabs...etc sinon? )
    real E[C][C];
    int pabs[N],pord[N],Pabs[N],Pord[N];
    int w,Nmax=10,maxi=10;
    real fitness[N],fitpred[N];
    real V[N][K],V_[N][K];

    // déclaration de fonctions:
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    void proie(void);
    void pred(void);

    // Vaut-il mieux mettre Winmain avant ou après Winproc? Ca change qqch?
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
    {
    static TCHAR szAppName[] = TEXT (\"TIPE\") ;
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass ;

    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
    MessageBox (NULL, TEXT (\"Program requires Windows NT!\"),
    szAppName, MB_ICONERROR) ;
    return 0 ;
    }

    hwnd = CreateWindow (szAppName, TEXT (\"Evolution Proie-Predateur\"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL) ;

    ShowWindow (hwnd, SW_SHOWMAXIMIZED) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
    return msg.wParam ;
    }

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc ;
    int i,j,k,y=0,z=0;
    PAINTSTRUCT ps ;

    HBRUSH hBrush ;
    RECT rect ;

    for (i=0; i<C; i++)
    for (j=0; j<C; j++)
    E[i][j]=rand()%(10)+1;
    // initialisation des vecteurs d\'état:
    for (i=0; i<N; i++)
    for (j=0; j<K; j++)
    {V[i][j]=(rand()%(10)+1)/(rand()%(10)+1);
    V_[i][j]=(rand()%(10)+1)/(rand()%(10)+1);}
    for (i=0; i<N; i++) {pabs[i]=60*i; pord[i]=rand ()%(600);
    Pabs[i]=rand()%(600); Pord[i]=60*i;}
    for (i=0; i<N; i++) {fitness[i]=0; fitpred[i]=40;}

    switch (message)
    {
    case WM_PAINT:
    {hdc = BeginPaint (hwnd, &ps) ;

    while (z<=Nmax)
    {
    while (y<=maxi)
    {
    for (i=0; i<N; i++)
    {hBrush = CreateSolidBrush (RGB (50, 200, 100)) ;
    hdc = GetDC (hwnd) ;

    SetRect (&rect, pabs[i]+4, pord[i]+4,
    pabs[i], pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;

    hBrush = CreateSolidBrush (RGB (0, 100, 200)) ;
    hdc = GetDC (hwnd) ;

    SetRect (&rect, Pabs[i]+4, Pord[i]+4,
    Pabs[i], Pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;

    Sleep(100); // on efface ensuite :-)

    hBrush = CreateSolidBrush (RGB (255, 255, 255)) ;
    hdc = GetDC (hwnd) ;

    SetRect (&rect, pabs[i]+4, pord[i]+4,
    pabs[i], pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    SetRect (&rect, Pabs[i]+4, Pord[i]+4,
    Pabs[i], Pord[i]) ;
    FillRect (hdc, &rect, hBrush) ;

    ReleaseDC (hwnd, hdc) ;
    DeleteObject (hBrush) ;}
    proie();
    pred();

    //calcul de l\'adaptation:
    for (i=0; i<N; i++)
    for (j=0; j<N; j++)
    {if (Pord[j]==pord[i] && Pabs[j]==pabs[i]) {fitness[i]+=0.1; fitpred[j]-=fitpred[j]/2;}}

    y+=1;}

    /**** à la fin d\'une génération: ****/
    /**** sélection proie: ****/

    {real r=0,u;
    int t=0,a,b;
    real proba[N]; // vecteur de probabilité de sélection
    for (i=0; i<N; i++)
    {for (j=0; j<N; j++) r+=(1/(1+fitness[j]*fitness[j]));
    proba[i]=(1/(1+fitness[i]*fitness[i]))/r;} }

    {real cons[N]={0}; // vecteur des individus à conserver
    for (i=0; i<N; i++)
    {a=rand()%((int)(1/proba[i]))+1;
    if (a<=1) cons[i]=1;} }

    {i=0;
    do
    {while (cons[i]==1 && i<N) {i+=1; t+=1;}
    j=i;
    while (j<N && cons[j]==0) j+=1;
    {if (j!=N) // échange
    {for (k=0; k<K; k++) {u=V[j][k]; V[j][k]=V[i][k]; V[i][k]=u;}
    t+=1; i+=1;} }}
    while (i<N); } // t donne le nb de bestioles à garder

    //croisement
    {real U[N][K]={0};
    for (i=t; i<N; i++)
    {a=rand()%(N-t)+t;
    u=10/(rand()%(100)+10);
    for (k=0; k<K; k++) U[i][k]=(1-u)*V[i][k]+u*V[a][k];}
    for (i=t; i<N; i++)
    for (j=0; j<K; j++)
    V[i][j]=U[i][j]; }

    //mutation
    {a=rand()%(50); // proba de 1/50 pr une mutation
    if (a==5)
    {b=rand()%(N);
    for (i=0; i<K; i++) V[b][k]=1/V[b][k];} }

    /**** sélection predateur: ****/

    {r=0;t=0;
    real Proba[N];
    for (i=0; i<N; i++)
    {{for (j=0; j<N; j++) r+=1/(fitpred[j]+1);}
    Proba[i]=(1/(fitpred[i]+1))/r;} }

    {real Cons[N]={0};
    for (i=0; i<N; i++)
    {a=rand()%((int)(1/(Proba[i]+0.000000001)))+1;
    if (a<=2) Cons[i]=1;} }

    {i=0;
    do
    {while (Cons[i]==1 && i<N) {i+=1; t+=1;}
    j=i;
    while (j<N && Cons[j]==0) j+=1;
    {if (j!=N)
    {for (k=0; k<K; k++) {u=V_[j][k]; V_[j][k]=V_[i][k]; V_[i][k]=u;}
    t+=1; i+=1;} }}
    while (i<N); }

    //croisement
    {real U_[N][K];
    for (i=t; i<N; i++)
    {a=rand()%(N-t)+t;
    u=10/(rand()%(100)+10);
    for (k=0; k<K; k++) U_[i][k]=(1-u)*V_[i][k]+u*V_[a][k];}
    for (i=t; i<N; i++)
    for (j=0; j<K; j++)
    V_[i][j]=U_[i][j]; }

    //mutation
    {a=rand()%(50);
    if (a==5)
    {b=rand()%(N);
    for (i=0; i<K; i++) V_[b][k]=1/V_[b][k];} }

    Sleep(1000);
    z+=1;}

    return 0 ;}

    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
    }

    void proie(void)
    {
    real S[N][4]={0};
    int h=(int)(K/4);
    int seuil=(int)(C/4);
    int i,j,a,b;

    for (i=0; i<N; i++)
    {{a=pabs[i]; b=pord[i];
    j=0;
    while (a<=C && a-pabs[i]<=seuil)
    {S[i][0]+=V[i][j]*E[a][b]; // permet une certaine influence de l\'\"environnement\"
    a+=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
    j=h;
    while (b<=C && b-pord[i]<=seuil)
    {S[i][1]+=V[i][j]*E[a][b];
    b+=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
    j=2*h;
    while (a>=0 && pabs[i]-a<=seuil)
    {S[i][2]+=V[i][j]*E[a][b];
    a-=1; j+=1;}
    }
    {a=pabs[i]; b=pord[i];
    j=3*h;
    while (b>=0 && pord[i]-b<=seuil)
    {S[i][3]+=V[i][j]*E[a][b];
    b-=1; j+=1;}
    }}
    for (i=0; i<N; i++)
    {if (S[i][0]>S[i][1] && S[i][0]>S[i][2] && S[i][0]>S[i][3]) pabs[i]+=1;
    else if (S[i][1]>S[i][0] && S[i][1]>S[i][2] && S[i][1]>S[i][3]) pord[i]+=1;
    else if (S[i][2]>S[i][0] && S[i][2]>S[i][1] && S[i][2]>S[i][3]) pabs[i]-=1;
    else if (S[i][3]>S[i][0] && S[i][3]>S[i][1] && S[i][3]>S[i][2]) pord[i]-=1;
    else {j=rand()%(4); if (j==0) pabs[i]=1;
    else if (j==1) pabs[i]-=1;
    else if (j==2) pord[i]+=1;
    else pord[i]-=1;}}
    return;
    }

    void pred(void)
    {
    real S[N][4]={0};
    int h=(int)(K/4);
    int seuil=(int)(C/4);
    int i,j,a,b;

    for (i=0; i<N; i++) // choix de la direction à prendre
    {{a=Pabs[i]; b=Pord[i];
    j=0;
    while (a<=C && a-Pabs[i]<=seuil)
    {S[i][0]+=V_[i][j]*E[a][b];
    a+=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
    j=h;
    while (b<=C && b-Pord[i]<=seuil)
    {S[i][1]+=V_[i][j]*E[a][b];
    b+=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
    j=2*h;
    while (a>=0 && Pabs[i]-a<=seuil)
    {S[i][2]+=V_[i][j]*E[a][b];
    a-=1; j+=1;}
    }
    {a=Pabs[i]; b=Pord[i];
    j=3*h;
    while (b>=0 && Pord[i]-b<=seuil)
    {S[i][3]+=V_[i][j]*E[a][b];
    b-=1; j+=1;}
    }}
    for (i=0; i<N; i++)
    {if (S[i][0]>S[i][1] && S[i][0]>S[i][2] && S[i][0]>S[i][3]) Pabs[i]+=1;
    else if (S[i][1]>S[i][0] && S[i][1]>S[i][2] && S[i][1]>S[i][3]) Pord[i]+=1;
    else if (S[i][2]>S[i][0] && S[i][2]>S[i][1] && S[i][2]>S[i][3]) Pabs[i]-=1;
    else if (S[i][3]>S[i][0] && S[i][3]>S[i][1] && S[i][3]>S[i][2]) Pord[i]-=1;
    else {j=rand()%(4); if (j==0) Pabs[i]=1;
    else if (j==1) Pabs[i]-=1;
    else if (j==2) Pord[i]+=1;
    else Pord[i]-=1;}}
    return;
    }

  7. #7
    Oh olivier pourquoi tu t\'es rapproché si prés de la riviére

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé