邊預(yù)測(cè)畢業(yè)論文設(shè)計(jì)_第1頁
邊預(yù)測(cè)畢業(yè)論文設(shè)計(jì)_第2頁
邊預(yù)測(cè)畢業(yè)論文設(shè)計(jì)_第3頁
邊預(yù)測(cè)畢業(yè)論文設(shè)計(jì)_第4頁
邊預(yù)測(cè)畢業(yè)論文設(shè)計(jì)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第[1]USAirNSPBYeastC.elegansFWFBPowerRouterAUC0.95420.97960.92340.91510.84660.60530.62500.6522在這八個(gè)網(wǎng)絡(luò)中,前5個(gè)網(wǎng)絡(luò)的復(fù)雜性高,邊多且密度大。而數(shù)據(jù)顯示,在這些網(wǎng)絡(luò)中,以CN為基礎(chǔ)的預(yù)測(cè)算法的AUC值很高,即預(yù)測(cè)算精度較高,說明CN指標(biāo)更實(shí)用于連接密度較高的網(wǎng)絡(luò)。

第四章邊預(yù)測(cè)實(shí)驗(yàn)本章將導(dǎo)入一個(gè)真實(shí)網(wǎng)絡(luò)——微信好友網(wǎng)絡(luò),將其作為預(yù)測(cè)插件的應(yīng)用對(duì)象。在真實(shí)網(wǎng)絡(luò)中,隱藏幾條真實(shí)邊,并利用預(yù)測(cè)插件對(duì)隱藏真實(shí)邊后的網(wǎng)絡(luò)進(jìn)行邊預(yù)測(cè)。最后,分別將預(yù)測(cè)結(jié)果與真實(shí)網(wǎng)絡(luò)進(jìn)行對(duì)比,分析預(yù)測(cè)插件的可行性與可信度。第一節(jié)真實(shí)網(wǎng)絡(luò)導(dǎo)入首先,需要進(jìn)行網(wǎng)絡(luò)建模,即將真實(shí)的關(guān)聯(lián)關(guān)系構(gòu)造為可視的網(wǎng)絡(luò)圖。在這里,我們將采用微信好友網(wǎng)絡(luò),其中節(jié)點(diǎn)代表微信用戶,邊描述了用戶之間的好友關(guān)系。在該網(wǎng)絡(luò)中,網(wǎng)絡(luò)結(jié)構(gòu)經(jīng)調(diào)查所得,而用戶姓名則為化名。第一步,我們先選取我身邊的七名同學(xué):楊珍、陳霖、王亞、龍宇、傅小平、劉一飛、吳語。他們互相之間都為微信好友。同時(shí),在他們微信好友中任意選取四名好友,用以構(gòu)建網(wǎng)絡(luò),得到簡單的網(wǎng)絡(luò)如下圖所示:圖4.1.1微信好友網(wǎng)絡(luò)原始圖同時(shí),調(diào)查他們之間有無好友關(guān)系,在網(wǎng)絡(luò)中用連邊表示。結(jié)果如下:圖4.1.2微信好友網(wǎng)絡(luò)局部完整圖于是,我們得到了一個(gè)較為完整的微信好友網(wǎng)絡(luò)。在圖中,劉大毛和王杰與最初選取的七名同學(xué)構(gòu)成了完全圖,因?yàn)檫@九名同學(xué)曾在一個(gè)班學(xué)習(xí)。其余好友與這七名同學(xué)間無類似特殊關(guān)系。第二節(jié)預(yù)測(cè)插件應(yīng)用及結(jié)果在本實(shí)驗(yàn)中,主要是在隱藏真實(shí)邊的前提下,應(yīng)用預(yù)測(cè)插件對(duì)網(wǎng)絡(luò)進(jìn)行邊預(yù)測(cè)。1、實(shí)驗(yàn)一:直接應(yīng)用預(yù)測(cè)功能對(duì)真實(shí)網(wǎng)絡(luò)進(jìn)行邊預(yù)測(cè)。得到的結(jié)果如下圖所示:圖4.2.1直接預(yù)測(cè)結(jié)果圖2、實(shí)驗(yàn)二:將實(shí)驗(yàn)一預(yù)測(cè)后的結(jié)果作為完整的真實(shí)網(wǎng)絡(luò),隱藏劉大毛與王杰兩節(jié)點(diǎn)之間的邊,同時(shí)隱藏楊珍、陳霖之間的邊,然后應(yīng)用預(yù)測(cè)功能對(duì)網(wǎng)絡(luò)進(jìn)行操作。隱藏真實(shí)邊之后的網(wǎng)絡(luò)如下圖所示:圖4.2.2隱藏邊后的原始圖預(yù)測(cè)后的結(jié)果如下:圖4.2.3隱藏兩邊的預(yù)測(cè)結(jié)果圖3、實(shí)驗(yàn)三:隱藏楊天天、李凱之間的連接,并用對(duì)隱藏后的網(wǎng)絡(luò)進(jìn)行邊預(yù)測(cè)操作。隱藏真實(shí)邊后的網(wǎng)絡(luò)如下:圖4.2.4隱藏楊天天與李凱連邊的網(wǎng)絡(luò)圖預(yù)測(cè)后的結(jié)果如下:圖4.2.5隱藏連邊后的預(yù)測(cè)結(jié)果圖第三節(jié)預(yù)測(cè)結(jié)果分析實(shí)驗(yàn)一中,通過對(duì)真實(shí)網(wǎng)絡(luò)的邊預(yù)測(cè),結(jié)果顯示任意一、任朗間可能存在連接。而在真實(shí)網(wǎng)絡(luò)中,經(jīng)過調(diào)查發(fā)現(xiàn),任意一、任朗確實(shí)相識(shí),但是不是微信好友,因此這個(gè)預(yù)測(cè)結(jié)果是較為準(zhǔn)確的。這說明了邊預(yù)測(cè)功能確實(shí)具有可行性。實(shí)驗(yàn)二中,對(duì)真實(shí)的網(wǎng)絡(luò)連接,即節(jié)點(diǎn)對(duì)劉大毛、王杰和楊珍、陳霖之間的邊進(jìn)行了隱藏,并以此作為邊預(yù)測(cè)的目標(biāo)網(wǎng)絡(luò)。在得到的結(jié)果中,準(zhǔn)確地預(yù)測(cè)出了這兩條邊。以劉大毛與王杰為例,經(jīng)調(diào)查發(fā)現(xiàn)這兩者具有七個(gè)共同好友,而且他們兩者與這七名共同好友的相識(shí)是在同一個(gè)環(huán)境中,而不是分別在不同環(huán)境中單獨(dú)與七個(gè)好友相識(shí),因此,他們兩者間產(chǎn)生關(guān)聯(lián)的可能性本身就很大,這都與預(yù)測(cè)結(jié)果相吻合。而大多數(shù)情況都與實(shí)驗(yàn)二相似,只要所預(yù)測(cè)的邊周圍的網(wǎng)絡(luò)結(jié)構(gòu)達(dá)到一定的復(fù)雜度,預(yù)測(cè)結(jié)果就具有較高的可信度。而在實(shí)驗(yàn)三中,隱藏了楊天天與李凱之間的連接后,對(duì)其進(jìn)行邊預(yù)測(cè),并未得到期望的結(jié)果,即預(yù)測(cè)未得到隱藏的真實(shí)邊。這說明,對(duì)于楊天天與李凱只見的邊無法實(shí)現(xiàn)預(yù)測(cè)。但是,這并不代表邊預(yù)測(cè)功能結(jié)果不具有在實(shí)驗(yàn)二中可知一般情況下,邊預(yù)測(cè)結(jié)果是可信的。那么,為什么會(huì)出現(xiàn)無法準(zhǔn)確預(yù)測(cè)的情況呢?主要原因是信息的不足,對(duì)于楊天天與李凱,他們的度都非常小,即使有共同鄰居,但是因?yàn)榫W(wǎng)絡(luò)中展現(xiàn)的信息略少,無法確定更多地共同好友,而在微信圈中,由于好友途徑的多樣性,即使有著共同好友,但他們與共同鄰居之間的關(guān)聯(lián)聯(lián)系未必是相同或相似的。所以要使邊預(yù)測(cè)具有較高的可信度,所預(yù)測(cè)的邊需處于較為復(fù)雜的網(wǎng)絡(luò),即必須有一定的鄰居信息基礎(chǔ)。綜上所訴,在復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)中,本文實(shí)現(xiàn)的邊預(yù)測(cè)插件能有效的進(jìn)行邊預(yù)測(cè),而且結(jié)果與真實(shí)情況的相符度很高,但是在過于簡單的網(wǎng)絡(luò)結(jié)構(gòu)中,該算法的能力受到極大限制。

