Strona zawiera kody zrodlowe funkcji obliczajacych dopasowanie ciagow binarnych.
Funkcje te, zostaly zbadane w pracy magisterskiej autorstwa Michala Jankowiaka, pt "Analiza wlasciwosci miar dopasowania w zastosowaniu do sztucznego systemu immunologicnego, bazujacego na modelu sieci idiotypowej"
Prace zlozono 20-go wrzesnia 2004 roku.
Analizowane miary:
#define tope_length 8
#define s 2
int Compute_FPP(string Ab1, string Ab2)
{
int sum=0, sub_sum=0;
unsigned int a=0;
unsigned int b=0;
// Compute matching
for(int k=-(tope_length-s); k<=(tope_length-s); k++)
{
if(k<0)
{
for(int n=abs(k); n<tope_length; n++)
{
char aa[2];
aa[0] = Ab2.at(n+k);
aa[1] = NULL;
char bb[2];
bb[0] = Ab1.at(n);
bb[1] = NULL;
sub_sum += abs(atoi(aa)-atoi(bb));
}
}
else
{
for(int n=0; n<(tope_length-k); n++)
{
char aa[2];
aa[0] = Ab2.at(n+k);
aa[1] = NULL;
char bb[2];
bb[0] = Ab1.at(n);
bb[1] = NULL;
sub_sum += abs(atoi(aa)-atoi(bb));
}
}
sub_sum -= s;
sub_sum++;
if(sub_sum>0)
{
sum += sub_sum;
}
sub_sum = 0;
}
return sum;
}
int Compute_Hamming(string Ab1, string Ab2)
{
int sum=0;
for(int k=0; k<tope_length; k++)
{
if(Ab1[k]!=Ab2[k])
{
sum++;
}
}
return sum;
}
int Compute_r_bites_rule(string Ab1, string Ab2)
{
int sum=0, max_sum=0;
unsigned int a=0;
for(int k=0; k<tope_length; k++)
{
if(Ab1[k]!=Ab2[k])
{
sum++;
if(sum>max_sum)
{
max_sum=sum;
}
}
else
{
sum = 0;
}
}
return sum;
}
int Compute_multiple_r_bites_rule(string Ab1, string Ab2)
{
int Hamming_sum = 0, sum=0, Total_sum = 0;
unsigned int a=0;
for(int k=0; k<tope_length; k++)
{
if(Ab1[k]!=Ab2[k])
{
Hamming_sum++;
sum++;
}
else
{
if(sum>=2)
{
Total_sum += (int)pow(2, sum);
}
sum = 0;
}
}
return Total_sum+Hamming_sum;
}
double Compute_Rogers_Tanimoto(string Ab1, string Ab2)
{
int a=0;
int b=0;
int c=0;
int d=0;
for(int k=0; k<tope_length; k++)
{
if((Ab1[k])=='1'&&(Ab2[k])=='1')
{
a++;
}
else if((Ab1[k])=='1'&&((Ab2[k])=='0'))
{
b++;
}
else if((Ab1[k])=='0'&&((Ab2[k])=='1'))
{
c++;
}
else if((Ab1[k])=='0'&&((Ab2[k])=='0'))
{
d++;
}
}
return ((a+d)/(a+d+2*(b+c)));
}
Pomysl na nowa miare MJ:
Porownywany ciag bitow, traktuje sie jako osobnika w cztero-wymiarowej przestrzeni.
Zakladamy, ze osobnik jest dlugosci osmiu bitow. Kazda, kolejna pare bitow, traktujemy jako kolejna wspolrzedna w przestrzeni.
Dziesietne wartosci tak przetransformowanych wspolrzednych (moga one przyjmowac trzy wartosci: 0, 1 i 2), podstawiamy do rownania: