日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于用户投票的排名算法(四):牛顿冷却定律

發布時間:2025/7/25 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于用户投票的排名算法(四):牛顿冷却定律 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:?阮一峰

日期:?2012年3月16日

這個系列的前三篇,介紹了Hacker News,Reddit和Stack Overflow的排名算法。

今天,討論一個更一般的數學模型。

這個系列的每篇文章,都是可以分開讀的。但是,為了保證所有人都在同一頁上,我再說一下,到目前為止,我們用不同方法,企圖解決的都是同一個問題:根據用戶的投票,決定最近一段時間內的"熱文排名"。

你可能會覺得,這是一個全新的課題,伴隨著互聯網而產生,需要全新的方法來解決。但是,實際上不是。我們可以把"熱文排名"想象成一個"自然冷卻"的過程:

  (1)任一時刻,網站中所有的文章,都有一個"當前溫度",溫度最高的文章就排在第一位。

  (2)如果一個用戶對某篇文章投了贊成票,該文章的溫度就上升一度。

  (3)隨著時間流逝,所有文章的溫度都逐漸"冷卻"。

  

這樣假設的意義,在于我們可以照搬物理學的冷卻定律,使用現成的公式,建立"溫度"與"時間"之間的函數關系,輕松構建一個"指數式衰減"(Exponential decay)的過程。

偉大的物理學家牛頓,早在17世紀就提出了溫度冷卻的數學公式,被后人稱作"牛頓冷卻定律"(Newton's Law of Cooling)。我們就用這個定律構建排名算法。

"牛頓冷卻定律"非常簡單,用一句話就可以概況:

物體的冷卻速度,與其當前溫度與室溫之間的溫差成正比。

寫成數學公式就是:

  

其中,

  - T(t)是溫度(T)的時間(t)函數。微積分知識告訴我們,溫度變化(冷卻)的速率就是溫度函數的導數T'(t)。

  - H代表室溫,T(t)-H就是當前溫度與室溫之間的溫差。由于當前溫度高于室溫,所以這是一個正值。

  - 常數α(α>0)表示室溫與降溫速率之間的比例關系。前面的負號表示降溫。不同的物質有不同的α值。

這是一個微分方程,為了計算當前溫度,需要求出T(t)的函數表達式。

第一步,改寫方程,然后等式兩邊取積分。

  

  


第二步,求出這個積分的解(c為常數項)。

  

  

  

第三步,假定在時刻t0,該物體的溫度是T(t0),簡寫為T0。代入上面的方程,得到

  

  

第四步,將上一步的C代入第二步的方程。

  

假定室溫H為0度,即所有物體最終都會"冷寂",方程就可以簡化為

  

上面這個方程,就是我們想要的最終結果:

  本期溫度 = 上一期溫度 x exp(-(冷卻系數) x 間隔的小時數)

將這個公式用在"排名算法",就相當于(假定本期沒有增加凈贊成票)

  本期得分 = 上一期得分 x exp(-(冷卻系數) x 間隔的小時數)

其中,"冷卻系數"是一個你自己決定的值。如果假定一篇新文章的初始分數是100分,24小時之后"冷卻"為1分,那么可以計算得到"冷卻系數"約等于0.192。如果你想放慢"熱文排名"的更新率,"冷卻系數"就取一個較小的值,否則就取一個較大的值。

[參考文獻]

  * Rank Hotness With Newton's Law of Cooling

(完)

文檔信息

  • 版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)
  • 發表日期:?2012年3月16日
  • 更多內容:?檔案???算法與數學
  • 購買文集:?《如何變得有思想》
  • 社交媒體:?twitter,?weibo
  • Feed訂閱:?

相關文章

  • 2015.09.01:?理解矩陣乘法 大多數人在高中,或者大學低年級,都上過一門課《線性代數》。這門課其實是教矩陣。
  • 2015.07.27:?蒙特卡羅方法入門 本文通過五個例子,介紹蒙特卡羅方法(Monte Carlo Method)。
  • 2015.06.10:?泊松分布和指數分布:10分鐘教程 大學時,我一直覺得統計學很難,還差點掛科。
  • 2013.12.16:?樸素貝葉斯分類器的應用 生活中很多場合需要用到分類,比如新聞分類、病人分類等等。

留言(19條)

好模型。

2012年3月16日 02:18?|?∞?|?引用

有趣的模型。如果拿這個跟那些score=log(vote)-c*time的模型比較,可以發現后者就是對牛頓模型里的溫度取了個對數。

一個可能的變化是考慮每一票的時間,一小時前的新“頂”應該比去年的“頂”有更大的效果。其實有些論壇按照最后回復來排列貼子,結果近似于每一個回復都讓系統溫度提高很多(自動取得所有貼子里的最高溫度),而后慢慢冷卻。每“頂”一次都把文章提到最前是沒有必要的,但可以調節參數得到更有實際意義的模型。其負面作用是或者要記錄每一“頂”的時間,增加系統負擔,或者要實時記錄當前“溫度”,而這個“溫度”無法從原始數據得出(因為每次“頂”的時間沒有記錄下來)。

2012年3月16日 04:41?|?∞?|?引用

這個模型不錯!

2012年3月16日 09:12?|?∞?|?引用

那如果是本期有增加贊成票呢,應該怎么計算呢?