總結(jié)預(yù)測(cè)是指在不知道目標(biāo)真實(shí)狀態(tài)的情況下,通過研究、假設(shè),并基于一定的信息基礎(chǔ)對(duì)其進(jìn)行合理的推測(cè)。它在每一門學(xué)科中都占據(jù)一定的主導(dǎo)地位。在當(dāng)今的大數(shù)據(jù)時(shí)代,對(duì)于錯(cuò)綜復(fù)雜而又無比龐大的數(shù)據(jù),網(wǎng)絡(luò)建模因其可視化和易于演化等特性,成為了數(shù)據(jù)處理中主導(dǎo)的方法之一。節(jié)點(diǎn)和邊是網(wǎng)絡(luò)的兩大基本單元,在數(shù)據(jù)處理中,節(jié)點(diǎn)往往對(duì)應(yīng)著研究對(duì)象的單體,一般是已知的。邊作為描述研究對(duì)象之間的關(guān)聯(lián)關(guān)系,總是成為網(wǎng)絡(luò)分析的重點(diǎn)對(duì)象。而本文主要著眼于當(dāng)下流行的網(wǎng)絡(luò)分析處理軟件Cytoscape,著重研究邊預(yù)測(cè)方法,并將兩者結(jié)合,以插件形式在Cytoscape中實(shí)現(xiàn)邊預(yù)測(cè)功能。首先,本文就邊預(yù)測(cè)的用途開始展開,解釋邊預(yù)測(cè)的研究必要,同時(shí)綜述了邊預(yù)測(cè)方法中基于相似性的各項(xiàng)指標(biāo)。并對(duì)目標(biāo)軟件Cytoscape進(jìn)行的簡要的介紹。其次,從Cytoscape插件開發(fā)著手,研究Cytoscape的軟件結(jié)構(gòu),并了解Cytoscape的運(yùn)行機(jī)制及模塊分布,為下一步開發(fā)插件打下基礎(chǔ)。同時(shí),介紹Cytosacape內(nèi)部的接口與服務(wù)器,了解其具有的功能及相應(yīng)的控制接口和函數(shù),并介紹常用操作的編程控制。重點(diǎn)通過“HelloWorld”和隱藏節(jié)點(diǎn)功能為例,示范簡單的Cytoscape二次開發(fā),較為清晰地介紹簡單插件的制作。在主體部分,本文分析并選定相似性指標(biāo)下的算法實(shí)現(xiàn)思想以及基于簡單插件的邊預(yù)測(cè)插件實(shí)現(xiàn)。通過示例展示邊預(yù)測(cè)插件的功能,并對(duì)其算法進(jìn)行評(píng)估。同時(shí),選定真實(shí)網(wǎng)絡(luò),通過對(duì)刪除真實(shí)邊作為邊預(yù)測(cè)的初始數(shù)據(jù),并通過對(duì)邊預(yù)測(cè)結(jié)果與真實(shí)網(wǎng)絡(luò)的對(duì)比,分析邊預(yù)測(cè)插件的可行性和局限性,并對(duì)全文進(jìn)行總結(jié)回顧。本文雖實(shí)現(xiàn)了Cytoscape的邊預(yù)測(cè)功能,但其算法還有較大的局限性,在算法中各指標(biāo)的運(yùn)用太單調(diào),單純地運(yùn)用一項(xiàng)指標(biāo)并不能非常精確地刻畫網(wǎng)絡(luò)的邊預(yù)測(cè)。同時(shí),本文實(shí)驗(yàn)中,與其他相同領(lǐng)域的研究論文相比,實(shí)驗(yàn)數(shù)據(jù)量較少,而實(shí)際中網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量都比較大,未來將進(jìn)一步研究邊預(yù)測(cè)方法在大數(shù)據(jù)環(huán)境下的網(wǎng)絡(luò)應(yīng)用。Cytoscape網(wǎng)絡(luò)處理分析功能在當(dāng)前時(shí)代已占據(jù)相當(dāng)重要的地位,而由于它的開源特性,更使其有著非常大的發(fā)展前景。同樣,邊預(yù)測(cè)在網(wǎng)絡(luò)地復(fù)雜應(yīng)用中更是占據(jù)了一席之地。隨著時(shí)代發(fā)展,這兩者必能更好的結(jié)合。屆時(shí),預(yù)測(cè)算法將非常完善,所用預(yù)測(cè)指標(biāo)也必將是各類指標(biāo)的完美結(jié)合。最終,Cytoscape將能夠完美的展現(xiàn)適用于各類環(huán)境且功能強(qiáng)大、可信度高的邊預(yù)測(cè)功能。

