微信红包模拟
目錄
一、實(shí)驗(yàn)?zāi)康?/span>
1.學(xué)習(xí)并掌握matlab模擬隨機(jī)過(guò)程的方法。
2.驗(yàn)證切比雪夫大數(shù)定律。
3.探索微信紅包抽取順序與抽取金額的關(guān)系。
4.探索微信紅包“運(yùn)氣王”游戲獲得最大利益的方案。
二、實(shí)驗(yàn)原理
1. 離散均勻分布
離散均勻分布是統(tǒng)計(jì)學(xué)中的一種離散型分布族。常記為{DiscreteU(a,b):a<b};
設(shè)n=[b-ah],隨機(jī)變量X的取值為X=a+ih,i=0,1,2,…,n-1;概率分布函數(shù)為P(X=a+ih)=1/n, i=0,1,2,…,n-1.那么稱此隨機(jī)變量服從參數(shù)為a,b,h的離散均勻分布。
2.微信紅包抽取金額的分布Yi
設(shè)有n個(gè)人,Xi,i=1,2,..,n,依次抽取微信紅包,紅包總額為H元,記Xi搶到的金額為Yi元。每次抽紅包的金額服從0.01到剩余金額的均值的兩倍的左閉右開(kāi)區(qū)間上的離散均勻分布,且最后一人獲得剩余所有金額,即
PYi=0.01k=n-i+1200(H-j=1i-1Yj)-n+i-1,200(H-j=1i-1Yj)n-i+1為整數(shù)1200(H-j=1i-1Yj)n-i+1,200(H-j=1i-1Yj)n-i+1不為整數(shù)
i=1,2,…,n-1
k=1,2,…,N
N=200(H-j=1i-1Yj)n-i+1-1,200(H-j=1i-1Yj)n-i+1為整數(shù)200(H-j=1i-1Yj)n-i+1,200(H-j=1i-1Yj)n-i+1不為整數(shù)
且Yn=H-i=1n-1Yi.
記Y1的期望EY1,Y2的期望E(Y2),考慮10個(gè)人,依次抽取總額為100元的紅包的情形,則
EY1=i=119990.01k*11999=10
3.切比雪夫大數(shù)定律
考慮每人抽到紅包的金額的期望,因?yàn)?/span>DYi有限,i=1,2,…,n,所以由切比雪夫大數(shù)定律有,?ε>0,
limn→∞PEYi-1ni=1nYii<ε=1
三、實(shí)驗(yàn)步驟
1.編寫程序1,模擬10人抽取總額為100元的紅包,模擬100000次,記錄每人成為運(yùn)氣王的頻率,重復(fù)10次。并繪制成為運(yùn)氣王的頻率與抽取紅包順序的關(guān)系圖。
2.編寫程序2,模擬10人抽取總額為100元的紅包,模擬100000次,記錄每人抽取金額的均值與方差。并繪制每人抽取金額的均值、方差分別與抽取紅包順序的關(guān)系圖。
四、實(shí)驗(yàn)結(jié)果及分析
1. 成為運(yùn)氣王的頻率與抽取順序的關(guān)系
頻率分布表為:
頻率分布圖為:
結(jié)果分析:在10人抽取紅包種,第5位成為運(yùn)氣王的頻率最低;第5位之后,成為運(yùn)氣王的頻率逐漸上升;第9位、10位成為運(yùn)氣王的頻率較高,且近似相等。
2.抽取金額均值、方差分別與抽取順序的關(guān)系
抽取金額均值與抽取順序的關(guān)系表:
抽取金額均值與抽取順序的關(guān)系圖:
抽取金額方差與抽取順序的關(guān)系表:
抽取金額方差與抽取順序的關(guān)系圖:
結(jié)果分析:
(1)第一位抽取紅包的人所抽取的金額的均值為9.98,接近10,符合切比雪夫大數(shù)定律。
(2)取的期望金額與順序無(wú)關(guān),但隨著抽取順序的增加,抽取金額的方差逐漸增大。
3.抽取紅包的順序與收益的關(guān)系
(1)當(dāng)抽取次數(shù)足夠多時(shí),抽取金額的期望與抽取順序無(wú)關(guān)。
(2)當(dāng)抽取次數(shù)較少時(shí),抽取順序越靠后,抽到最大紅包的概率越大,但抽取金額的方差也越大,即抽到較小紅包的概率變大,風(fēng)險(xiǎn)增大。
五、“運(yùn)氣王”游戲模擬
游戲1:10人進(jìn)行搶紅包游戲,每人搶紅包的順序不變,搶到的金額如上分布,每人有初始金額1000元,有初始紅包100元,每局的手氣最佳的人發(fā)100元紅包進(jìn)行下一局,當(dāng)一局游戲結(jié)束時(shí),若有一人的剩余金額小于100,則游戲結(jié)束。
游戲2:在游戲1的基礎(chǔ)上,將每局發(fā)紅包的人由“手氣最佳的人”改為“手氣最差的人”。其余保持不變。
實(shí)驗(yàn)步驟:編寫程序3模擬游戲1,編寫程序4模擬游戲2,并記錄游戲結(jié)束時(shí),平均游戲局?jǐn)?shù)與平均剩余金額。若令Moneyi為每一局游戲結(jié)束時(shí)每人的剩余金額,Yij為第i局游戲中結(jié)束時(shí),第j個(gè)人的剩余金額,則
Moneyi=[Yi1,Yi2,…,Yin]
且Moneyi為帶吸收壁的隨機(jī)游動(dòng)過(guò)程。
模擬結(jié)果:
游戲1:運(yùn)行結(jié)果:
平均游戲局?jǐn)?shù):averagek = 246.3463
平均剩余金額如下圖:
結(jié)論:前7位預(yù)期收益為正,后3位預(yù)期收益為負(fù);第4、5的預(yù)期收益最大,第9、10的預(yù)期虧損最大。
Game2:
平均游戲局?jǐn)?shù):averagek = 169.7919
平均剩余金額如下圖:
結(jié)論:前7位預(yù)期收益為正,后3位的預(yù)期收益為負(fù);且隨著抽取順序的靠后,預(yù)期收益逐漸變小。
六、程序代碼
程序1:
%n個(gè)人x1,x2,...,xn,H元紅包,xi抽到y(tǒng)i元紅包,sup為每次取紅包上界
%模擬m次
function lottery(n,H,m)
y=zeros(m,n);kinglucknum=zeros(1,n);
for j=1:m
??? sum=0;
for i=1:n-1
??? sup=2*(H-sum)/(n-i+1);
??? if floor(100*sup)==(100*sup)
??????? y(j,i)=unidrnd(100*sup-1)/100;
??? else
??????? y(j,i)=unidrnd(floor(100*sup))/100;
??? end
??? sum=sum+y(j,i);
end
y(j,n)=H-sum;
example=y(j,:);
[~,who]=max(example);
kinglucknum(who)=kinglucknum(who)+1;
end
[~,kingluck]=max(kinglucknum);
kinglucknum
kingluck
rate=kinglucknum/m;
plot(rate)
end
程序2:
%n個(gè)人x1,x2,...,xn,H元紅包,xi抽到y(tǒng)i元紅包,sup為每次取紅包上界
%模擬m次
function expectation(n,H,m)
y=zeros(m,n);average=zeros(1,n);variance=zeros(1,n);
for j=1:m
??? sum=0;
for i=1:n-1
??? sup=2*(H-sum)/(n-i+1);
??? if floor(100*sup)==(100*sup)
??????? y(j,i)=unidrnd(100*sup-1)/100;
??? else
??????? y(j,i)=unidrnd(floor(100*sup))/100;
??? end
??? sum=sum+y(j,i);
end
y(j,n)=H-sum;
end
for i=1:n
??? for j=1:m
??? average(i)=average(i)+y(j,i);
??? end
??? average(i)=average(i)/m;
end
for i=1:n
??? for j=1:m
??????? variance(i)=variance(i)+(y(j,i)-average(i))^2;
??? end
??? variance(i)=variance(i)/m;
end
N=1:n;
average,variance
figure(1)
scatter(N,average)
box off
figure(2)
scatter(N,variance)
box off
end
程序3:
function game1(n,H,m,M0)
%n:人數(shù);H:紅包金額;m:模擬次數(shù);M0:初始金額;k局?jǐn)?shù);
%averagemoney:每人剩余金額的期望;average:游戲局?jǐn)?shù)的均值
money=M0*ones(m,n);k=zeros(1,m);
for j=1:m
y=zeros(1,n);
while all(money(j,:)>=H)
??? k(j)=k(j)+1;sum=0;
??? if k(j)>1
??????? money(j,who0)=money(j,who0)-H;
??? end
for i=1:n-1
??? sup=2*(H-sum)/(n-i+1);
??? if floor(100*sup)==(100*sup)
??????? y(i)=unidrnd(100*sup-1)/100;
??? else
??????? y(i)=unidrnd(floor(100*sup))/100;
??? end
??? money(j,i)=money(j,i)+y(i);
??? sum=sum+y(i);
end
y(n)=H-sum;money(j,n)=money(j,n)+y(n);
[~,who0]=max(y);
end
end
T=1:n;
averagemoney=mean(money,1);averagek=mean(k)
scatter(T,averagemoney)
end
程序4:
function game2(n,H,m,M0)
%n:人數(shù);H:紅包金額;m:模擬次數(shù);M0:初始金額;k局?jǐn)?shù);
%averagemoney:每人剩余金額的期望;average:游戲局?jǐn)?shù)的均值
money=M0*ones(m,n);k=zeros(1,m);
for j=1:m
y=zeros(1,n);
while all(money(j,:)>=H)
??? k(j)=k(j)+1;sum=0;
??? if k(j)>1
??????? money(j,who0)=money(j,who0)-H;
??? end
for i=1:n-1
??? sup=2*(H-sum)/(n-i+1);
??? if floor(100*sup)==(100*sup)
??????? y(i)=unidrnd(100*sup-1)/100;
??? else
??????? y(i)=unidrnd(floor(100*sup))/100;
??? end
??? money(j,i)=money(j,i)+y(i);
??? sum=sum+y(i);
end
y(n)=H-sum;money(j,n)=money(j,n)+y(n);
[~,who0]=min(y);
end
end
T=1:n;
averagemoney=mean(money,1);averagek=mean(k)
scatter(T,averagemoney)
end
總結(jié)
- 上一篇: ccproxy使用指南
- 下一篇: 7.27北京 以我的方式纪念环法--香山