📄 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 + -