高二同学学习pagerank算法后续,如何推广到评优问题以及北太天元的代码实现

学生的记名投票评优问题
总共有个五个学生,
假设初始时刻5个学生的信用分是相同的,都是 1/5,
也就是
x(1,1) = 1/5 ; x(2,1) = 1/5; ...; x(5,1) = 1/5;
这个在北太天元可以这么作
x = zeros(5, 20);
x(:,1) = 1/5;
学生1 给学生 j=1,2,4 投票, 表示他把自己的信用分数
平均分给了同学1,2,4。 因此,
学生1 从学生1 得到的分数是 1/3 * x(1,1)
学生2 从学生1 得到的分数是 1/3 * x(1,1)
学生4 从学生1 得到的分数是 1/3 * x(1,1)
学生2仅仅给学生5投了一票,说明
学生5 从学生2 得到的分数是 1 * x(2,1)
学生3给学生1,2,3各投了一票,说明
学生1 从学生3 得到的分数是 1/3 * x(3,1)
学生2 从学生3 得到的分数是 1/3 * x(3,1)
学生3 从学生3 得到的分数是 1/3 * x(3,1)
学生4给学生2,3,5各投了一票,说明
学生2 从学生4 得到的分数是 1/3 * x(4,1)
学生3 从学生4 得到的分数是 1/3 * x(4,1)
学生5 从学生4 得到的分数是 1/3 * x(4,1)
学生5给学生3,4,5各投了一票,说明
学生2 从学生5 得到的分数是 1/3 * x(5,1)
学生3 从学生5 得到的分数是 1/3 * x(5,1)
学生5 从学生5 得到的分数是 1/3 * x(5,1)
我们可以从投票矩阵
A = [ 1 1 0 1 0
0 0 0 0 1
1 1 1 0 0
0 1 1 0 1
0 0 1 1 1 ] ;
得到转移矩阵(信用分数转移矩阵)
P = [ 1/3 0 1/3 0 0
1/3 0 1/3 1/3 0
0 0 1/3 1/3 1/3
1/3 0 0 0 1/3
0 1 0 1/3 1/3 ];
从A得到P的北太天元代码可以是:
for k=1:5
P(k,:) = A(k,;) / sum (A(k,:));
end
P = P' ; % 转置
x(:,1) 就是第一个时刻的态,x(i,1) = 1/5 表示第i个同学的信用分数
投票得到的转移矩阵确定以后,下一个状态就是改变了每个同学的信用分数
转移一次后到了第二个时刻,同学1,2,3,4,5得到的分数是
同学1的分数是
x(1,2) = x(1,1) * 1/3 + x(3,1)*1/3 ;
这个实际上等于 x(1,2) = P(1,:) * x(:,1)
也就是说是P的第一行乘以 x 的第一列
[1/3 0 1/3 0 0 ] * [ 0.2
0.2
0.2
0.2
0.2 ] = 1/3*0.2 + 0 *0.2 +1/2*0.3 +0*0.2 + 0*0.2
同学的2分数是
x(2,2) = P(2,:) * x(:,1);
....
同学5的分数是
x(5,2) = P(2,:)*x(:,1);
也就是
x(:,2) = P * x(:,1)
经过很多次转移后,我们看到同学1,2,3,4,5 得到的信用分数趋向于平衡,
这就是最终的学生的信用分数。
很多次转移用的北太天元的代码是
for k=2:20
x(:,k) = P*x(:,k-1);
end
针对我们的这个例子,我们转移了19次,然后得到的最终信用分数是
format rat % 这个是用分数来显示浮点数
x(:,end)
ans =
12/101
17/101
24/101
15/101
33/101
我们可以得到结论,学生5 > 学生3 > 学生2 > 学生4 > 学生1