參考文獻(xiàn)呂琳媛,周濤.鏈路預(yù)測(cè)[M].北京:.高等教育出版社,2013.劉軍.社會(huì)網(wǎng)絡(luò)分析導(dǎo)論[M].北京:社會(huì)科學(xué)文獻(xiàn)出版社,2004.王志平,王眾托.超網(wǎng)絡(luò)理論及其應(yīng)用[M].北京:科學(xué)出版社,2008.呂琳媛.復(fù)雜網(wǎng)絡(luò)鏈路預(yù)測(cè)[J].電子科技大學(xué)學(xué)報(bào).2010,39(5):651-661.王林,商超.無標(biāo)度網(wǎng)絡(luò)中的鏈路預(yù)測(cè)問題研究[J].計(jì)算機(jī)工程,2012,38(3):67-84.滕兆明.多維社會(huì)網(wǎng)絡(luò)中鏈路預(yù)測(cè)方法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(9):9-21.史定華.無標(biāo)度網(wǎng)絡(luò):基礎(chǔ)理論和應(yīng)用研究[J].電子科技大學(xué)學(xué)報(bào),2010,39(5):644-650.KatzL.Anewstatusindexderivedfromsociometricindex[J].Psychometrika,1953,18(1):39-43.HanelyJA,McNeilBJ.Themeaninganduseoftheareaunderareceiveroperatingcharacteristic(ROC)curve[J].Radiology,1983,143:29-36.AdamicLA,AdarE.Friendandneighborsontheweb[J].SocialNetworks,2003,25(3):211-230.KleinDJ,RandicM.Resistancedistance[J].JournalofMathmaticalChemistry,1993,12(1):81-95.CytoscapeConsortium.Cytoscape3Tutorials.,2011年12月5日.NewmanMEJ.Communities,modulesandlarge-scalestructureinnetworks[J].NaturePhysics,2011,8(1):25-31.TanenbaumAS.ComputerNetworks[M].NewYork:PrenticeHallPress,1996.AlonU.Networkmotifs:theoryandexperimentalapproaches[J].NatureReviewsGenetics,2007,8(6):450-461.RapoportA,HorvathWJ.Astudyofalargesociogram[J].BehavioralScience,1991,6(4):279-291.EverettMG,BorgrattiSP.Regularequivalence:generaltheory[J].TheJournalofmathematicalsociology,1994,19(1):29-52.ScholkopfB,SmolaA.LearningwithKernels[M].Cambridge:TheMITPress,2002GoodmanLA.Snowballsampling[J].AnnalsofMathematicalStatics,1961,32(1):148-170.FawcettT.AnintroductiontoROCanalysis[J].PatternRecgnitionLetters,2006,27(8):861-874.

