📄 main.m
字号:
%主程序,1000次模拟
nn=100;%参与的总人数
nc=50;%酒吧适应人数下限
ncc=80;%酒吧适应人数上限
tt=1000;%模拟总时间
u=0.5;%适应度参数
r=0.005;%概率参数
%xx=0;yy=1;%多数者
xx=1;yy=0;%少数者
deng=0;%适应度上下限,1为只含下限,0为含上下限
%初始化前10期的酒吧实际参与人数
create_a;
%时间循环
for t=11:tt
%创造总规则库
create_predictor;
if t==11
%每个个体选择自己的预测规则
create_agent_predictor;
a(t)=0;
for n=1:nn
f(n,t)=e(agent_predictor(n,ceil(6*rand())),t);%第11期每个个体随机选择自己规则库中的规则
if deng==1
if f(n,t)>nc
b(n,t)=yy;
elseif f(n,t)<nc
b(n,t)=xx;
else
b(n,t)=floor(2*rand());
end
else
if nc<f(n,t)&f(n,t)<ncc
b(n,t)=yy;
elseif f(n,t)==nc|f(n,t)==ncc
b(n,t)=floor(2*rand());
else
b(n,t)=xx;
end
end
a(t)=a(t)+b(n,t);
end
for n=1:nn
for i=1:6
% s(n,i,t)=u*s(n,i,t-1)+(1-u)*(1-abs(e(agent_predictor(n,i),t)-a(t))/nn);
s(n,i,t)=u*s(n,i,t-1)+(1-u)*abs(e(agent_predictor(n,i),t)-a(t));
end
end
else
a(t)=0;
for n=1:nn
ss=s(n,1,t-1);
for i=1:6
if s(n,i,t-1)>=ss
m(n,t)=i;
ss=s(n,i,t-1);
end
end
% for i=1:6
% p(n,i,t)=exp(r*s(n,i,t-1))/(exp(r*s(n,1,t-1))+exp(r*s(n,2,t-1))+exp(r*s(n,3,t-1))+exp(r*s(n,4,t-1))+exp(r*s(n,5,t-1))+exp(r*s(n,6,t-1)));
% end
% c(n,t)=rand();
% if c(n,t)<p(n,1,t)
% m(n,t)=1;
% elseif c(n,t)<p(n,1,t)+p(n,2,t)
% m(n,t)=2;
% elseif c(n,t)<p(n,1,t)+p(n,2,t)+p(n,3,t)
% m(n,t)=3;
% elseif c(n,t)<p(n,1,t)+p(n,2,t)+p(n,3,t)+p(n,4,t)
% m(n,t)=4;
% elseif c(n,t)<p(n,1,t)+p(n,2,t)+p(n,3,t)+p(n,4,t)+p(n,5,t)
% m(n,t)=5;
% else
% m(n,t)=6;
% end
f(n,t)=e(agent_predictor(n,m(n,t)),t);
if deng==1
if f(n,t)>nc
b(n,t)=yy;
elseif f(n,t)<nc
b(n,t)=xx;
else
b(n,t)=floor(2*rand());
end
elseif deng==0
if nc<f(n,t)&f(n,t)<ncc
b(n,t)=yy;
elseif f(n,t)==nc|f(n,t)==ncc
b(n,t)=floor(2*rand());
else
b(n,t)=xx;
end
end
a(t)=a(t)+b(n,t);
end
for n=1:nn
for i=1:6
% s(n,i,t)=u*s(n,i,t-1)+(1-u)*(1-abs(e(agent_predictor(n,i),t)-a(t))/nn);
s(n,i,t)=u*s(n,i,t-1)+(1-u)*abs(e(agent_predictor(n,i),t)-a(t));
end
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -