⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.m

📁 酒吧模型MATLAB实现,实现了酒吧模型中参与人数的波动变化
💻 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 + -