附錄附錄ACytoscape的內(nèi)部編程控制:(一)Swing應(yīng)用怎么在控制面板中添加標(biāo)簽面板在Cytoscape界面上有三個(gè)cyto面板,分別是左側(cè)的控制面板,右側(cè)的結(jié)果面板和下方的數(shù)據(jù)面板。而給cyto面板增加一個(gè)標(biāo)簽面板的操作也很簡單,app開發(fā)者需要做的就是定義一個(gè)實(shí)現(xiàn)了CytoPanelomponent服務(wù)器的JPanel類,并把它申明為OSGi服務(wù)器,Cytoscape內(nèi)部的CYtoPanel管理器會(huì)自動(dòng)拾起這個(gè)新申明的被定義為CytoPanelComponent,并把這個(gè)新的面板添加到特定的靶Cyto面板中。具體程序如下,第一步:第二步:怎么給工具欄添加功能按鈕有時(shí)候,目標(biāo)應(yīng)用需要在Cytoscape菜單中添加一個(gè)菜單項(xiàng)或是在Cytoscape工具欄中添加一個(gè)功能按鈕。在這種情況下,應(yīng)用開發(fā)者需要先定義一個(gè)實(shí)現(xiàn)了CyAction或是拓展了AbstractCAction的類,然后把它申明為一個(gè)OSGi服務(wù)器。Cytoscape內(nèi)部的CyAction管理器會(huì)拾起這個(gè)新申明的服務(wù)器,并按照定義創(chuàng)建一個(gè)菜單項(xiàng)。注意方法isInToolbar()和isInMenu(),它們返回的值是true或false決定了菜單項(xiàng)(功能按鈕)是否會(huì)被創(chuàng)建。程序如下,第一步申明類:第二步申明為服務(wù)器:怎么創(chuàng)建一個(gè)子菜單創(chuàng)建子菜單的方法和定義菜單項(xiàng)是差不多的,不同的是創(chuàng)建子菜單在定義菜單項(xiàng)的同時(shí)還需要定義它的根菜單項(xiàng),程序如下,第一步定義:第二步申明:注意:應(yīng)用可以用子菜單顯示功能,以下是可能的范圍:實(shí)現(xiàn)單一功能,應(yīng)用可以在Apps菜單下申明一個(gè)單一子菜單。實(shí)現(xiàn)多功能,應(yīng)用可以在Apps菜單下申明一個(gè)子菜單,然后在這個(gè)子菜單下再申明多個(gè)單一功能的第二層子菜單。對(duì)于有更復(fù)雜接口的Apps可以在提供的non-App菜單下添加子菜單,它們會(huì)提供解釋新的子菜單的文件——這種情況很少見。(二)模型怎么創(chuàng)建、修改和刪除一個(gè)網(wǎng)、節(jié)點(diǎn)或邊創(chuàng)建一個(gè)網(wǎng)需要從CyNetworkFactory服務(wù)器中引用并告訴服務(wù)器要?jiǎng)?chuàng)建一個(gè)網(wǎng)。有了這個(gè)新的網(wǎng),我們可以通過CyNetwork的接口來創(chuàng)建節(jié)點(diǎn)和邊。代碼如下:同樣,我們通過