是不是可以這樣, 先算一下上一期到現在冷卻后的得分,然后再加上{本期增加贊成票數}

本期得分 = 上一期得分 × exp(-(冷卻系數) × 間隔的小時數) + 本期增加贊成票數

可是{本期增加贊成票數}是否應以1為單位增加呢

2012年3月16日 11:03?|?∞?|?引用

"微積分知識告訴我們,溫度變化(冷卻)的速率就是溫度函數的導數T'(t)。" 這個怎么理解?

2012年3月16日 11:06?|?∞?|?引用

看得真親切,物理+微積分~~ :-)

2012年3月16日 22:57?|?∞?|?引用

我在想,阮gg這個公式編輯器用的是什么?
怎么生成圖片的???
看這公式,哥哥又要膜拜了...
到處都是大神啊...

2012年3月17日 12:24?|?∞?|?引用

之前也一直在思考如何將排名算法抽象出來,類比了一些自然現象也不得其解。
直到看到這篇文章,醍醐灌頂啊,真是萬物歸一,非常感謝分享。

2012年3月17日 19:45?|?∞?|?引用

引用亂發吹風的發言:

那如果是本期有增加贊成票呢,應該怎么計算呢?

是不是可以這樣, 先算一下上一期到現在冷卻后的得分,然后再加上{本期增加贊成票數}

本期得分 = 上一期得分 × exp(-(冷卻系數) × 間隔的小時數) + 本期增加贊成票數

可是{本期增加贊成票數}是否應以1為單位增加呢

具體的權值應該跟你的網站的特性有關。比如說訪問量,贊成票的更新量等等來具體決定吧。

2012年3月19日 09:15?|?∞?|?引用

引用必填的發言:

一個可能的變化是考慮每一票的時間,一小時前的新“頂”應該比去年的“頂”有更大的效果。其實有些論壇按照最后回復來排列貼子,結果近似于每一個回復都讓系統溫度提高很多(自動取得所有貼子里的最高溫度),而后慢慢冷卻。每“頂”一次都把文章提到最前是沒有必要的,但可以調節參數得到更有實際意義的模型。其負面作用是或者要記錄每一“頂”的時間,增加系統負擔,或者要實時記錄當前“溫度”,而這個“溫度”無法從原始數據得出(因為每次“頂”的時間沒有記錄下來)。

并不需要記錄所有“頂”的時間,只需要記錄上一次“頂”的時間和當時的溫度即可算出當前“頂”之前的一瞬間冷卻到什么溫度,然后加上這個“頂”所帶來的溫度的提升即可。
冷卻模型沒有后效性,所以記錄原始數據是沒有意義的。
實際工程中應該是離散地迭代來實現的。

2012年3月19日 09:23?|?∞?|?引用

引用xb的發言:

"微積分知識告訴我們,溫度變化(冷卻)的速率就是溫度函數的導數T'(t)。" 這個怎么理解?

速率就是一定時間內變化量與時間的比。

V = (T(t) - T(t+dt)) / dt = dT(t) / dt = T'(t)

2012年3月19日 09:26?|?∞?|?引用

有實現的代碼參考嗎?

2012年3月20日 00:42?|?∞?|?引用

引用Ranmocy的發言:

并不需要記錄所有“頂”的時間,只需要記錄上一次“頂”的時間和當時的溫度即可算出當前“頂”之前的一瞬間冷卻到什么溫度,然后加上這個“頂”所帶來的溫度的提升即可。
冷卻模型沒有后效性,所以記錄原始數據是沒有意義的。
實際工程中應該是離散地迭代來實現的。

是,這基本上就是我說的“實時記錄當前‘溫度’”。 我的想法是,有的時候可能會希望從原始數據重新計算一下溫度,比如說想調整冷卻系數;如果只記錄了當前溫度,舊文章和新文章的計算就會有不一致的地方。

2012年3月20日 00:44?|?∞?|?引用

你是抄襲的么?http://www.oschina.net/question/12_45050

2012年4月 1日 09:45?|?∞?|?引用

非常thought-provoking,但是這里只考慮了冷卻問題,還有一個加溫的問題,二者在實際運用中往往是結合在一起的。
比如頂(即贊成票)應該是具有時效性的,當前的頂顯然比一年前的頂更為重要。

2012年4月 2日 20:42?|?∞?|?引用

引用大米的發言:

你是抄襲的么?http://www.oschina.net/question/12_45050

那篇下面寫的有原文出處,就是這里呀。

2012年4月 9日 16:57?|?∞?|?引用

這就是工業界最常用的衰減因子了,每次歷史聚合的時候都對上一次的結果進行衰減。
衰減因子主要存在的問題在于是衰減整體投票結果還是衰減投票。
比如歷史上不同時間段有贊成票, 反對票, 以及每個時間段的贊成比例。 不管衰減哪個都有優勢和劣勢

2012年5月16日 15:07?|?∞?|?引用

對這個模型很感興趣。您覺得新浪微博的智能排序使用了什么算法呢?

2012年9月26日 11:08?|?∞?|?引用

這里只是考慮得分的一種通用自然衰減過程,沒有考慮其他因素比如用戶參與與外部貢獻是吧?

2013年9月 6日 09:34?|?∞?|?引用


總結

以上是生活随笔為你收集整理的基于用户投票的排名算法(四):牛顿冷却定律的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。