欢迎光临散文网 会员登陆 & 注册

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

2023-09-10 00:06 作者:卢朓  | 我要投稿

学生的记名投票评优问题


总共有个五个学生,

假设初始时刻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





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

分享到微博请遵守国家法律