CyNetworkManager服務(wù)器實(shí)現(xiàn)網(wǎng)絡(luò)的刪除。首先,在CyActivator服務(wù)器的開始方法中,添加如下代碼:之后,我們就能在代碼中運(yùn)用CyNetworkManager了:怎樣決定網(wǎng)絡(luò)中的哪個(gè)節(jié)點(diǎn)是當(dāng)前被選中的邊和節(jié)點(diǎn)的選擇狀態(tài)保存在一個(gè)與當(dāng)前網(wǎng)絡(luò)相關(guān)聯(lián)的表中,它的屬性或列名為“selected”。因此,為了決定節(jié)點(diǎn)的選擇狀態(tài),我們需要獲取節(jié)點(diǎn)的CyRow并驗(yàn)證“selected”列的值。Cytoscape中有一個(gè)util類CyTableUtil。我們可以通過這個(gè)類來獲取網(wǎng)絡(luò)中被選中的節(jié)點(diǎn)的清單。代碼如下:如何設(shè)定網(wǎng)絡(luò)的名稱網(wǎng)絡(luò)的名稱保存在一個(gè)與網(wǎng)絡(luò)關(guān)聯(lián)的表中,其中,表的列名為“name”。為了設(shè)定網(wǎng)絡(luò)的名稱,首先我們需要獲得目標(biāo)網(wǎng)絡(luò)的CyRow,然后設(shè)定網(wǎng)絡(luò)對(duì)應(yīng)行的“name”屬性。代碼如下:如何設(shè)定和獲取節(jié)點(diǎn)的名稱同樣的,節(jié)點(diǎn)的名稱也被保存在與網(wǎng)絡(luò)關(guān)聯(lián)的表的CyRow中,列名“name”,與網(wǎng)絡(luò)名稱類似,我們要先獲取目標(biāo)節(jié)點(diǎn)的CyRow,然后設(shè)定或獲取對(duì)應(yīng)行的“name”屬性。代碼如下:如何載入屬性數(shù)據(jù)導(dǎo)入屬性數(shù)據(jù)有三個(gè)步驟:第一步,創(chuàng)建一個(gè)主鍵為“name”的全局表;第二步,將屬性數(shù)據(jù)填入新創(chuàng)建的表中;第三步,將新創(chuàng)建的表映射到基于主鍵屬性的靶向表。在屬性表載入后,它將繼續(xù)作為獨(dú)立的表存在Cytoscape內(nèi)部,它和合并表的關(guān)系在靶向表中保持指向或引用。靶向表可以是節(jié)點(diǎn)屬性表、邊屬性表或者是網(wǎng)絡(luò)表。在合并的表中,新創(chuàng)建的列被稱為合并表的“虛擬列”。在表瀏覽項(xiàng)中,虛擬列被用與其它列不同的顏色來顯示,用以表明它們是虛擬列。代碼如下:如何完成屬性的移除第一步:通過網(wǎng)絡(luò)獲得Cytable:第二步:找到對(duì)應(yīng)列,然后把它刪除:如何獲取具有特定屬性值的所有節(jié)點(diǎn)獲取具有特定屬性值有固定的方法,方法代碼如下:如何在寫測(cè)試程序的時(shí)候使用目標(biāo)模型第一步:在你的pom.xml中包含Junit框架作為從屬,內(nèi)容如下:第二步:在你的pom.xml中包含model-impl包作為從屬,內(nèi)容如下:第三步:在測(cè)試代碼中,用NetworkTestSupport獲取一個(gè)CyNetwork實(shí)例,代碼如下:如何驗(yàn)證一種屬性是否存在如果你不在乎一個(gè)屬性的當(dāng)前值,僅僅是想驗(yàn)證它對(duì)應(yīng)的列是否有定義應(yīng)該怎么做呢?用CyTable中的getColumn(String)方法,代碼如下:例如,為了驗(yàn)證“test”屬性是否存在,將使用以下代碼:這對(duì)于節(jié)點(diǎn)和邊的表而言是一致的。(三)視圖模型為新創(chuàng)建的節(jié)點(diǎn)獲取節(jié)點(diǎn)的視圖在新創(chuàng)建一個(gè)節(jié)點(diǎn)或者邊后,獲取其視圖的代碼如下:在CyNetwork中創(chuàng)建新的節(jié)點(diǎn)后,你需要調(diào)用CyEventHelper的flushPayloadEvents()函數(shù)后新創(chuàng)建的節(jié)點(diǎn)才會(huì)獲得一個(gè)節(jié)點(diǎn)視圖,如果沒有調(diào)用,getNodeView會(huì)返回null值。如果你要一次創(chuàng)建一堆節(jié)點(diǎn),應(yīng)該在所有節(jié)點(diǎn)創(chuàng)建完成后調(diào)用flushPayloadEvents()函數(shù),而不是在每個(gè)節(jié)點(diǎn)完成時(shí),例如:如何創(chuàng)建、改變和刪除一個(gè)網(wǎng)絡(luò)視圖創(chuàng)建一個(gè)網(wǎng)絡(luò),我們要獲取CyNetworkViewFactory服務(wù)器的權(quán)限,然后用它來創(chuàng)建一個(gè)網(wǎng)絡(luò)視圖。首先,在你的CyActivator類的開始方法中寫入如下代碼:這樣,你就可以在你的代碼中使用CyNetworkViewFactory了,使用方法如下:代碼中,我們要通過CyNetworkViewManager

服務(wù)器才能完成網(wǎng)絡(luò)視圖的刪除。因此,我們要先獲取CyNetworkViewManager

服務(wù)器的使用權(quán)限,獲取權(quán)限的代碼如下:代碼中,我們要通過CyNetworkViewManager

服務(wù)器才能完成網(wǎng)絡(luò)視圖的刪除。因此,我們要先獲取CyNetworkViewManager

