臨時抱佛腳 國模前三天(2)

2021-09-27 01:48:14 字數 2595 閱讀 2108

最優化方法

總結這篇**相對來說比之前那篇友好太多,主要是一方面他們用的模型的型別實際上不算多,一是對圖論用非線性模型,核心內容是floyd演算法,另一方面由於lingo計算較為費事費時,因此由原來的非線性模型改為後面的貪心演算法,以此減少演算法執行的時間,找到次優解。

但是這篇**又非常高階,因為它用人人都知道的模型去解題,每個條件列出來都有理有據,每乙個問題都得到了確定的答案,展示這個隊伍有純熟的程式設計和建模技巧,寫手的筆力也可見一斑,總體上描述清晰而不拖沓,非常值得初學者學習。

這道題,屬於圖論的範疇,很多圖論問題,比如旅行商問題,往往是tsp問題或者說np問題,也就是那種有n!或者2^n種情況的題目。這種情況下基本上不可能在有限時間內求得最優解(即使你借到全世界最快的超級計算機),通常我了解到的就是非常常見的那些,比如dijkstra演算法、floyd演算法、kruskal演算法(求最小生成樹)。

那麼有一類演算法叫做貪心演算法,這個演算法,有點神。

其實,與其說貪心演算法是一種演算法,不如說它是一種考慮問題的思路。因為我們要得到的最優解難以計算,所以我們找到的乙個次優方法,當然,有時候貪心演算法也可以得到最優解,比如dijstra演算法等等,但是大多數情況下得到的可能都是次優解,但是它的運算速度很快,所以大家更加習慣去用這樣一種演算法來得到解,尤其是那些規模比較大的解。

另外,貪心演算法通常是和它附近的最值進行比較,這也就導致了它會被「一葉障目」,通過比較原則以為自己找到了最優解,但是大部分情況下可能找到的是區域性最優解,也就是次優解。

因為這篇文章主要是邏輯上非常優秀,我也只能再讀一遍,去領會競賽團隊清晰的思路,這裡就先記錄幾個最優化問題中常用的模型。

擬牛頓法和最速下降法(steepest descent methods)一樣只要求每一步迭代時知道目標函式的梯度。通過測量梯度的變化,構造乙個目標函式的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的資訊,所以有時比牛頓法(newton』s method)更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。擬牛頓法是解非線性方程組及最優化計算中最有效的方法之一.它是一類使每步迭代計算量少而又保持超線性收斂的牛頓型迭代法。

emem,好吧,這個超出我的知識範疇了,先記在這裡以示敬意。

在熱力學上,退火(annealing)現象指物體逐漸降溫的物理現象,溫度愈低,物體的能量狀態會低;夠低後,液體開始冷凝與結晶,在結晶狀態時,系統的能量狀態最低。大自然在緩慢降溫(亦即,退火)時,可「找到」最低能量狀態:結晶。但是,如果過程過急過快,快速降溫(亦稱「淬鍊」,quenching)時,會導致不是最低能態的非晶形。

還是不太理解?我覺得這個比喻挺有意思。

關於普通greedy演算法與模擬退火,有乙個有趣的比喻:

普通greedy演算法:兔子朝著比現在低的地方跳去。它找到了不遠處的最低的山谷。但是這座山谷不一定最低的。這就是普通greedy演算法,它不能保證區域性最優值就是全域性最優值。

模擬退火:兔子喝醉了。它隨機地跳了很長時間。這期間,它可能走向低處,也可能踏入平地。但是,它漸漸清醒了並朝最低的方向跳去。這就是模擬退火。

也就是說,模擬退火,實際上就是在找到次優解之後,有一定的概率否定目前的次優解,從而找到新的最優解。

遺傳演算法(genetic algorithm, ga)是模擬達爾文生物演化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。

其主要特點是直接對結構物件進行操作,不存在求導和函式連續性的限定;具有內在的隱並行性和更好的全域性尋優能力;採用概率化的尋優方法,不需要確定的規則就能自動獲取和指導優化的搜尋空間,自適應地調整搜尋方向。

遺傳演算法以一種群體中的所有個體為物件,並利用隨機化技術指導對乙個被編碼的引數空間進行高效搜尋。其中,選擇、交叉和變異構成了遺傳演算法的遺傳操作;引數編碼、初始群體的設定、適應度函式的設計、遺傳操作設計、控制引數設定五個要素組成了遺傳演算法的核心內容。

下面是乙個例子,比較爬山演算法、模擬退火和遺傳演算法:

爬山演算法:乙隻袋鼠朝著比現在高的地方跳去。它找到了不遠處的最高的山峰。但是這座山不一定是最高峰。這就是爬山演算法,它不能保證區域性最優值就是全域性最優值。

模擬退火:袋鼠喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了並朝最高峰跳去。這就是模擬退火演算法。

遺傳演算法:有很多袋鼠,它們降落到喜瑪拉雅山脈的任意地方。這些袋鼠並不知道它們的任務是尋找珠穆朗瑪峰。但每過幾年,就在一些海拔高度較低的地方射殺一些袋鼠。於是,不斷有袋鼠死於海拔較低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有機會生兒育女。就這樣經過許多年,這些袋鼠們竟然都不自覺地聚攏到了乙個個的山峰上,可是在所有的袋鼠中,只有聚攏到珠穆朗瑪峰的袋鼠被帶回了美麗的澳洲。

這個例子感覺非常生動形象了,突然覺得之前的統計學家都是人才啊,實際上用的就是「物競天擇」,於是我們也光榮地當一回上帝了。這個演算法的優點,非常明顯,就是我們不用刻意去找最優解,只需要不斷淘汰不好的結果,這樣,最後算出來的結果會自動跑到最優解去。

今天看的這篇文章的確是不錯的,語言表達簡單易懂,模型也容易推廣,貪婪演算法用得爐火純青,解決圖論問題,可能這乙個方法就夠了哈哈哈。

對於JSONObject,我只是臨時抱佛腳

需求一 呼叫第三方介面返回json字串,我們自己處理成所需格式的json資料?首先呼叫第三方介面返回的json字串格式如下 1 data code 1 其次我們需要處理成我們自己的json資料。首先呢就是需要將字串資料轉成jsonobject物件後,才可以呼叫它的一系列api方法來處理。1 json...

臨時抱佛腳真的有用嗎?

對於面試。應該有相應的準備,對面試公司的背景要有簡單的了解,對企業文化要有簡單的認識 那麼最關鍵的就屬於問答環節 你問我答 對於這方面,有人喜歡臨時抱佛腳。但後來,我深刻的認識到,臨時抱佛腳 不是為了說看一些簡單的問題。而是對於自己的加分項要有深刻的認識,深入研究一下,才是真真的 臨時抱佛腳 那麼深...

暴力列舉 kkksc03考前臨時抱佛腳

kkksc03 的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有 s1,s2,s3,s4 道題目,完成每道題目需要一些時間,可能不等 a1,a2,as1,b1,b2,...