目錄
題目:
假設:
- 病毒正在一個居民總數爲N=100,000, 的城市裏擴散。在我們研究的時間段內(300天),沒有新生兒出生,也沒有死亡病例發生
- 所有居民按照其自身年齡,可以劃分爲:未成年,青壯年和中老年。根據事先統計,未成年佔比爲Rc=25%,青壯年佔比爲Ra=55%,中老年佔比爲Ro=20%。
- 所有居民按照其感染情況,可以劃分爲:健康者,潛伏者,發病者和康復者
- 病毒傳播過程如下:
-
每天健康者接觸到潛伏者後,根據其所在的年齡類別(未成年,青壯年和中老年)分別以概率, 和變爲潛伏者
- 每天健康者接觸到發病者後,根據其所在的年齡類別(未成年,青壯年和中老年)分別以概率, 和爲潛伏者
- 每天所有年齡類型的潛伏者都以概率α變爲發病者(α的取值範圍在0.01~0.05)
- 每天發病者根據其所在的年齡類別(未成年,青壯年和中老年),分別以概率γc, γa和γo變爲康復者
- 康復者在所研究的時間段內(300天)不再被感染和感染別人
- 在研究的時間段內(300天),每人每天接觸的人數r=10,且所有人兩兩接觸的概率相等
以上就是題目的假設,同時給出前面四十天的數據:如下圖所示,一共有四十天的數據
發病者 | 康復者 | |||||
未成年 | 青壯年 | 中老年 | 未成年 | 青壯年 | 中老年 | |
112 | 125 | 305 | 56 | 87 | 73 | |
92 | 115 | 302 | 83 | 98 | 87 | |
79 | 110 | 309 | 102 | 114 | 106 | |
68 | 107 | 316 | 119 | 129 | 122 | |
65 | 107 | 332 | 136 | 138 | 134 | |
64 | 110 | 353 | 149 | 152 | 152 |
模型建立
通過題目的分析,可以知道,這個題目要首先建立一個模型,然後根據數據進行估算回原本的參數,通過簡單的查詢資料,我們可以知道,關於病毒模型,網上很多,包括SI,SEI,SEIR模型等,通過對模型的分析,可以知道,這個題目比較適合SEIR模型,
於是建立SEIR模型:
說明:S,E,I,R 分別表示的是,S:易感人羣,也就是健康人羣, E:暴露人羣,也就是潛伏者,I:患病人羣,R:健康人羣。
第一個公式的意思:人羣當前階段的數量是上一個階段的數量 減去上一個階段人羣中轉換爲暴露人羣的數量,
第二個公式的意思:人羣的當前數量是上一個的數量加上階段轉換的人羣,減去轉換爲的數量
第三個公式的意思:的數量是上一個階段的數量加上轉換爲的數量,然後減去中康復的數量
第四個公式意思:是數量等於階段的數量加上中康復的數量
注意的小問題:上面列出來的公式,只是children 未成年人的公式,其實每個年齡段都有四個一樣的公式,但是都是一樣的,只是下標不同,但是值得注意的是三個年齡段中的,表示的是目前三個年齡階段中所有的暴露人羣和患病人羣的總數,並不是三個年齡段各自的暴露人羣和患病人羣。
說明一下:這裏的易感人羣轉換爲暴露人羣的公式,是一個近似是公式。他計算的是每個暴露人羣碰到的易感人羣的數量後轉換成暴露人去的個數 + 每個患病人羣加上易感人羣並轉換爲暴露人羣的數量。這個假設成立的條件是:每個暴露人羣碰到一個易感易感人羣,易感人羣的感染率就增加,每個患病人羣碰到易感易感人羣,易感人羣的感染概率也是增加的。換句話說,對於每個易感人羣,他轉換的概率是和碰到暴露人羣和患病人羣的數量有關係的,數量越多,感染的概率就越大。 同時,暴露人羣碰到每個人的概率是相同的。患病人羣碰到每個人的概率也是相同的。 這個概率不會因爲前面碰到的人是什麼類型的而改變。當數量很大的時候,應該是近似相等的。如果想更加具體的模型,應該是可以用C(n,m),也就是排列組合來嚴格計算。但是實際計算發現,N=100000的時候計算機已經計算不過來了。最後還是用了這個模型來計算。
我也曾經嘗試過用其他的轉換概率模型。比如說假設每個易感人羣只要碰到暴露人羣並且不接觸患病人羣,不管是碰到幾個暴露人羣,那麼感染概率都是相同的,也就是, 和。 每個易感人羣只要是碰到患病人羣,不管碰到幾個患病人羣,那麼他的感染概率都是,或者是。 也就是說。我認爲碰到患病人羣后的感染概率要高於碰到暴露人羣,並且覆蓋了碰到了暴露人羣的感染概率。和碰到的數量沒有關係。因爲,我認爲,只要碰到了暴露人羣或者是患病人羣,易感人羣就類似於碰到了病菌了,不管是碰到多少個病菌,轉換爲攜帶者的概率都是相同的。而且患病人羣的病菌要比攜帶者更毒一點,所以覆蓋了暴露人羣的病菌 但是,經過實際的檢驗。發現基於這個建立的模型,擬合的結果不是那麼完美。所以我猜測。對於易感人羣,轉換爲暴露人羣的概率和碰到暴露人羣和患病者的數量是有關係的。
以上是個人的理解,不知道自己的理解有沒有問題。但是查詢到網上的模型都是這個。整個模型唯一的近似的地方也就是易感人羣轉換爲暴露人羣的地方了。後面的 更加精細的模型也就是算更加準確的轉移概率了!當然了,整個模型除了這個地方,其他地方都是很直白的。也沒有什麼好精細的建模的~~
題目分析
首先,我們可以看看我們目前已經知道什麼條件,我們可以知道前面四十天的暴露人羣和易感人羣的每天的數量,患病人羣的每天的數量,康復者的每天的數量。然後,我們分析一下,我們要求的參數,發現可以大致的分成三類
- γc, γa和γo
- α
- , , 和, 和
首先,第一類的參數和其他的參數簡直是沒有關係。可以直接通過公式計算出來。
也是就是: 這也就可以簡單的計算出來了:計算後畫個圖,如下:
所以可以非常容易的求出了,不管是求平均還是後面的加權求平均,都可以非常容易的計算出來。
第二個參數的求取和第三類的參數求取是關聯的,如果知道第二個參數,那麼其實根據現在的α 是可以計算出來每個, , 和, 和的。
第二個參數的,和其他的參數的關係可以變成如圖所示,假設我們知道了 α 那麼,對於每個階段,其實都有一個上面的方程,同時每個階段的和是知道的,那麼我們可以獲取若干個這種類似於二元一次方程的等式,那麼我們就可以用最小二乘法類型的方式來計算出, , 和, 和。
所以我們可以假設一個α ,通過兩個時間階段的值,求出, , 和, 和。然後預測第三個階段的S+W的值,根據預測的結果來判斷α的值預測的是不是正確的。
注意的小問題
(1)首先,我們可以基本上肯定,如果碰上患病人羣的感染概率一定是大於碰上潛伏者的感染概率。所以我們在計算的時候,可以加上限制條件 。具體到Matlab公式是怎麼樣的嘞
我們可以改變第二項的計算是前兩項的和,並且限制兩個待求的參數都是大於0的,然後重新計算一下第二項係數。
(2) 通過實際的計算可以發現如果直接計算老年人羣體裏面的易感人羣,你會發現,易感人羣是波動的,同時在後期,比如33天后,數量居然會回升,如下圖所示,下圖中藍色線條和橙色線條是易感人羣,紅色和藍色是易感人羣的一階微分的負數。這個回升顯然是非常不合理的。這樣計算出來的一定是會有負數的。這個地方,我不知道的處理方式是用多階的線性方程模擬一下,近似於進行了濾波操作,同時,計算的區間只選擇中間的階段,因爲中間的階段看上要正常很多。應該有其他的處理方式,比如說,剔除掉一階微分中爲符號反常的數據。 我這裏只是簡單的多階擬合一下,然後取中間的比較好的數據段。
其他的年齡段的計算還是比較正常的,但是應該也可以shaxuan
計算結果
最終的計算結果和仿真如下圖所示,其中α=0.434 。大概率是比較接近的
然後預測後面的人數如下圖所示:
代碼
代碼如下:
clc;
clear all;
r = 10;
exc = xlsread('Data.xlsx');
Ic = exc(:,1);
Ia = exc(:,2);
Io = exc(:,3);
Rc = exc(:,5);
Ra = exc(:,6);
Ro = exc(:,7);
TRc=diff(Rc)./Ic(1:39);
gamma_c = mean(TRc(10:39));
TRa=diff(Ra)./Ia(1:39);
gamma_a = mean(diff(Ra)./Ia(1:39));
TRo=diff(Ro)./Io(1:39);
gamma_o = mean(TRo(10:39));
% figure(1);
% plot([1:39],TRc, [1:39],TRa, [1:39],TRo);
% title('三個階段的gamma');
%遍歷 a 求最小均方根誤差的值
N=100000;
NumberOfDivition=1000;
RMS = zeros(NumberOfDivition,3);
a=0.01:(0.05-0.01)/NumberOfDivition:0.05;
beta_c_list=zeros(NumberOfDivition,2);
beta_a_list=zeros(NumberOfDivition,2);
beta_o_list=zeros(NumberOfDivition,2);
for k =1:NumberOfDivition
SEc=20000 - Ic - Rc;
SEa=20000 - Ia - Ra;
SEo=20000 - Io - Ro;
Ec=-diff(SEc)/a(k);
Ea=-diff(SEa)/a(k);
Eo=-diff(SEo)/a(k);
Sc = 25000 - Ic(1:39) - Rc(1:39) - Ec;
Sa = 55000 - Ia(1:39) - Ra(1:39) - Ea;
So = 20000 - Io(1:39) - Ro(1:39) - Eo;
So_old=So;
p = polyfit([1:39]' ,So, 4); %p爲擬合後的多項式係數
So=polyval(p, [1:39]' );
S_all =Sc +Sa +So;
E_all = Ec + Ea + Eo;
I_all = Ic + Ia + Io;
R_all =Rc+Ra+Ro;
% figure
% plot([1:39]' , So, [1:39]', Eo(1:39), 'linewidth',2);
ttc = 10*Sc.*I_all(1:39)./N;
ssc = 10*(Sc).*E_all(1:39)./N;
xc=[ssc(1:38),ttc(1:38)];
tta = 10*Sa.*I_all(1:39)./N;
ssa = 10*(Sa).*E_all(1:39)./N;
xa=[ssa(1:38),tta(1:38)];
tto = 10*So.*I_all(1:39)./N;
sso = 10*(So).*E_all(1:39)./N;
xo=[sso(1:38),tto(1:38)];
Yc = -diff(Sc);
Ya = -diff(Sa);
Yo = -diff(So);
Yo_old=-diff(So_old);
% plot([1:39],So, [1:38], Yo,[1:39],So_old, [1:38], Yo_old,'linewidth',2);
% title('羣體:老年人中的易感人羣');
fun=inline('c(1).*x(:,1)+(c(1)+c(2)).*x(:,2)','c','x');
beta_c = lsqcurvefit(fun,[0.01 0.01],xc(10:35,:),Yc(10:35),[0,0],[0.5,0.5]);
beta_a = lsqcurvefit(fun,[0.01 0.01],xa(10:35,:),Ya(10:35),[0,0],[0.5,0.5]);
beta_o = lsqcurvefit(fun,[0.01 0.01],xo(5:30,:),Yo(5:30),[0,0],[0.5,0.5]);
beta_c(2)=beta_c(1)+beta_c(2);
beta_a(2)=beta_a(1)+beta_a(2);
beta_o(2)=beta_o(1)+beta_o(2);
beta_c_list(k,1)=beta_c(1); beta_c_list(k,2)=beta_c(2);
beta_a_list(k,1)=beta_a(1); beta_a_list(k,2)=beta_a(2);
beta_o_list(k,1)=beta_o(1); beta_o_list(k,2)=beta_o(2);
%testY = beta_c(1).*E_all(1:38) + beta_c(2).*I_all(1:38);
%plot([1:38],Yc,[1:38], testY)
%初值
Ic_diff = diff(Ic);
Ia_diff = diff(Ia);
Io_diff = diff(Io);
Ic_ans = Ic(1);Ia_ans = Ia(1);Io_ans = Io(1);
Rc_ans = Rc(1);Ra_ans = Ra(1);Ro_ans = Ro(1);
Ec_ans = (Ic_diff(1) + gamma_c.*Ic(1))./a(k);
Ea_ans = (Ia_diff(1) + gamma_a.*Ia(1))./a(k);
Eo_ans = (Io_diff(1) + gamma_o.*Io(1))./a(k);
Sc_ans = 25000 - Ic_ans - Rc_ans - Ec_ans;
Sa_ans = 55000 - Ia_ans - Ra_ans - Ea_ans;
So_ans = 20000 - Io_ans - Ro_ans - Eo_ans;
for i = 2:40
Ic_ans(i) = Ic_ans(i-1) + a(k) * Ec_ans(i-1) - gamma_c * Ic_ans(i-1);
Ia_ans(i) = Ia_ans(i-1) + a(k) * Ea_ans(i-1) - gamma_a * Ia_ans(i-1);
Io_ans(i) = Io_ans(i-1)+ a(k) * Eo_ans(i-1)-gamma_o * Io_ans(i-1);
Rc_ans(i) = Rc_ans(i-1) + gamma_c*Ic_ans(i-1);
Ra_ans(i) = Ra_ans(i-1) + gamma_a*Ia_ans(i-1);
Ro_ans(i) = Ro_ans(i-1) + gamma_o*Io_ans(i-1);
Ec_ans(i) = Ec_ans(i-1) + r * Sc_ans(i-1)/100000*( beta_c(1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_c(2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ec_ans(i-1);
Ea_ans(i) = Ea_ans(i-1) + r * Sa_ans(i-1)/100000*( beta_a(1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_a(2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ea_ans(i-1);
Eo_ans(i) = Eo_ans(i-1) + r * So_ans(i-1)/100000*( beta_o(1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_o(2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Eo_ans(i-1);
Sc_ans(i) = 25000 - Ic_ans(i) - Rc_ans(i) - Ec_ans(i);
Sa_ans(i) = 55000 - Ia_ans(i) - Ra_ans(i) - Ea_ans(i);
So_ans(i) = 20000 - Io_ans(i) - Ro_ans(i) - Eo_ans(i);
end
% figure
% plot([1:40],Ic,[1:40],Ic_ans(1:40));
% title('人羣:青年')
% figure
% plot([1:40],Ia,[1:40],Ia_ans(1:40));
% title('人羣:成年人')
% figure
% plot([1:40],Io,[1:40],Io_ans(1:40));
% title('人羣:老年人')
%均方根誤差
RMS(k,1) = sum(sqrt((Ic_ans-Ic').^2))/40;
RMS(k,2) = sum(sqrt((Ia_ans-Ia').^2))/40;
RMS(k,3) = sum(sqrt((Io_ans-Io').^2))/40;
end
% 找到最小誤差點
RMS_mean = (RMS(:,1)+RMS(:,2)+RMS(:,3))/3;
%RMS_mean = RMS(:,1);
k = find(RMS_mean == min(RMS_mean));
for i = 2:300
Ic_ans(i) = Ic_ans(i-1) + a(k) * Ec_ans(i-1) - gamma_c * Ic_ans(i-1);
Ia_ans(i) = Ia_ans(i-1) + a(k) * Ea_ans(i-1) - gamma_a * Ia_ans(i-1);
Io_ans(i) = Io_ans(i-1)+ a(k) * Eo_ans(i-1)-gamma_o * Io_ans(i-1);
Rc_ans(i) = Rc_ans(i-1) + gamma_c*Ic_ans(i-1);
Ra_ans(i) = Ra_ans(i-1) + gamma_a*Ia_ans(i-1);
Ro_ans(i) = Ro_ans(i-1) + gamma_o*Io_ans(i-1);
Ec_ans(i) = Ec_ans(i-1) + r * Sc_ans(i-1)/100000*( beta_c_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_c_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ec_ans(i-1);
Ea_ans(i) = Ea_ans(i-1) + r * Sa_ans(i-1)/100000*( beta_a_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_a_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ea_ans(i-1);
Eo_ans(i) = Eo_ans(i-1) + r * So_ans(i-1)/100000*( beta_o_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_o_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Eo_ans(i-1);
Sc_ans(i) = 25000 - Ic_ans(i) - Rc_ans(i) - Ec_ans(i);
Sa_ans(i) = 55000 - Ia_ans(i) - Ra_ans(i) - Ea_ans(i);
So_ans(i) = 20000 - Io_ans(i) - Ro_ans(i) - Eo_ans(i);
end
subplot(2,3,1);
plot([1:40],Ic,[1:40],Ic_ans(1:40));
title('人羣:青年')
subplot(2,3,2);
plot([1:40],Ia,[1:40],Ia_ans(1:40));
title('人羣:成年人')
subplot(2,3,3);
plot([1:40],Io,[1:40],Io_ans(1:40));
title('人羣:老年人')
subplot(2,3,4);
plot([1:300],Ic_ans,[1:300],Rc_ans,[1:300],Ec_ans,[1:300],Sc_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:青年')
subplot(2,3,5);
plot([1:300],Ia_ans,[1:300],Ra_ans,[1:300],Ea_ans,[1:300],Sa_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:成年人')
subplot(2,3,6);
plot([1:300],Io_ans,[1:300],Ro_ans,[1:300],Eo_ans,[1:300],So_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:老年')
r=1;
for i = 40:300
Ic_ans(i) = Ic_ans(i-1) + a(k) * Ec_ans(i-1) - gamma_c * Ic_ans(i-1);
Ia_ans(i) = Ia_ans(i-1) + a(k) * Ea_ans(i-1) - gamma_a * Ia_ans(i-1);
Io_ans(i) = Io_ans(i-1)+ a(k) * Eo_ans(i-1)-gamma_o * Io_ans(i-1);
Rc_ans(i) = Rc_ans(i-1) + gamma_c*Ic_ans(i-1);
Ra_ans(i) = Ra_ans(i-1) + gamma_a*Ia_ans(i-1);
Ro_ans(i) = Ro_ans(i-1) + gamma_o*Io_ans(i-1);
Ec_ans(i) = Ec_ans(i-1) + r * Sc_ans(i-1)/100000*( beta_c_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_c_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ec_ans(i-1);
Ea_ans(i) = Ea_ans(i-1) + r * Sa_ans(i-1)/100000*( beta_a_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_a_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Ea_ans(i-1);
Eo_ans(i) = Eo_ans(i-1) + r * So_ans(i-1)/100000*( beta_o_list(k,1)*(Ec_ans(i-1) + Ea_ans(i-1) + Eo_ans(i-1)) + beta_o_list(k,2)*(Ic_ans(i-1)+Ia_ans(i-1)+Io_ans(i-1)) ) - a(k)*Eo_ans(i-1);
Sc_ans(i) = 25000 - Ic_ans(i) - Rc_ans(i) - Ec_ans(i);
Sa_ans(i) = 55000 - Ia_ans(i) - Ra_ans(i) - Ea_ans(i);
So_ans(i) = 20000 - Io_ans(i) - Ro_ans(i) - Eo_ans(i);
end
subplot(1,3,1);
plot([1:300],Ic_ans,[1:300],Rc_ans,[1:300],Ec_ans,[1:300],Sc_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:青年')
subplot(1,3,2);
plot([1:300],Ia_ans,[1:300],Ra_ans,[1:300],Ea_ans,[1:300],Sa_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:成年人')
subplot(1,3,3);
plot([1:300],Io_ans,[1:300],Ro_ans,[1:300],Eo_ans,[1:300],So_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:老年')
I_ans=Ic_ans+Ia_ans+Io_ans;
R_ans=Rc_ans +Ra_ans+Ro_ans;
S_ans=Sc_ans+Sa_ans+So_ans;
figure;
plot([1:300],I_ans,[1:300],Ro_ans,[1:300],R_ans,[1:300],S_ans,'linewidth',2);
legend('Infectious people','Recovered people','Exposed people','Susceptible people');
xlabel('天數')
ylabel('人員數量')
title('人羣:總的人羣')
模型改進和精細預測
整個模型中,易感人羣轉換爲暴露人羣的概率和數量應該是可以進一步精細的。比如說用蒙特卡羅方法來模擬N個人羣中隨機碰撞的情況,然後計算下一個階段的人羣的不同數量情況,例如,可以將某個階段中N個人羣的隨機分佈,期中的不同年齡階段的暴露人羣和患病人羣,易感人羣和移出人羣都隨筆分佈,然後計算每個易感人羣前後的10個人中的易感人羣和患病人羣的情況,計算這個人的轉換概率,然後遍歷一下,計算出新的人羣數量的分佈。
寫在最後
本次的比賽,讓我感觸良多,對最後的結果也很可惜。但是仔細想想,也沒有什麼可惜的,自己確實是沒有比別人做的更好。自己身上還是有很大的不足,其實一直有意識到自己的不足。但是並沒有什麼行動,但是這一次,感覺更加深刻, 如果當時可以頭腦更加清晰一點,運算過程更加清晰一點,代碼更加清晰一點,寫的過程更加仔細一點。也許結果會更好一點。
到了這個年齡段,有時候會意識到,自己未來短暫時間的所有可以取得的成績,都是之前所有努力,所有選擇的影響。人應該一直保持進步,一直積極向上。積極改變自己身上的陋習,這個過程可能會比較難,也比較漫長,效果也是非短期可見的。但是,還是要試一試。
慢慢嘗試改變自己,人生也還很長,未來可期。做人還是要開心~!
附件:
每天的數據:
發病者 | 康復者 | |||||
未成年 | 青壯年 | 中老年 | 未成年 | 青壯年 | 中老年 | |
112 | 125 | 305 | 56 | 87 | 73 | |
92 | 115 | 302 | 83 | 98 | 87 | |
79 | 110 | 309 | 102 | 114 | 106 | |
68 | 107 | 316 | 119 | 129 | 122 | |
65 | 107 | 332 | 136 | 138 | 134 | |
64 | 110 | 353 | 149 | 152 | 152 | |
66 | 119 | 381 | 166 | 167 | 169 | |
69 | 129 | 414 | 178 | 181 | 189 | |
74 | 145 | 454 | 192 | 196 | 208 | |
82 | 162 | 505 | 209 | 212 | 234 | |
94 | 182 | 563 | 230 | 232 | 256 | |
107 | 209 | 633 | 252 | 251 | 285 | |
125 | 242 | 713 | 276 | 277 | 317 | |
145 | 276 | 806 | 305 | 304 | 353 | |
165 | 319 | 908 | 334 | 338 | 393 | |
193 | 370 | 1031 | 373 | 379 | 437 | |
217 | 427 | 1165 | 415 | 421 | 489 | |
250 | 494 | 1315 | 468 | 472 | 546 | |
286 | 567 | 1478 | 524 | 529 | 615 | |
326 | 654 | 1665 | 590 | 601 | 686 | |
374 | 748 | 1864 | 663 | 678 | 769 | |
420 | 853 | 2080 | 748 | 767 | 862 | |
477 | 974 | 2314 | 846 | 869 | 969 | |
535 | 1104 | 2561 | 954 | 985 | 1084 | |
602 | 1249 | 2818 | 1078 | 1116 | 1212 | |
671 | 1403 | 3084 | 1212 | 1266 | 1351 | |
745 | 1574 | 3360 | 1368 | 1434 | 1504 | |
819 | 1762 | 3639 | 1541 | 1623 | 1672 | |
903 | 1958 | 3917 | 1725 | 1835 | 1855 | |
981 | 2165 | 4189 | 1933 | 2070 | 2049 | |
1069 | 2384 | 4455 | 2157 | 2329 | 2261 | |
1155 | 2611 | 4708 | 2404 | 2613 | 2481 | |
1236 | 2848 | 4948 | 2669 | 2928 | 2719 | |
1320 | 3091 | 5173 | 2950 | 3267 | 2967 | |
1404 | 3338 | 5376 | 3254 | 3640 | 3225 | |
1478 | 3588 | 5562 | 3577 | 4041 | 3490 | |
1555 | 3837 | 5727 | 3918 | 4468 | 3770 | |
1623 | 4084 | 5876 | 4275 | 4932 | 4054 | |
1685 | 4329 | 6002 | 4644 | 5421 | 4351 | |
1743 | 4567 | 6105 | 5033 | 5937 | 4651 |