服務(wù)器的使用權(quán)限,獲取權(quán)限的代碼如下:獲得權(quán)限后,我們就能在代碼中使用CyNetworkViewManager了,使用方法如下代碼所示:如何改變視圖的背景顏色網(wǎng)絡(luò)視圖的背景顏色是利用view的setVisualProperty方法,以下代碼顯示了改方法的使用方式,在下面代碼中,我們把背景顏色設(shè)為紅色:如何獲取和設(shè)定節(jié)點(diǎn)的坐標(biāo)位置假設(shè)現(xiàn)在有一個(gè)視圖<CyNode>,得到它橫坐標(biāo)x和縱坐標(biāo)y的需要用的是nodeView.getVisualProperty方法,它的使用方式如下面代碼所示:而設(shè)定橫縱坐標(biāo)則是用nodeView.setVisualProperty方法,它的是用方式如下代碼所示:如何編寫布局算法首先,我們要定義一個(gè)實(shí)現(xiàn)CyLayoutAlgorithm接口或拓展了AbstractLayoutAlgorithm類的布局類,然后把這個(gè)布局類申明為服務(wù)器。代碼如下所示:如何給節(jié)點(diǎn)視圖,邊視圖和屬性瀏覽器的目錄菜單添加組件給NodeView添加一個(gè)目錄菜單要定義一個(gè)拓展了AbstractNodeView-TaskFactory類的子類,并將NodeViewTaskFactory申明為服務(wù)器。我們能在將NodeViewTaskFactory申明為服務(wù)器時(shí),通過設(shè)定服務(wù)器的性能來添加菜單項(xiàng)的標(biāo)題。給表瀏覽器添加目錄菜單,要先定義一個(gè)拓展了AbstractTableCellTaskFactory類的子類,并創(chuàng)建一個(gè)實(shí)例,將它申明為服務(wù)器(注意應(yīng)申明為TableCellTaskFactory),代碼如下:下面是更新網(wǎng)絡(luò)視圖的代碼片段:如何在節(jié)點(diǎn)和邊存在前設(shè)定可視屬性的值Cytoscape將網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和表模型與其視圖模型相分離。視圖模型突出的是節(jié)點(diǎn)和邊的外觀和可視化,當(dāng)節(jié)點(diǎn)和邊在網(wǎng)絡(luò)中創(chuàng)建時(shí),它們的視圖模型需要在事件的觸發(fā)才會(huì)被創(chuàng)建(觸發(fā)器是org.cytoscape.event.CyEventHelper.flushPayloadEvents()),這是為了避免Cytoscape在構(gòu)建網(wǎng)絡(luò)的過程中對(duì)網(wǎng)絡(luò)進(jìn)行不必要的重畫。但是網(wǎng)絡(luò)和表模型與視圖模型的分離在你需要給結(jié)構(gòu)中不具備試圖的節(jié)點(diǎn)和邊賦予可視性質(zhì)的值時(shí)會(huì)存在問題。為了說明這個(gè)問題,我們提出了DelayedVizProp類,代碼如下。當(dāng)建立一個(gè)網(wǎng)絡(luò)時(shí),先創(chuàng)建DelayedVizProp實(shí)例,并將它們排列在一個(gè)清單中。在調(diào)用org.cytoscape.event.CyEventHelper.flushPayloadEvents()方法后,在包含所需節(jié)點(diǎn)和邊的網(wǎng)絡(luò)視圖中調(diào)用applyAll。(四)VizMapper如何程序化地使用VizMapperCytoscape為使用可視化繪圖設(shè)計(jì)提供服務(wù)。這些服務(wù)主要通過服務(wù)器VisualMappingManager、VisualStyleFactory及VisualMapping-FunctionFactory來實(shí)現(xiàn)。應(yīng)用需要在它的入口點(diǎn)CyActivator類中獲得這些服務(wù)器的引用。我們能用VisualStyleFactory和VisualMappingFunctionFactory方便快捷地創(chuàng)建新的可視化類型和繪圖函數(shù)。在一個(gè)新的可視化類型創(chuàng)建后,我們要用

