|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Scopo del programma
Questo "codice genetico" (non a caso ho parlato di mutazione e delezione) genera 16 variabili float che regolano la costituzione di un "bestio". Quindi voglio implementare un classico algoritmo genetico. EDIT: ecco, questo è codice per leggere un float dalla sequenza di bools: Codice:
//legge una cifra dalla sequenza
float read( unsigned int index )
{
float f = 0;
index *= 32;
for(unsigned int i = 0; i < 32; i++)
{
//la sequenza di bools sta in bases.
if( bases[index+i] )
f |= (1 << i);
else
f |= (0 << i);
}
return f;
}
Mi manca quello per settare però... ma posso farne a meno, tanto i valori da settare sono random. Ultima modifica di Tommo : 27-06-2008 alle 20:54. |
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
bases è un array di bool che ti puppa 1 byte per ogni bit, non so se conviene... dipende dalla dimensione massima di una stringa e da quante stringhe si possono avere contemporaneamente. l'operatore "|" funziona solo su tipi che rappresentano valori in notazione posizionale, quindi non sui float. non capisco proprio a cosa ti serva il float.
io trovo più semplice ragionare a oggetti, visto che usi il c++ potresti farti una classe tipo: Codice:
const int DIM = 16;
class bits
{
int b[DIM];
public:
bits(){for(int i=0;i<DIM;i++) b[i]=0;}
bool get(int i) {return b[i/32] & 1<<i%32;}
void set(bool a, int i) {
if (a) b[i/32] |= 1<<i%32;
else b[i/32] &= ~(1<<i%32);
}
void erase(int i) {
int n=i/32, d=i%32;
b[n] = b[n+1]<<31 | ~(1<<31) & b[n]>>1 & -1<<d | b[n] & ~(-1<<d);
while (++n<DIM-1) b[n]= b[n+1]<<31 | ~(1<<31) & b[n]>>1;
}
};
Ultima modifica di Furla : 28-06-2008 alle 09:18. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:38.



















