




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、A Pera Global Company 2009 PERA ChinaPython新語(yǔ)言,新平臺(tái)新語(yǔ)言,新平臺(tái)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China大綱大綱起源起源特性特性用途用途不足不足如何學(xué)習(xí)如何學(xué)習(xí)A Pera Global Company 2009 PERA ChinaPython經(jīng)典入門教程A Pera Global Company 2009 PERA China起源起源作者作者 :Guido Van Rossum (GvR)名字的讀法“仁慈的終身獨(dú)裁者” Benevolent Dictator For Life他持續(xù)關(guān)
2、注 Python 的開(kāi)發(fā)進(jìn)程,指導(dǎo)支持Python開(kāi)源社區(qū)的活動(dòng),并在必要的時(shí)刻做出決定。目前在Google工作Python經(jīng)典入門教程A Pera Global Company 2009 PERA China得名得名“1989年12月,我在尋找一門“課余”編程項(xiàng)目來(lái)打發(fā)圣誕節(jié)前后的時(shí)間。我的辦公室會(huì)關(guān)門,但我有一臺(tái)家用電腦,而且沒(méi)有太多其它東西。我決定為當(dāng)時(shí)我正構(gòu)思的一個(gè)新的腳本語(yǔ)言寫一個(gè)解釋器,它是 ABC 語(yǔ)言的后代,對(duì) UNIX / C 程序員會(huì)有吸引力。作為一個(gè)略微有些無(wú)關(guān)想法的人,和一個(gè)蒙提派森(Monty Python)的飛行馬戲團(tuán)的狂熱愛(ài)好者,我選擇了 Python 作為項(xiàng)目的
3、標(biāo)題?!盤ython經(jīng)典入門教程A Pera Global Company 2009 PERA China每個(gè)人都會(huì)每個(gè)人都會(huì)Computer Programming for Everybody1999年,Guido向DARPA闡述Python語(yǔ)言的特性:簡(jiǎn)單、直觀、強(qiáng)大開(kāi)源,以便任何人都可以為它做貢獻(xiàn)代碼像純英語(yǔ)那樣容易理解適用于短期開(kāi)發(fā)的日常任務(wù)這些想法中的一些已經(jīng)成為現(xiàn)實(shí)。Python 已經(jīng)成為一門流行的編程語(yǔ)言,尤其是在互聯(lián)網(wǎng)環(huán)境下。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China大綱大綱起源起源特性特性用途用途不足不足如何學(xué)習(xí)如何學(xué)習(xí)
4、A Pera Global Company 2009 PERA ChinaPython經(jīng)典入門教程A Pera Global Company 2009 PERA China特性特性交互式命令行交互式命令行(Interactive console)不只是腳本不只是腳本強(qiáng)大易用的標(biāo)準(zhǔn)庫(kù)強(qiáng)大易用的標(biāo)準(zhǔn)庫(kù)膠水語(yǔ)言膠水語(yǔ)言(glue language)收放自如收放自如(scalability)不要括號(hào)不要括號(hào)vs Perlvs RubyPython經(jīng)典入門教程A Pera Global Company 2009 PERA China交互式命令行交互式命令行(Interactive console)Pyt
5、hon可以單步直譯運(yùn)行。運(yùn)行Python解釋器進(jìn)入交互式命令行的環(huán)境,你可以在提示符號(hào)旁輸入代碼,按Enter鍵輸出結(jié)果: print(Hello, Python!) Hello, Python!有點(diǎn)像Shell 腳本的執(zhí)行方式。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China不只是腳本不只是腳本原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單編程任務(wù)的語(yǔ)言,如Linux shell script、JavaScript等,它們只能處理簡(jiǎn)單的任務(wù)而Python是面向?qū)ο缶幊蹋∣OP)的,支持異常處理和類型檢查Python的支持者較喜歡稱它為一種高階動(dòng)態(tài)編程語(yǔ)言Py
6、thon經(jīng)典入門教程A Pera Global Company 2009 PERA China強(qiáng)大易用的標(biāo)準(zhǔn)庫(kù)強(qiáng)大易用的標(biāo)準(zhǔn)庫(kù)核心庫(kù)不超過(guò)10MbHtml、Xml解析:BeautifulSoup, Expat字符串處理:字典、數(shù)組切片、正則表達(dá)式 re單元測(cè)試: PyUnit代碼版本控制: PySVN網(wǎng)絡(luò)訪問(wèn): urllib2圖形模塊: Tkinter、PyTCL、WxPython串行化、多線程等擴(kuò)展標(biāo)準(zhǔn)庫(kù)十分容易擴(kuò)展標(biāo)準(zhǔn)庫(kù)十分容易Python經(jīng)典入門教程A Pera Global Company 2009 PERA China膠水語(yǔ)言膠水語(yǔ)言(glue language)Python經(jīng)常用作
7、將不同語(yǔ)言編寫的程序“粘”在一起的膠水語(yǔ)言。Google內(nèi)部的很多項(xiàng)目使用C+編寫性能要求極高的部分,然后用Python調(diào)用相應(yīng)的模塊。C/C+: Boost.Python使得 Python 和 C+ 的類庫(kù)能互相調(diào)用(.pyc)Java: Jython 是用Java實(shí)現(xiàn)的Python,可同時(shí)使用二者的類庫(kù).NET:IronPython是Python在.NET平臺(tái)上的版本。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China收放自如收放自如(scalability)Python內(nèi)建的數(shù)據(jù)結(jié)構(gòu)(variable, list 和 dict)以及對(duì)多線程
8、分布式操作的支持,使得程序可以用相同的代碼處理不同規(guī)模的數(shù)據(jù),以及并發(fā)的用戶需求。Google App EnginePython經(jīng)典入門教程A Pera Global Company 2009 PERA China不要括號(hào)不要括號(hào)Python使用縮進(jìn)而不是括號(hào)來(lái)進(jìn)行代碼段標(biāo)識(shí),減少了視覺(jué)上的混亂,并且使程序變短,從而提高了程序的可讀性。Python經(jīng)典入門教程A Pera Global Company 2009 PERA Chinavs. PerlPerl是另一種廣泛使用(濫用)的動(dòng)態(tài)高級(jí)語(yǔ)言,經(jīng)常被用來(lái)與Python 比較。正則表達(dá)式的典范催生了CGI、PHP黑客最喜愛(ài)的語(yǔ)言Larry Wa
9、ll Perl語(yǔ)言之父,語(yǔ)言學(xué)家兩屆國(guó)際C語(yǔ)言混亂代碼大賽(IOCCC) 的冠軍第一屆自由軟件獎(jiǎng)得主Python經(jīng)典入門教程A Pera Global Company 2009 PERA China程序員的三大美德程序員的三大美德懶惰:懶惰:能讓人盡量減少總能量支出的美德。它使你寫出節(jié)省腦力、可以重用的代碼;也督促你為程序?qū)懽⑨尯臀臋n,那樣你就不用回答各種問(wèn)題。所以它是程序員的第一大美德。所以有了這本書(shū)。參見(jiàn)下兩條。不耐煩:不耐煩:當(dāng)電腦想偷懶時(shí)你爆發(fā)的怒氣. 它使你寫的代碼能主動(dòng)預(yù)測(cè)、而非被動(dòng)滿足用戶需求,至少裝作是這樣。所以它是程序員的第二大美德。 參見(jiàn)懶惰和傲慢。傲慢:傲慢:自傲到人神共
10、憤的程度,也是一種品質(zhì),能使你編寫(維護(hù))的程序讓人無(wú)可指摘。所以它是程序員的第三大美德. 參見(jiàn)前兩條。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China觀點(diǎn)觀點(diǎn)Perl之父Larry Wall:“做一件事有很多種方法”Python資深開(kāi)發(fā)者Tim Peters:“做一件事,應(yīng)該有一種最直觀的方法,而且最好只有一種?!盤ython之父Guido Van Rossum: “做一件事情只有一種方法”Python經(jīng)典入門教程A Pera Global Company 2009 PERA Chinavs. RubyRuby:比Python更年輕的動(dòng)態(tài)語(yǔ)言
11、完全面向?qū)ο笾С终齽t表達(dá)式整合了多種語(yǔ)言的優(yōu)勢(shì)Ruby on Rails 網(wǎng)站快速開(kāi)發(fā)工具松本行弘松本行弘 (“Matz”)“不要重復(fù)自己”Python經(jīng)典入門教程A Pera Global Company 2009 PERA China國(guó)籍?國(guó)籍?語(yǔ)言語(yǔ)言作者作者作者國(guó)籍作者國(guó)籍編程風(fēng)格編程風(fēng)格PerlLarry Wall美國(guó)隨性自由PythonGuido van Rossum荷蘭優(yōu)雅統(tǒng)一Ruby松本行弘 (“Matz”)日本兼容并包Python經(jīng)典入門教程A Pera Global Company 2009 PERA China大綱大綱起源起源特性特性用途用途不足不足如何學(xué)習(xí)如何學(xué)習(xí)A P
12、era Global Company 2009 PERA ChinaPython經(jīng)典入門教程A Pera Global Company 2009 PERA China用途用途腳本程序大型程序的原型開(kāi)發(fā)科學(xué)計(jì)算網(wǎng)絡(luò)應(yīng)用計(jì)算機(jī)圖形編程Python經(jīng)典入門教程A Pera Global Company 2009 PERA China知名的知名的Python應(yīng)用應(yīng)用Zope:一個(gè)應(yīng)用程序服務(wù)器,具有內(nèi)容管理、團(tuán)隊(duì)開(kāi)發(fā)、XML、面向?qū)ο?、SOAP接口等一系先進(jìn)特性,開(kāi)源。Gadfly:一個(gè)用Python寫的面向?qū)ο箨P(guān)系型數(shù)據(jù)庫(kù),具有小巧、快速、可移植性好的特點(diǎn),具有大部分SQL語(yǔ)言特性。開(kāi)源。Wallb
13、ase: Python編寫的圖片站點(diǎn)。uTorrent : BitTorrent下載軟件,主程序僅2Mb,支持ipv6地址解析。開(kāi)源。Torchlight: Python編寫的大型3D游戲,原Blizzard公司人員制作發(fā)行,開(kāi)源。Python經(jīng)典入門教程A Pera Global Company 2009 PERA ChinaGoogle Apps Engine“Google App Engine 可讓您在 Google 的基礎(chǔ)架構(gòu)上運(yùn)行您的網(wǎng)絡(luò)應(yīng)用程序。App Engine 應(yīng)用程序易于構(gòu)建和維護(hù),并可根據(jù)您的訪問(wèn)量和數(shù)據(jù)存儲(chǔ)需要的增長(zhǎng)輕松擴(kuò)展。使用 Google App Engine,將
14、不再需要維護(hù)服務(wù)器:您只需上傳您的應(yīng)用程序,它便可立即為您的用戶提供服務(wù)。”Python 為GAE的數(shù)據(jù)存儲(chǔ)區(qū)、Google 帳戶、網(wǎng)址抓取和電子郵件服務(wù)提供了豐富的 Python API。GAE還提供了一個(gè)稱為webapp的簡(jiǎn)單 Python 網(wǎng)絡(luò)應(yīng)用程序框架,從而可以輕松開(kāi)始構(gòu)建應(yīng)用程序。Python經(jīng)典入門教程A Pera Global Company 2009 PERA ChinaGAE的主要服務(wù)的主要服務(wù)動(dòng)態(tài)網(wǎng)絡(luò)服務(wù),提供對(duì)常用網(wǎng)絡(luò)技術(shù)的完全支持持久存儲(chǔ)空間,支持查詢、分類和事務(wù)自動(dòng)擴(kuò)展和負(fù)載平衡用戶身份驗(yàn)證和使用 Google 帳戶發(fā)送電子郵件的 API一套在本地模擬 GAE的開(kāi)發(fā)
15、環(huán)境用于在指定時(shí)間和定期觸發(fā)事件的計(jì)劃任務(wù)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China兩個(gè)例子兩個(gè)例子“集體智慧編程集體智慧編程”根據(jù)品味相似度進(jìn)行電影推薦(第2章)家族旅行問(wèn)題的最優(yōu)化算法(第5章)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China根據(jù)品味相似度進(jìn)行電影推薦根據(jù)品味相似度進(jìn)行電影推薦基本思路:從一大群人中找出與我們品味相近的一小群人,對(duì)這些人所喜愛(ài)的其他內(nèi)容進(jìn)行考查,并把它們組合起來(lái)創(chuàng)建一個(gè)經(jīng)過(guò)排名的推薦列表。(協(xié)作過(guò)濾 Collaborative Filtering)步驟:
16、1.搜集偏好2.尋找相似的用戶3.推薦電影Python經(jīng)典入門教程A Pera Global Company 2009 PERA China搜集偏好搜集偏好首先找到一種表示不同人及其偏好的電影的方法??梢允褂萌藢?duì)幾部電影的評(píng)分來(lái)刻畫(huà)他們的偏好,評(píng)分從1到5,分?jǐn)?shù)越高,表示某人對(duì)該電影越喜歡。如何建立這種從人到電影的對(duì)應(yīng)關(guān)系?Python中有一個(gè)很簡(jiǎn)單的方法來(lái)表示這種數(shù)據(jù)結(jié)構(gòu):使用嵌套的字典嵌套的字典。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China搜集偏好搜集偏好創(chuàng)建名為recommandations.py 的數(shù)據(jù)文件:critics=Lisa
17、 Rose: Lady in the Water: 2.5, Snakes on a Plane: 3.5,Just My Luck: 3.0, Superman Returns: 3.5, You, Me and Dupree: 2.5,The Night Listener: 3.0,Gene Seymour: Lady in the Water: 3.0, Snakes on a Plane: 3.5,Just My Luck: 1.5, Superman Returns: 5.0, The Night Listener: 3.0,You, Me and Dupree: 3.5Toby:
18、Snakes on a Plane:4.5,You, Me and Dupree:1.0,Superman Returns:4.0Python經(jīng)典入門教程A Pera Global Company 2009 PERA China搜集偏好搜集偏好我們可以使用交互控制臺(tái)對(duì)字典的數(shù)據(jù)進(jìn)行查詢和修改: from recommendations import critics criticsLisa RoseLady in the Water2.5 criticsTobySnakes on a Plane=4.5 criticsTobySnakes on a Plane:4.5,You, Me and D
19、upree:1.0Python經(jīng)典入門教程A Pera Global Company 2009 PERA China尋找相似的用戶尋找相似的用戶收集了人們的偏好數(shù)據(jù)后,我們需要方法來(lái)計(jì)算某兩個(gè)人電影品味的相似度。有兩種基本的方法可以實(shí)現(xiàn)這個(gè)目的:歐幾里得距離歐幾里得距離皮爾遜相關(guān)度皮爾遜相關(guān)度Python經(jīng)典入門教程A Pera Global Company 2009 PERA China歐幾里得距離評(píng)價(jià)歐幾里得距離評(píng)價(jià)以二維空間中的情形為例:設(shè)坐標(biāo)軸為人們都評(píng)價(jià)過(guò)的兩部電影,然后將參與評(píng)價(jià)的人根據(jù)他們對(duì)這兩部電影的評(píng)分繪制到圖上,并考察他們彼此間的距離,如圖:圖中的點(diǎn)距離越近,表明兩個(gè)人的偏
20、好越接近。推廣到多維向量空間,歐幾里得法可表示為:計(jì)算每一軸上兩點(diǎn)的差值求平方,再將各軸相加,最后取平方根。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China歐幾里得距離評(píng)價(jià)歐幾里得距離評(píng)價(jià)如計(jì)算Toby和LaSalle的距離: from math import sqrt sqrt(pow(5-4,2)+pow(4-1,2)3.1622776601683795為了給偏好接近的情況給出較大的值,可取該值的倒數(shù),并+1避免除數(shù)為0: 1/(1+sqrt(pow(5-4,2)+pow(4-1,2)0.24421Python經(jīng)典入門教程A Pera Gl
21、obal Company 2009 PERA China歐幾里得距離評(píng)價(jià)歐幾里得距離評(píng)價(jià)使用這種方法 構(gòu)造出如下相似度函數(shù):def sim_distance(prefs,person1,person2):# 得到共同的電影得到共同的電影si=for item in prefsperson1:if item in prefsperson2:siitem=1# 如果沒(méi)有共同的電影則返回如果沒(méi)有共同的電影則返回0if len(si)=0: return 0#計(jì)算歐幾里得距離,返回相似度計(jì)算歐幾里得距離,返回相似度 Sum_of_squares=sum(pow(prefsperson1item-pre
22、fsperson2item,2)for item in prefsperson1 if item in prefsperson2)return 1/(1+sum_of_squares)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China皮爾遜相關(guān)度皮爾遜相關(guān)度皮爾遜相關(guān)系數(shù)是一種更復(fù)雜的方法,它通過(guò)計(jì)算兩組數(shù)據(jù)與某一直線擬合的程度來(lái)判斷它們的相似程度。該方法有助于克服所謂的“夸大評(píng)價(jià)”現(xiàn)象對(duì)結(jié)果的影響。右圖中,雖然Jack對(duì)電影的評(píng)價(jià)比Lisa更為極端(更容易給出高分和低分),但這個(gè)坐標(biāo)系中的點(diǎn)都相當(dāng)靠近擬合曲線(圖中虛線),可以說(shuō)兩人的品味較為相
23、近。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China皮爾遜相關(guān)度皮爾遜相關(guān)度使用如下函數(shù)計(jì)算皮爾遜相關(guān)度,該函數(shù)返回一個(gè)-1到1的值:def sim_pearson(prefs,p1,p2):# 得到共同評(píng)價(jià)的電影得到共同評(píng)價(jià)的電影si=for item in prefsp1:if item in prefsp2: siitem=1# 如果沒(méi)有共同評(píng)價(jià)的電影,返回如果沒(méi)有共同評(píng)價(jià)的電影,返回0if len(si)=0: return 0# 將兩人的偏好相加將兩人的偏好相加sum1=sum(prefsp1it for it in si)sum2=
24、sum(prefsp2it for it in si)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China皮爾遜相關(guān)度皮爾遜相關(guān)度# 計(jì)算平方和計(jì)算平方和sum1Sq=sum(pow(prefsp1it,2) for it in si)sum2Sq=sum(pow(prefsp2it,2) for it in si)# 計(jì)算對(duì)應(yīng)項(xiàng)的乘積和計(jì)算對(duì)應(yīng)項(xiàng)的乘積和pSum=sum(prefsp1it*prefsp2it for it in si)# 計(jì)算皮爾遜相關(guān)度計(jì)算皮爾遜相關(guān)度num=pSum-(sum1*sum2/n)den=sqrt(sum1Sq-
25、pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)if den=0: return 0r=num/denreturn rPython經(jīng)典入門教程A Pera Global Company 2009 PERA China皮爾遜相關(guān)度皮爾遜相關(guān)度在交互式控制臺(tái)中使用上述兩種計(jì)算方法: reload(recommendations) recommendations.sim_distance(recommendations.critics,. Lisa Rose,Gene Seymour)0.148148148148 recommendations.sim_pearson(re
26、commendations.critics,. Lisa Rose,Gene Seymour)0.396059017191Python經(jīng)典入門教程A Pera Global Company 2009 PERA China給評(píng)論者打分給評(píng)論者打分有了對(duì)兩個(gè)人進(jìn)行比較的函數(shù),下面就可以找出與某人品味最接近的人了,進(jìn)而,可以根據(jù)這些人的喜好來(lái)推薦電影。def topMatches(prefs,person,n=5,similarity=sim_pearson):scores=(similarity(prefs,person,other),other)for other in prefs if oth
27、er!=person# 對(duì)對(duì)list排序,相似度最高的人排在最前排序,相似度最高的人排在最前scores.sort( )scores.reverse( )return scores0:n在交互控制臺(tái)中使用該函數(shù): recommendations.topMatches(recommendations.critics,Toby,n=3)(0.991241, Lisa Rose), (0.92447345164190486, Mick LaSalle),(0.893405, Claudia Puig)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China推
28、薦電影推薦電影我們固然可以選擇只看那些和我們品味相近的人推薦的電影,但這樣做太武斷,也許某部電影大家普遍都覺(jué)得不錯(cuò),而恰好與我們最相近的那個(gè)人沒(méi)有看過(guò)。所以,我們需要一種對(duì)推薦人進(jìn)行加權(quán)的推薦,如下表:給Toby的電影推薦表Python經(jīng)典入門教程A Pera Global Company 2009 PERA China推薦電影推薦電影S.X打頭的列是經(jīng)過(guò)加權(quán)的電影評(píng)分。下面的代碼給出了上述過(guò)程的具體實(shí)現(xiàn):def getRecommendations(prefs,person,similarity=sim_pearson):totals=simSums=for other in prefs:#
29、 不和自己比不和自己比if other=person: continuesim=similarity(prefs,person,other)# 忽略小于等于忽略小于等于0的評(píng)分的評(píng)分if sim reload(recommendations) recommendations.getRecommendations(recommendations.critics,Toby)(3.3477895267131013, The Night Listener), (2.8325499182641614, Lady in theWater), (2.53645, Just My Luck) recommen
30、dations.getRecommendations(recommendations.critics,Toby,. similarity=recommendations.sim_distance)(3.55877, The Night Listener), (2.7561242939959363, Lady in theWater), (2.4619884860743739, Just My Luck)結(jié)果顯示,人們?yōu)門oby推薦了三部電影,而且用兩種相似度地算方法得到的列表是一樣的 。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China總結(jié)總結(jié)到
31、此為止,我們建立了一個(gè)完整的推薦系統(tǒng),它適用于任何的商品推薦以及基于相似度的數(shù)據(jù)關(guān)系挖掘。而這一切在Python中,僅僅是建立一個(gè)涉及人、商品以及評(píng)價(jià)值的字典,然后根據(jù)某些相似度算法得出的人與人的相似度,就可以進(jìn)行推薦了。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China家族旅行問(wèn)題的最優(yōu)化算法家族旅行問(wèn)題的最優(yōu)化算法問(wèn)題描述:Glass一家住在美國(guó)不同的地方。他們希望在紐約相聚,在同一天從各地坐飛機(jī)到紐約,幾天后再一起離開(kāi)。每天有許多往返的航班,起飛時(shí)間、價(jià)格以及飛行時(shí)間都不相同?,F(xiàn)在需要找到一種好的日程安排,使得大家的旅行花費(fèi)盡可能少、等待親
32、友的時(shí)間盡可能短、乘坐飛機(jī)的時(shí)間盡可能短。建立文件optimization.py,加入如下代碼:people = (Seymour,BOS),(Franny,DAL),(Zooey,CAK),(Walt,MIA),(Buddy,ORD),(Les,OMA)#目的地:紐約目的地:紐約LaGuardia機(jī)場(chǎng)機(jī)場(chǎng)destination=LGAPython經(jīng)典入門教程A Pera Global Company 2009 PERA China問(wèn)題分析問(wèn)題分析首先要找到一種通用的表示日程安排方案的方法。然后,為了描述某種方案的好壞,需要定義某種函數(shù)。在優(yōu)化問(wèn)題中,這個(gè)函數(shù)叫做代價(jià)函數(shù)(cost funci
33、ton)。一個(gè)方案越好,它的代價(jià)函數(shù)值越小。這樣找最優(yōu)方案的問(wèn)題轉(zhuǎn)化為找代價(jià)函數(shù)值最小的方案的問(wèn)題。最后設(shè)法找出具有最小代價(jià)函數(shù)值的方案,完成優(yōu)化過(guò)程。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China導(dǎo)入數(shù)據(jù)導(dǎo)入數(shù)據(jù)從網(wǎng)址 可以下載到航班數(shù)據(jù),格式如下:LGA,MIA,20:27,23:42,169MIA,LGA,19:53,22:21,173LGA,BOS,6:39,8:09,86分別是起點(diǎn)、終點(diǎn)、起飛時(shí)間、到達(dá)時(shí)間和機(jī)票價(jià)格。將數(shù)據(jù)載入到以起止點(diǎn)為鍵、以航班詳情為值的字典中:flights=for line in file(schedule
34、.txt):origin,dest,depart,arrive,price=line.strip( ).split(,)flights.setdefault(origin,dest),)# 將航班詳情加入到航班字典的值中將航班詳情加入到航班字典的值中flights(origin,dest).append(depart,arrive,int(price)Python經(jīng)典入門教程A Pera Global Company 2009 PERA China描述方案描述方案如何描述各種方案呢?一個(gè)通用的方法是使用數(shù)字列表,它使得之后描述的優(yōu)化算法并不依賴于具體的問(wèn)題。本例中,用數(shù)字表示某人乘坐當(dāng)天的第幾
35、趟航班,0代表第一趟,1代表第二趟,以此類推。由于每個(gè)人都要選擇往和返兩趟班機(jī),所以列表的總長(zhǎng)是人數(shù)的兩倍。例如:1,4,3,2,7,3,6,3,2,4,5,3該方案表示Seymour坐第2趟航班去紐約,坐第5趟航班回波士頓Franny坐第4趟航班去紐約,坐第3趟回達(dá)拉斯。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China代價(jià)函數(shù)代價(jià)函數(shù)代價(jià)函數(shù)的選取是優(yōu)化算法的重要環(huán)節(jié)。本例中,可以綜合考慮如下因素來(lái)構(gòu)造代價(jià)函數(shù):價(jià)格:價(jià)格: 所有航班的總票價(jià)旅行時(shí)間旅行時(shí)間:所有人在飛機(jī)上度過(guò)的總時(shí)間等待時(shí)間等待時(shí)間: 在機(jī)場(chǎng)等待其他成員到達(dá)的總時(shí)間出發(fā)時(shí)間
36、出發(fā)時(shí)間: 早晨太早起飛的航班有額外的代價(jià),因?yàn)槁眯姓咚卟蛔闫囎庥脮r(shí)間:汽車租用時(shí)間: 如果集體租車,那么他們最好在某個(gè)時(shí)間前將車歸還,否則會(huì)多付租金。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China代價(jià)函數(shù)代價(jià)函數(shù)限于篇幅,就不給出代價(jià)函數(shù)的全部代碼了,使用方法如下: reload(optimization) optimization.schedulecost(s)5285有了代價(jià)函數(shù),下面就是找到具有最小函數(shù)值的方案了。在這個(gè)例子中有16個(gè)航班、每個(gè)航班都有9種可能,所有的可能數(shù)為916,約3000億,所以窮舉是不現(xiàn)實(shí)的。下面使用兩種方
37、法實(shí)現(xiàn)優(yōu)化:隨機(jī)優(yōu)化隨機(jī)優(yōu)化爬山法爬山法Python經(jīng)典入門教程A Pera Global Company 2009 PERA China隨機(jī)優(yōu)化隨機(jī)優(yōu)化隨機(jī)生成一些方案,找出其中最好的方案。隨機(jī)生成一些方案,找出其中最好的方案。def randomoptimize(domain,costf):best=999999999bestr=Nonefor i in range(1000):#隨機(jī)生成一個(gè)方案隨機(jī)生成一個(gè)方案r=random.randint(domaini0,domaini1)for i in range(len(domain)# 計(jì)算代價(jià)計(jì)算代價(jià)cost=costf(r)# 與當(dāng)前最
38、優(yōu)方案的代價(jià)比較與當(dāng)前最優(yōu)方案的代價(jià)比較if costdomainj0:neighbors.append(sol0:j+solj+1+solj+1:)if solj reload(optimization) domain=(0,8)*(len(optimization.people)*2) s=optimization.randomoptimize(domain,optimization.schedulecost) optimization.schedulecost(s)3328 optimization.printschedule(s)Seymour Boston 12:34-15:02 $
39、109 12:08-14:05 $142Franny Dallas 12:19-15:25 $342 9:49-13:51 $229Zooey Akron 9:15-12:14 $247 15:50-18:45 $243Walt Miami 15:34-18:11 $326 14:08-16:09 $232Buddy Chicago 14:22-16:32 $126 15:04-17:23 $189Les Omaha 15:03-16:42 $135 6:19- 8:13 $239Python經(jīng)典入門教程A Pera Global Company 2009 PERA China查看結(jié)果查看結(jié)果
40、 s=optimization.hillclimb(domain,optimization.schedulecost) optimization.schedulecost(s)3063 optimization.printschedule(s)Seymour BOS 12:34-15:02 $109 10:33-12:03 $ 74Franny DAL 10:30-14:57 $290 10:51-14:16 $256Zooey CAK 10:53-13:36 $189 10:32-13:16 $139Walt MIA 11:28-14:40 $248 12:37-15:05 $170Budd
41、y ORD 12:44-14:17 $134 10:33-13:11 $132Les OMA 11:08-13:07 $175 18:25-20:34 $205Python經(jīng)典入門教程A Pera Global Company 2009 PERA China總結(jié)總結(jié)在本例中,首先使用Python的列表對(duì)不同的方案進(jìn)行了數(shù)學(xué)建模,然后根據(jù)一些指標(biāo)建立了代價(jià)函數(shù),最后使用兩種方法實(shí)現(xiàn)了優(yōu)化過(guò)程。在整個(gè)過(guò)程中,Python的簡(jiǎn)單易用讓我們能夠集中精力解決實(shí)際的問(wèn)題。而無(wú)需過(guò)多關(guān)注編程本身。此外,Python的交互控制臺(tái)使得編程與調(diào)試過(guò)程變得自然順暢。Python經(jīng)典入門教程A Pera Global
42、 Company 2009 PERA China大綱大綱起源起源特性特性用途用途不足不足如何學(xué)習(xí)如何學(xué)習(xí)A Pera Global Company 2009 PERA ChinaPython經(jīng)典入門教程A Pera Global Company 2009 PERA China硬幣的另一面硬幣的另一面限制限制Python發(fā)展的因素發(fā)展的因素缺乏預(yù)包裝的解決方案缺乏預(yù)包裝的解決方案數(shù)據(jù)庫(kù)訪問(wèn)層的局限性數(shù)據(jù)庫(kù)訪問(wèn)層的局限性文檔差距文檔差距缺乏缺乏GUI和團(tuán)隊(duì)協(xié)作工具和團(tuán)隊(duì)協(xié)作工具Python經(jīng)典入門教程A Pera Global Company 2009 PERA China限制限制Python發(fā)展
43、的因素發(fā)展的因素缺乏預(yù)包裝的解決方案缺乏預(yù)包裝的解決方案PHP 在企業(yè)軟件領(lǐng)域贏得了輝煌的成功,主要原因就在于其廣泛實(shí)用的產(chǎn)品門類,比如討論板、聊天服務(wù)器和分組日歷以及即時(shí)消息系統(tǒng)等。相比之下,Python提供的解決方案就少多了。Python語(yǔ)言的分發(fā)版中確實(shí)包含了一些擴(kuò)展的類庫(kù),越來(lái)越多的程序員也在致力于開(kāi)發(fā)等價(jià)PHP的Python工具,但是考慮到市場(chǎng)的時(shí)間緊迫性,而且你所面臨的問(wèn)題已經(jīng)有現(xiàn)成的PHP解決方案可以對(duì)付,那么PHP自然會(huì)成為你的首選。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China限制限制Python發(fā)展的因素發(fā)展的因素?cái)?shù)據(jù)庫(kù)訪問(wèn)層的局限性數(shù)據(jù)庫(kù)訪問(wèn)層的局限性相比現(xiàn)有的成熟技術(shù),比如ODBC和JDBC,Python的數(shù)據(jù)庫(kù)訪問(wèn)層看起來(lái)就過(guò)于原始了。雖然這一方面也在發(fā)生變化,但是,開(kāi)發(fā)部門需要平滑地接合現(xiàn)有的復(fù)雜遺留數(shù)據(jù),同時(shí)需要快速的SQL數(shù)據(jù)庫(kù)訪問(wèn),所有這一些使其在短時(shí)期內(nèi)難以對(duì)Python表現(xiàn)出什么太大的興趣。Python經(jīng)典入門教程A Pera Global Company 2009 PERA China限制限制Python發(fā)展的因素發(fā)展的因素文檔差距文檔差距相比其對(duì)手語(yǔ)言,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程法規(guī)考試中常見(jiàn)的陷阱試題及答案
- 2025年中級(jí)會(huì)計(jì)實(shí)務(wù)考試信心提升試題及答案
- 公司理財(cái)綠色協(xié)議書(shū)
- 風(fēng)險(xiǎn)共擔(dān)的財(cái)務(wù)方法考題及答案
- 醫(yī)療設(shè)備終止協(xié)議書(shū)
- 財(cái)務(wù)管理課程復(fù)習(xí)的重要知識(shí)點(diǎn)試題及答案
- 臺(tái)球球桌租用協(xié)議書(shū)
- 廠區(qū)承包合同協(xié)議書(shū)
- 醫(yī)師備案聘用協(xié)議書(shū)
- 醫(yī)院特聘顧問(wèn)協(xié)議書(shū)
- GB/T 30565-2025無(wú)損檢測(cè)渦流檢測(cè)總則
- 食堂承包餐飲管理制度
- 企業(yè)文化宣傳合同樣本
- 鄉(xiāng)村助理醫(yī)師考試知識(shí)運(yùn)用試題及答案
- 2025年中國(guó)商業(yè)銀行同業(yè)業(yè)務(wù)行業(yè)深度分析、投資前景及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告(智研咨詢)
- 中考專項(xiàng)復(fù)習(xí)訓(xùn)練:課外古詩(shī)詞練習(xí)(附答案)
- 2025年高考作文素材積累:熱點(diǎn)人物+小眾金句
- 道路運(yùn)輸汛期安全教育
- 2025醫(yī)療機(jī)構(gòu)數(shù)據(jù)分類分級(jí)規(guī)范
- 軟件實(shí)施工程師個(gè)人述職報(bào)告
- 會(huì)議資料制作合同范本
評(píng)論
0/150
提交評(píng)論