VisualMappingManger來申明,這樣,新的可視化類型在Cytoscape中就能使用了。下面是一個(gè)簡單示例的代碼:如何依據(jù)節(jié)點(diǎn)的度數(shù)將持續(xù)的色彩梯度應(yīng)用到節(jié)點(diǎn)中直接有可行的函數(shù),代碼如下:如何載入可視性質(zhì)的文件Cytoscape直接提供了一個(gè)名為'LoadVizmapFileTaskFactory的服務(wù)器來載入在性質(zhì)文件中定義的可視化類型。使用示例如下代碼:輸入輸出創(chuàng)建支持特定格式的網(wǎng)絡(luò)讀入器,首先,我們要定義網(wǎng)絡(luò)文件的格式和它的文件擴(kuò)展名。例如,每條線在網(wǎng)絡(luò)中有兩列,限定標(biāo)簽的。我們定義文件擴(kuò)展名為“.tc”代表兩列(twocolumns)。一個(gè)簡單的應(yīng)用代碼如下:編譯以上應(yīng)用,并在Cytoscape中安裝該應(yīng)用。當(dāng)我們嘗試從文件中導(dǎo)入網(wǎng)絡(luò)時(shí)(),我們會(huì)發(fā)現(xiàn)類型“.tc”在Cytoscape支持的文件類型中。創(chuàng)建支持特定格式的表讀入器的方法與上述一致。(五)工作如何使用Cytoscape的任務(wù)監(jiān)控器來展示工作的進(jìn)程過程很簡單,先獲取Cytoscape的DialogManager服務(wù)器,然后通過taskManager來執(zhí)行任務(wù)。具體實(shí)施代碼如下:如何使用可調(diào)諧的注釋作為應(yīng)用,可能會(huì)需要生成對(duì)話框并讓使用者輸入。而生成這樣的對(duì)話框有一種簡單的方式:先定義一個(gè)任務(wù),然后使用可調(diào)諧的注釋,讓Cytoscape自動(dòng)生成對(duì)話框。在任務(wù)類中,定義一個(gè)類域、類的數(shù)據(jù)類型和描述,具體如下例子所示:當(dāng)類被初始化后,Cytoscape的核心服務(wù)器TunableInterceptor會(huì)檢查這個(gè)類,并根據(jù)可調(diào)諧的注釋來生成用戶界面。在這種情況下,帶有描述“scale”和缺省值“0.2”的文本域會(huì)自動(dòng)在生成的對(duì)話框中出現(xiàn)。注意,在上述例子中,數(shù)據(jù)類型是“double”,同時(shí),數(shù)據(jù)類型還能使“int”“boolean”“String”或“List”。如果一個(gè)域被定義為可調(diào)諧的,數(shù)據(jù)類型為“boolean”,那么對(duì)話框中會(huì)生成一個(gè)喇叭按鈕。(六)會(huì)話如何保存或重置應(yīng)用的狀態(tài)對(duì)于保存和重置應(yīng)用的狀態(tài)又兩個(gè)非常重要的事件,它們是SessionAboutToBeSavedEvent和SessionLoadedEvent。應(yīng)用必須執(zhí)行這兩個(gè)監(jiān)聽器并注冊(cè)它們。使用示例代碼如下:如何用CyProperty保存會(huì)話中的值CyProperty就像一個(gè)容器,保存著會(huì)話中類型(主鍵、值)的性質(zhì)。它們能被使用者在菜單選項(xiàng)中手動(dòng)改變。首先要從創(chuàng)建一個(gè)AbstractConfigDirPropsReader的子類開始,代碼如下:然后在你的CyActivator中申明這個(gè)讀入器:接著,在你的應(yīng)用資源目錄中創(chuàng)建一個(gè)包含性質(zhì)主鍵和其缺省值的文件:缺省的性質(zhì)會(huì)在應(yīng)用運(yùn)行的第一時(shí)間從應(yīng)用的jar中導(dǎo)入。同時(shí),當(dāng)Cytoscape停止運(yùn)行時(shí),性質(zhì)會(huì)被保存在Cytoscape的config目錄或者是依賴于你指定的保存路徑的會(huì)話文件。性質(zhì)的值能通過選中菜單Edit中Preferences下的properties后再選中對(duì)話框中的“myApp”進(jìn)行編輯。同樣,我們能把性質(zhì)讀入器保存為OSGi服務(wù)器。(七)方程式通過Cytoscape應(yīng)用添加新的屬性函數(shù),我們將會(huì)展示所有創(chuàng)建一個(gè)嵌入函數(shù)IXOR()需要的所有步驟。完整的示例代碼能在這里被下載。最簡單的部分是寫插件類,它和下面代碼類似:在這里,我們申明一個(gè)名為Ixor的嵌入函數(shù),你也可以申明你喜歡的其他嵌入函數(shù)。接下來,要為每一個(gè)新建的嵌入函數(shù)創(chuàng)建對(duì)應(yīng)的類。而每個(gè)類通常要通過org.cytoscape.equations.AbstractFunction來實(shí)現(xiàn)與之相對(duì)應(yīng)的org.cytoscape.equations.Function接口。最簡單的方法是仔細(xì)閱讀Cytoscape核心庫中存在的潛入方程式,并尋找一個(gè)具有相同或近似變?cè)淼暮瘮?shù)。如果找不到,閱讀一些已存函數(shù)的實(shí)現(xiàn)方法也會(huì)有幫助。首先,你要?jiǎng)?chuàng)建一個(gè)你用來描述函數(shù)的變量的構(gòu)造器,代碼如下:最基礎(chǔ)的實(shí)現(xiàn)方法有g(shù)etName()和getFunctionSummary(),使用方法如下代碼所示:下一個(gè)方法還是很簡單,但是它接觸到了一個(gè)在屬性函數(shù)中有點(diǎn)復(fù)雜的領(lǐng)域:數(shù)據(jù)類型及轉(zhuǎn)化,代碼如下:我們的示例函數(shù)將會(huì)返回一個(gè)整數(shù)值。整數(shù)在方程式函數(shù)中被當(dāng)作類java.lang.Long的實(shí)例。因此,不要返回整數(shù)值是十分必要的。函數(shù)的使用者可能并沒意識(shí)到這個(gè)問題,如果一直用long類型來代替整型則不會(huì)出問題。下一個(gè)方法evaluateFunction()會(huì)在一個(gè)表達(dá)被轉(zhuǎn)化為一個(gè)值是會(huì)被調(diào)用。這里不需要要核對(duì)變量類型,因?yàn)榫幾g器會(huì)自動(dòng)處理這個(gè)問題。但我們要解決所有能有效的變量類型和長度的問題(因?yàn)楹瘮?shù)值可能會(huì)溢出)。在下面的例子中,變量可以是任意的Long或Double類型:(八)網(wǎng)絡(luò)服務(wù)如何使用網(wǎng)絡(luò)服務(wù)客戶端首先先定義網(wǎng)絡(luò)服務(wù)客戶端的監(jiān)聽器并把它申明為服務(wù)器——WebServiceHelper。這個(gè)類通過映射來保持對(duì)網(wǎng)絡(luò)服務(wù)客戶端。代碼如下:在運(yùn)行時(shí),通過映射圖可以觀察到需要的服務(wù)是不是可行。代碼如下:當(dāng)需要的客戶端已經(jīng)能被發(fā)現(xiàn),我們就能通過客戶端的api創(chuàng)建和執(zhí)行查詢?nèi)蝿?wù)。怎么寫網(wǎng)絡(luò)服務(wù)客戶端第一步:為客戶端的設(shè)定定義一個(gè)用戶類,這個(gè)用戶會(huì)監(jiān)聽Cytoscape的事件。代碼如下:第二步:定義一個(gè)實(shí)現(xiàn)了WebServiceClient的客戶端類并把第一步中定義的類傳遞給客戶端,不然將會(huì)使用缺省的用戶類。代碼如下:第三步:把客戶端申明為服務(wù)器后,我們能在以下目錄中找到它:附錄B邊預(yù)測(cè)算法的MenuAction類的代碼:packageorg.cytoscape.myapp.my_cyaction_ernal;importjava.awt.Window.Type;importjava.awt.event.ActionEvent;importjava.util.Arrays;importorg.cytoscape.application.swing.AbstractCyAction;importorg.cytoscape.application.CyApplicationManager;importorg.cytoscape.model.CyNode;importorg.cytoscape.model.CyEdge;importorg.cytoscape.model.CyNetwork;importorg.cytoscape.view.model.CyNetworkView;importperty.BasicVisualLexicon;importperty.LineTypeVisualProperty;/**在Apps菜單項(xiàng)下添加新的菜單項(xiàng).*/publicclassMenuActionextendsAbstractCyAction{ privatefinalCyApplicationManagerapplicationManager; publicMenuAction(finalCyApplicationManagerapplicationManager,finalStringmenuTitle){ super(menuTitle,applicationManager,null,null); this.applicationManager=applicationManager; setPreferredMenu("Apps"); } publicvoidactionPerformed(ActionEvente){ finalCyNetworkViewcurrentNetworkView=applicationManager.getCurrentNetworkView(); if(currentNetworkView==null) return; //Viewisalwaysassociatedwithitsmodel. finalCyNetworknetwork=currentNetworkView.getModel(); intnodecnt=network.getNodeCount();//獲取網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量intneighbors[][]=newint[nodecnt][nodecnt];intnodei_index=0; //對(duì)網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)i的鄰居和j的鄰居list,計(jì)算兩列表相同節(jié)點(diǎn)的數(shù)量,記為icnt//將其存儲(chǔ)到數(shù)組neighborsfor(CyNodenodei:network.getNodeList()){ intnodej_index=0; for(CyNodenodej:network.getNodeList()){ inticnt=0; for(CyNodenodeik:network.getNeighborList(nodei,CyEdge.Type.ANY)){ if(network.getNeighborList(nodej,CyEdge.Type.ANY).contains(nodeik)) icnt+=1; } //若節(jié)點(diǎn)為自己或者已經(jīng)存在連邊,則共同鄰居數(shù)記為0 if((nodei_index==nodej_index)||(network.containsEdge(nodei,nodej))) neighbors[nodei_index][nodej_index]=0; else neighbors[nodei_index][nodej_index]=icnt; nodej_index+=1; } nodei_index+=1;}//對(duì)鄰居數(shù)量矩陣二維數(shù)組排序intcntcnt=nodecnt*nodecnt;intneighbors_matrixtoarray[]=newint[cntcnt];intkm=0;for(intk=0;k<nodecnt;k++)for(intm=0;m<nodecnt;m++) neighbors_matrixtoarray[km]=neighbors[k][m];Arrays.sort(neighbors_matrixtoarray);intnotzero=0;intzeronum=0;while(zeronum<cntcnt) if(neighbors_matrixtoarray[zeronum]==0){ notzero=notzero+1; zeronum=zeronum+1; }/**intneighbors_matrixtoarray2[]=newint[cntcnt];intrecount=0;while(recount<=cntcnt){ neighbors_matrixtoarray2[recount]=neighbors_matrixtoarray[cntcnt-recount]; recount=recount+1;}*/ /**//定義閾值高于5%且存在共同鄰居的節(jié)點(diǎn)對(duì)存在連邊intx=(int)Math.ceil(cntcnt/20);intx=(cntcnt-notzero)/20;int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論