matlab仿真消息在网络平台的传播
来源:互联网 发布:网络直播内容策划表格 编辑:程序博客网 时间:2024/06/04 00:52
step1代码为网上copy的代码,其余部分原创
step1:生成无标度网络
N = 1000; m0 = 3;m = 3; %初始结点3,度3 节点数Nadjacent_matrix = sparse(m0,m0);%初始化邻接矩阵for i = 1:m0 for j = 1:m0 if j~=i%去掉自身形成的环 adjacent_matrix(i,j) = 1;%建立初始临界矩阵 end endendadjacent_matrix = sparse(adjacent_matrix);node_degree = zeros(1,m0+1);node_degree(2:m0+1) = sum(adjacent_matrix);for iter = 4:N iter total_degree = 2*m*(iter - 4)+6; cum_degree = cumsum(node_degree); choose = zeros(1,m); %选出第一个和新点相连接的定点 r1 = rand(1)*total_degree; %计算与已存在点相连的概率 for i = 1:iter-1 if(r1>=cum_degree(i))&(r1<cum_degree(i+1))%选取度大的点 choose(1) = i; break end end %选出第二个和新点相连接的顶点 r2 = rand(1)*total_degree; for i = 1:iter-1 if(r2>=cum_degree(i))&(r2<cum_degree(i+1)) choose(2) = i; break end end while choose(2) == choose(1) r2 = rand(1)*total_degree; for i = 1:iter-1 if(r2>=cum_degree(i))&(r2<cum_degree(i+1)) choose(2) = i; break end end end %选出第三个和新点相连接的顶点 r3 = rand(1)*total_degree; for i = 1:iter-1 if(r3>=cum_degree(i))&(r3<cum_degree(i+1)) choose(3) = i; break end end while (choose(3) == choose(1)|choose(3) == choose(2)) r3 = rand(1)*total_degree; for i = 1:iter-1 if(r3>=cum_degree(i))&(r3<cum_degree(i+1)) choose(3) = i; break end end end %把新点加入网络后,对邻接矩阵进行相应的改变! for k = 1:m adjacent_matrix(iter,choose(k))=1; adjacent_matrix(choose(k),iter)=1; end node_degree = zeros(1,iter+1); node_degree(2:iter+1) = sum(adjacent_matrix);endsave data adjacent_matrix
step2:理想模型
%所有人接受消息%最初的模型,概率不变,人群相同adj =adjacent_matrix;%邻接矩阵num = size(adj);num = num(1);N = 17;%循环次数beta = 0.2; %未知者变为传播者概率alpha = 0.1;%传播者变为超级传播者delta = 0.3;%超级传播者接受消息变为免疫者gamma = 0.3;%传播者变为免疫者I = zeros(num,1); %未知者 0 传播者 1 超级传播者 2 免疫者 -1im = zeros(N,1); im(1) = num;s = zeros(N,1);s(1) = 0;jm = zeros(N,1);jm(1) = 0;r = zeros(N,1);r(1) = 0;%信息发布者为超级传播者for i = 2:1:N for j = 1:num if (rand(1) < beta)&&(I(j) == 0)%未知者变为传播者 I(j) = 1; end end for j =1:num if (rand(1) < alpha)&&(I(j) == 1)%传播者变为超级传播者 I(j) = 2; end end for j = 1:num for k = 1:num if j~=k if(I(j) == 1)&&((adj(j,k)==1)&&(I(k) ~= 0))&&(rand(1)<gamma)%传播者变为免疫者 I(j) = -1; end if(I(j) == 2)&&(((adj(j,k) == 1)&&adj(k) == 1)||(jm(i-1)>0))&&(rand(1)<delta)%超级传播者变为免疫者 I(j) = -1; end end end end im(i) = sum(I == 0);s(i) = sum(I == 1);jm(i) = sum(I == 2);r(i) = sum(I == -1);endhold ontitle('ISJR模型')xlabel('T')ylabel('N')plot(1:N,im,'.-k')plot(1:N,s,'-k')plot(1:N,jm,'--k')plot(1:N,r,':k')str = {'未知者','传播者','超级传播者','免疫者'};legend(str,'location','best')
step3:考虑两消息的相互影响
T = 6;%T时刻新消息发布newstype = 1;%消息类型,1:互补促进型,0:互不相容型adj =adjacent_matrix;%邻接矩阵num = size(adj);num = num(1);M = 15;%循环次数beta0 = 0.6;%促进系数 newstype = 0 时有效Q1 = num*0.8;%抑制临界人数Q2 = num*0.3;%原消息beta = 0.4; %一般者变为传播者概率alpha = 0.1;%传播者变为超级传播者delta = 0.3;%超级传播者接受消息变为免疫者gamma = 0.3;%传播者变为免疫者%新消息betan = 0.5; %一般者变为传播者概率alphan = 0.2;deltan = 0.3;gamman = 0.3;I = zeros(num,1); %未知者 0 传播者 1 超级传播者 2 免疫者 -1N = zeros(num,1); %新消息im = zeros(M,1); im(1) = num;s = zeros(M,1);s(1) = 0;jm = zeros(M,1); jm(1) = 0; r = zeros(M,1);r(1) = 0;in = zeros(M,1);in(T) = num; sn = zeros(M,1);sn(T) = 0;jn = zeros(M,1);jn(T) = 0; rn = zeros(M,1);rn(T) = 0;p = 0.1;%活跃着所占比例;q = 0.1;%固执者所占比例为(1-q),且p+q<1,即q>p;S = zeros(num,1);%状态矩阵,0:一般者,1:积极者,-1:固执者,2:其他状态for i = 1:num if rand(1)<p S(i) = 1; elseif rand(1)>q S(i) =-1; endend%生成原消息状态矩阵p1 = 0.1;%活跃着所占比例;q1 = 0.1;%固执者所占比例为(1-q),且p+q<1,即q>p;S1 = zeros(num,1);%状态矩阵,0:一般者,1:积极者,-1:固执者,2:其他状态for i = 1:num if rand(1)<p1 S1(i) = 1; elseif rand(1)>q1 S1(i) =-1; endend%生成状态矩阵beta1 = beta;beta2 = betan;for i = 2:1:M for j = 1:num if I(j) ==0;%判断未知者 if S(j)== 1%活跃着一定变为变为传播者 I(j) = 1; elseif (S(j) ==0)&&(rand(1)<beta)%一般者变为传播者 I(j) = 1; elseif (S(j)==-1)&&(rand(1)<beta1) I(j) = 1; end end end for j =1:num if (rand(1) < alpha)&&(I(j) == 1)%传播者变为超级传播者 I(j) = 2; end end for j = 1:num for k = 1:num if j~=k if(I(j) == 1)&&((adj(j,k)==1)&&(I(k) ~= 0))&&(rand(1)<gamma)%传播者变为免疫者 I(j) = -1; end if(I(j) == 2)&&(((adj(j,k) == 1)&&adj(k) == 1)||(jm(i-1)>0))&&(rand(1)<delta)%超级传播者变为免疫者 I(j) = -1; end end end end im(i) = sum(I == 0);s(i) = sum(I == 1);jm(i) = sum(I == 2);r(i) = sum(I == -1); if i>T %新消息发布 for j = 1:num if N(j) == 0 if S1(j)== 1%活跃着一定变为变为传播者 N(j) = 1; elseif (S1(j) ==0)&&(rand(1)<betan)% N(j) = 1; elseif (S1(j)==-1)&&(rand(1)<beta2)% N(j) = 1; end end end for j =1:num if (rand(1) < alphan)&&(N(j) == 1)%传播者变为超级传播者 N(j) = 2; end end for j = 1:num for k = 1:num if j~=k if(N(j) == 1)&&((adj(j,k)==1)&&(N(k) ~= 0))&&(rand(1)<gamman)%传播者变为免疫者 N(j) = -1; end if(N(j) == 2)&&(((adj(j,k) == 1)&&adj(k) == 1)||(jn(i-1)>0))&&(rand(1)<deltan)%超级传播者变为免疫者 N(j) = -1; end end end end in(i) = sum(N == 0);sn(i) = sum(N == 1);jn(i) = sum(N == 2);rn(i) = sum(N == -1); if newstype == 1%促进型 beta = (num-in(i))/num*beta0+beta;%beta0:促进系数 betan = (num-im(i))/num*beta0+betan; elseif newstype == 0;%抑制型 beta = in(i)/Q1*beta; betan = im(i)/Q2*betan; end end beta = (1-i/M)*beta; betan = (1-i/M)*betan; beta1 =(num-im(i))/num*beta; beta2 =(num-im(i))/num*betan;endfigurehold ontitle('某消息')xlabel('T')ylabel('N')plot(1:M,im,'.-k')plot(1:M,s,'-k')plot(1:M,jm,'--k')plot(1:M,r,':k')str = {'未知者','传播者','超级传播者','免疫者'};legend(str,'location','best') figurehold ontitle('新消息')xlabel('T')ylabel('N')plot(T:M,in(T:end),'.-k')plot(T:M,sn(T:end),'-k')plot(T:M,jn(T:end),'--k')plot(T:M,rn(T:end),':k')str = {'未知者','传播者','超级传播者','免疫者'};legend(str,'location','best')
step4:考虑传播方式差异
T = 6;%T时刻新消息发布newstype = 1;%消息类型,1:互补促进型,0:互不相容型adj =adjacent_matrix;%邻接矩阵num = size(adj);num = num(1);M = 15;%循环次数beta0 = 0.6;%促进系数 newstype = 0 时有效Q1 = num*0.8;%抑制临界人数Q2 = num*0.3;%原消息beta = 0.4; %一般者变为传播者概率alpha = 0.1;%传播者变为超级传播者delta = 0.3;%超级传播者接受消息变为免疫者gamma = 0.3;%传播者变为免疫者%新消息betan = 0.5; %一般者变为传播者概率alphan = 0.2;deltan = 0.3;gamman = 0.3;I = zeros(num,1); %未知者 0 传播者 1 超级传播者 2 免疫者 -1N = zeros(num,1); %新消息im = zeros(M,1); im(1) = num;s = zeros(M,1);s(1) = 0;jm = zeros(M,1); jm(1) = 0; r = zeros(M,1);r(1) = 0;in = zeros(M,1);in(T) = num; sn = zeros(M,1);sn(T) = 0;jn = zeros(M,1);jn(T) = 0; rn = zeros(M,1);rn(T) = 0;p = 0.1;%活跃着所占比例;q = 0.1;%固执者所占比例为(1-q),且p+q<1,即q>p;S = zeros(num,1);%状态矩阵,0:一般者,1:积极者,-1:固执者,2:其他状态for i = 1:num if rand(1)<p S(i) = 1; elseif rand(1)>q S(i) =-1; endend%生成原消息状态矩阵p1 = 0.1;%活跃着所占比例;q1 = 0.1;%固执者所占比例为(1-q),且p+q<1,即q>p;S1 = zeros(num,1);%状态矩阵,0:一般者,1:积极者,-1:固执者,2:其他状态for i = 1:num if rand(1)<p1 S1(i) = 1; elseif rand(1)>q1 S1(i) =-1; endend%生成状态矩阵beta1 = beta;beta2 = betan;for i = 2:1:M for j = 1:num if I(j) ==0;%判断未知者 if S(j)== 1%活跃着一定变为变为传播者 I(j) = 1; elseif (S(j) ==0)&&(rand(1)<beta)%一般者变为传播者 I(j) = 1; elseif (S(j)==-1)&&(rand(1)<beta1) I(j) = 1; end end end for j =1:num if (rand(1) < alpha)&&(I(j) == 1)%传播者变为超级传播者 I(j) = 2; end end for j = 1:num for k = 1:num if j~=k if(I(j) == 1)&&((adj(j,k)==1)&&(I(k) ~= 0))&&(rand(1)<gamma)%传播者变为免疫者 I(j) = -1; end if(I(j) == 2)&&(((adj(j,k) == 1)&&adj(k) == 1)||(jm(i-1)>0))&&(rand(1)<delta)%超级传播者变为免疫者 I(j) = -1; end end end end im(i) = sum(I == 0);s(i) = sum(I == 1);jm(i) = sum(I == 2);r(i) = sum(I == -1); if i>T %新消息发布 for j = 1:num if N(j) == 0 if S1(j)== 1%活跃着一定变为变为传播者 N(j) = 1; elseif (S1(j) ==0)&&(rand(1)<betan)% N(j) = 1; elseif (S1(j)==-1)&&(rand(1)<beta2)% N(j) = 1; end end end for j =1:num if (rand(1) < alphan)&&(N(j) == 1)%传播者变为超级传播者 N(j) = 2; end end for j = 1:num for k = 1:num if j~=k if(N(j) == 1)&&((adj(j,k)==1)&&(N(k) ~= 0))&&(rand(1)<gamman)%传播者变为免疫者 N(j) = -1; end if(N(j) == 2)&&(((adj(j,k) == 1)&&adj(k) == 1)||(jn(i-1)>0))&&(rand(1)<deltan)%超级传播者变为免疫者 N(j) = -1; end end end end in(i) = sum(N == 0);sn(i) = sum(N == 1);jn(i) = sum(N == 2);rn(i) = sum(N == -1); if newstype == 1%促进型 beta = (num-in(i))/num*beta0+beta;%beta0:促进系数 betan = (num-im(i))/num*beta0+betan; elseif newstype == 0;%抑制型 beta = in(i)/Q1*beta; betan = im(i)/Q2*betan; end end beta = (1-i/M)*beta; betan = (1-i/M)*betan; beta1 =(num-im(i))/num*beta; beta2 =(num-im(i))/num*betan;endfigurehold ontitle('某消息')xlabel('T')ylabel('N')plot(1:M,im,'.-k')plot(1:M,s,'-k')plot(1:M,jm,'--k')plot(1:M,r,':k')str = {'未知者','传播者','超级传播者','免疫者'};legend(str,'location','best') figurehold ontitle('新消息')xlabel('T')ylabel('N')plot(T:M,in(T:end),'.-k')plot(T:M,sn(T:end),'-k')plot(T:M,jn(T:end),'--k')plot(T:M,rn(T:end),':k')str = {'未知者','传播者','超级传播者','免疫者'};legend(str,'location','best')
阅读全文
1 0
- matlab仿真消息在网络平台的传播
- BP网络的MATLAB仿真一般设置
- 《改进SIR 模型在社交网络信息传播中的应用》仿真实现
- 如何去甄别一条网络传播消息的真假?
- OFDM的MATLAB仿真
- Windows平台下NS2网络仿真环境的搭建
- Windows平台下NS2网络仿真环境的搭建
- 网络仿真的研究
- 基于MATLAB的FFT仿真
- 基于MATLAB的FFT仿真
- svpwm的matlab仿真实现
- Matlab电路问题的仿真
- 电荷放大器的Matlab仿真
- MATLAB仿真图的美化
- matlab中多个质点的仿真
- robocup3d仿真平台的安装
- 消息传播
- 【消息传播】
- 初识c#---一维数组和二维数组
- spring boot集成ActiveMQ
- IOS测试IPV6
- Laravel5.4框架学习
- classpath环境变量问题——找不到或者无法加载主类或运行结果有误
- matlab仿真消息在网络平台的传播
- corejava_数组的创建和使用
- UNITY批量操作PREFAB
- 数据库优化首选方案——拆
- UNITY报错INVALID NORMALIZED COLOR
- BZOJ 2064: 分裂 状压dp
- HDU 2222 Keywords Search【AC自动机】
- CodeForces
- HDU 6070 Dirt Ratio(二分+线段树)