?? jerne.c
字號:
#include<stdio.h>
#include<stdlib.h>
#define MAX_TIME 9 //每個階段最長處理時間
#define NET_SIZE 10 //免疫網絡規模,抗體個數。
#define NET_SIZE 5+1//抗體種類個數
#define T_VALUE 0.50 //抗體密度的閾值
//循環隊列
#define QS NET_SIZE+1
struct q{
double queue[QS];
int tail,head,size;
};
void init_q(void)
{
q.tail =0;
q.head =0;
q.size=0;
}
void push(double elem)
{
if((q.tail+1)%QS<q.head)
{
q.queue[(q.tail)%QS]=elem;
q.tail = (q.tail++)%QS;
q.size++;
}else{
printf("隊列已滿\n");
exit(1);
}
}
double pop(void)
{
if(q.tail !=q.head)
{
q.size--;
return q.queue[q.head=(q.head++%QS)];
}else{
printf("隊列已空\n");
exit(1);
}
}
struct antibody{
int para;//抗體對位
int epit;//抗體決定簇
}*ab;
struct antibody node_ab[NET_SIZE];
double node_density[2][NET_SIZE];//抗體t和(t+1)時刻的濃度
double net[NET_SIZE][NET_SIZE];//抗體間的親和度
int m[NET_SIZE];//抗原對抗體i的刺激
double k[NET_SIZE];//抗體i的自然消亡系數
double A[NET_SIZE];//計算濃度的中間變量
//初始化網絡狀態,胡亂想的。
void initializtion(void)
{
int i=0,j=0;
for(;i<2;i++)
{
m[i]=k[i]=A[i] = 0;
for(j=0;j<NET_SIZE;j++)
node_density[i][j]=(random()%NET_SIZE)/NET_SIZE;
}
for(i=0;i<NET_SIZE;i++)
for(j=0;j<NET_SIZE;j++)
net[i][j]=(random()%NET_SIZE)/NET_SIZE;
for(i=0;i<NET_SIZE;i++)
{
srandom(i);
node_ab[i].para=random()%NET_SIZE;
srandom(i+10)
node_ab[i].epit=random()%NET_SIZE;
}
return;
}
return delta_t(void)
{
return random()%MAX_TIME;
}
void recognize(int antigen)
{
int i=0;
for(;i<NET_SIZE;i++)
if(node_ab[i].para == antigen)
{
m[i]=1;
A[i]=(m[i]-k[i])*node_density[0][i]*delta_t() +A[i]);
node_density[0][i]=1/( 1+exp(0.5-(A[i]));
}
}
action(){}
void main(void)
{
initialization();
int antigen,i,j;
int nr_ab=NET_SIZE;
double t1=t2=0.0;
printf("請輸入抗原(0 - %d)\n",nr_ab-1);
scanf("%d",&antigen);
getchar();
while(antigen<0&&antigen>=NET_SIZE);//沒有抗原入侵.
while(antigen>=0&&antigen<NET_SIZE || (為滿足條件))
//有抗原入侵 或 終結條件不滿足
{
recognize(antigen);
for(i=0;i<NET_SIZE;i++)
{
for(j=0;j<NET_SIZE;j++)
{
t1=net[j][i]*node_density[0][j];
t2=net[i][j]*node_density[0][j];
}
A[i] += (delta_t()*(t1-t2)*node_density[0][j]);
node_density[1][i]=1/( 1+exp(0.5-A[i]));
if(node_density[1][i]>T_VALUE)
{
init_q();
push(node_density[1][i]);
}
}
//輪盤賭
void action(){}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -