




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
濟南大學畢業(yè)設計PAGE31-1前言1.1課題研究背景隨著市場經(jīng)濟的全球化,企業(yè)市場競爭變的越來越激勵,為了生存,企業(yè)的生產(chǎn)規(guī)模在不斷的擴大,而生產(chǎn)過程中的分工也越來越細,這就要求生產(chǎn)組織對資源分配要有高度的計劃性、合理性和經(jīng)濟性,在追求整體的生產(chǎn)效率和效益的同時,也要不斷的追求生產(chǎn)成本的最低性。要想達到這樣的目的,就要求企業(yè)要充分利用現(xiàn)有的人力資源,提出出最經(jīng)濟、最合理的任務分配方案,以減少成本、降低浪費、提高經(jīng)濟效益為目的,才能讓企業(yè)在經(jīng)濟全球化進程中立于不敗之地。運籌學是一門應用分析、量化、優(yōu)選的方法對經(jīng)濟管理系統(tǒng)中的人、財、物等資源進行統(tǒng)籌安排的學科,它能為決策者提供有定量依據(jù)的最優(yōu)方案,以實現(xiàn)最有效的管理。運籌學前期必修課程包括微積分、線性代數(shù)、概率論與數(shù)理統(tǒng)計等基礎理論知識,在實際應用中,運籌學涉及的面也是很廣的。可以說,運籌學是軟科學中“硬度”較大的一門學科,兼有邏輯的數(shù)學和數(shù)學的邏輯的性質(zhì),是現(xiàn)代經(jīng)濟管理科學中的基礎理論和一種不可缺少的方法、手段和工具;它是抽象的數(shù)學理論與豐富多彩的實踐相結(jié)合的“橋梁”;它為從事生產(chǎn)社會實踐和應用科學研究領域的工作人員提供了一套完整的數(shù)學方法,也為從事數(shù)學等理論研究的科研人員提供了廣闊的應用領域。運籌學從確定目標、制定方案、建立模型、制定解法都有一整套嚴密科學方法。自二戰(zhàn)以來,國內(nèi)外有很多國家都利用運籌學來解決本國的實際問題,在此過程中為各國節(jié)省了大量的人力、物力、財力等資源。在這個過程中運籌學也得到了許多的發(fā)展和研究,現(xiàn)階段國內(nèi)外很多公司都能很好地運用運籌學來解決任務分配問題以及其他問題。從21世紀的發(fā)展戰(zhàn)略上來看,勢必將是計算機的時代。各個領域都將會越來越依賴社會的整體科技創(chuàng)新能力和由此派生出來的知識經(jīng)濟,隨著計算機的不斷發(fā)展,人們逐漸地將計算機知識運用到其中。許多的問題都是依靠科學來建模,而用計算機來對模型進行求解。本次設計就是用運籌學的知識建立的一個任務分配的模型,在掌握數(shù)據(jù)結(jié)構(gòu)及其算法的基礎上,將數(shù)據(jù)由VB向VC++轉(zhuǎn)變,并在VC++6.0中實現(xiàn)最佳任務分配模型程序的設計和運行。在國外,有很多大公司都將運籌學建模能力與計算機語言結(jié)合起來,實現(xiàn)了對現(xiàn)有的資源優(yōu)化配置和任務的合理分配,從而實現(xiàn)了企業(yè)的理想目標。新中國成立后,我國對運籌學也開始逐漸注重,并用運籌學知識為我國解決了許多在管理、決策方面的問題,特別在解決多任務分配問題上,為決策人員節(jié)省了寶貴的時間,為企業(yè)節(jié)省了大量的資源。雖然近幾年,運籌學在我國發(fā)展比較快,但在運用和解決問題的能力上我們還與發(fā)達國家存在一定的差距。比如資源的優(yōu)化配置程度不高,在生產(chǎn)過程中還有很多不必要的浪費,任務分配不合理等現(xiàn)象還大量存在。1.2設計的內(nèi)容與意義假設有n個人,準備承擔m項工作(n>=m),每個人只能承擔一個任務,其中有的人不都能承擔個別任務,并且每個人承擔每個工作時的費用是已知的,要求制定一個任務分配方案,使所有完成任務所消耗的總費用最少。本選題的目的就是為了解決實際生產(chǎn)過程中的最佳任務分配問題,以運籌學的科學計算法為基礎,建立一個任務分配的模型,在掌握數(shù)據(jù)結(jié)構(gòu)及其算法的基礎上,將數(shù)據(jù)由VB向VC++轉(zhuǎn)變,并用C++語言實現(xiàn)最佳任務分配模型的程序設計,通過運行程序解得我們想要的最佳任務分配方案,以達到對資源及各種項目的優(yōu)化目的,從而達成理想的目標。通過本次設計,不僅能讓我們更多的了解和掌握運籌學的基礎知識,還能提高我們分析問題、解決問題的能力;大大地提高了我們的建模能力,進一步掌握了一門新的語言(VC++)和數(shù)據(jù)結(jié)構(gòu)及其算法。1.3設計的方法與步驟本次設計所用的主要算法是回溯法,設計的步驟大致可分為八步:(1)確定問題和分析問題;(2)建模;(3)編程;(4)求解模型;(5)界面設計;(6)試調(diào);(7)測試;(8)封裝。2運籌學的應用與發(fā)展2.1運籌學釋義與發(fā)展歷史運籌學一詞起源于20世紀30年代,運籌學最早起源于英國。在英國,運籌學一詞被稱為operationalresearch,據(jù)《大英百科全書》釋義,“運籌學是一門應用于管理有組織系統(tǒng)的科學”,“運籌學為掌管這類系統(tǒng)的人提供決策目標和數(shù)量分析的工具[1]”。在美國,運籌學被稱為operationsresearch(縮寫為O.R.),可直譯為“作業(yè)研究”或“運用研究”。其實簡單、樸素的運籌學思想在我國古代文獻中就有很多記載,例如丁渭主持修復皇宮和田忌賽馬等事。在1957年我國從“夫運籌帷幄之中,決勝千里之外”(見《史記·高祖本紀》)中摘取出“運籌”二字,將O.R.正式譯作運籌學,它包含運用籌劃,以策略取勝等意義,比較恰當?shù)胤磻诉@門學科的性質(zhì)和內(nèi)涵。《辭海》(1979年版)中將有關運籌學的條目釋義為:主要研究經(jīng)濟活動與軍事活動中能用數(shù)量來表達有關運用、策劃與管理方面的問題,根據(jù)問題的要求,通過數(shù)學的分析與運算,做出綜合性的合理安排,以達到經(jīng)濟有效地使用人力物力財力等資源。《中國企業(yè)管理百科全書》(1984年版)中的運籌學被釋義為:應用分析、試驗、量化的方法,對經(jīng)濟管理系統(tǒng)中人、財、物等有限資源進行統(tǒng)籌安排,為決策者提供有依據(jù)的最優(yōu)方案,以實現(xiàn)最快最有效的管理[1]”。運籌學的發(fā)展主要是在二戰(zhàn)以后,它將活動擴展到了工業(yè)和政府部門等相關部門,其發(fā)展大致可以分為以下三個階段[1]:(1)從1945年到20世紀50年代初,被稱為創(chuàng)建時期。特點是:從事運籌學研究的人少,范圍不大,運籌學的出版物、學會、研究所等寥寥無幾。(2)從20世紀50年代初期到50年代末期,被稱是運籌學的成長時期。此階段的主要特點是:隨著電子計算機技術(shù)的迅速發(fā)展,使得運籌學中一些方法例如單純形法、線性規(guī)劃法、動態(tài)規(guī)劃方法等,解決了實際管理系統(tǒng)中的優(yōu)化問題,促進了運籌學的推廣應用和發(fā)展。(3)自20世紀60年代以來,被稱為是運籌學的普及和迅速發(fā)展時期。特點是:運籌學被進一步細分為各個分支,各個專業(yè)學術(shù)團隊都迅速增多,也有了更多的期刊創(chuàng)辦,同時運籌學的書籍也大量出版和被更多學校將運籌學課程納入教學計劃之中。2.2運籌學研究的基本特征基本方法運籌學研究的基本特征科可概括為:系統(tǒng)的整體觀念、多學科的綜合、以及模型方法的應用[1]。系統(tǒng)的整體觀念可以理解為:具有相互關聯(lián)、相互制約和相互作用的部門組成的具有某種特定功能的有機整體。因為在運籌的研究過程不是對各個子系統(tǒng)的決策行為進行孤立的評價,而是把相互關聯(lián)的子系統(tǒng)的決策結(jié)合起來考慮,把相互影響和制約的各個方面作為有機的統(tǒng)一體,從系統(tǒng)的整體利益出發(fā),去尋找一個最優(yōu)化、最協(xié)調(diào)的方案。多學科的綜合可以理解為:由于每個組織或系統(tǒng)的有效管理都涉及很多方面,所以運籌學在研究中吸取了來自各個領域、具有不同經(jīng)驗和技能的專家和學者。這樣增強了小組的集體智慧、提出問題和解決問題的能力。這種多學科的協(xié)調(diào)與配合在研究初期;在分析、確定和解決問題的主要方面,在選定和探索解決問題的途徑時,顯得非常重要。模型方法的應用是指:各門學科的研究都廣泛運用實驗的方法,但是運籌學研究系統(tǒng)往往不能在實驗室中進行,而是用建立這個問題的數(shù)學模型或模擬模型來代替。其中制定決策和提供科學依據(jù)是運籌學的核心,建立模型則是運籌方法的精髓。任何一門學科從研究范圍上來講都大致可以分為四個方面:首先,觀察現(xiàn)象得到結(jié)果和進行觀察時所需的方法;其次,理論和模型的建立;再次,講觀察的現(xiàn)象與理論想結(jié)合,并從觀察到的結(jié)果中得到預測;最后,把預測的與先觀察到的想比較,并加以證實。而在運籌學中也不例外,我們將運籌學的研究步驟劃分為以下六:。(1)表述和分析問題;(2)建立模型;(3)求解模型和優(yōu)化方案;(4)測試和修正模型;(5)建立對解的有效控制;(6)方案的實施[1]。3數(shù)據(jù)結(jié)構(gòu)與C++界面設計3.1數(shù)據(jù)結(jié)構(gòu)與算法當談論到算法時,很自然的就會涉及到算法所需處理的數(shù)據(jù)問題,然而,在討論數(shù)據(jù)的結(jié)構(gòu)和組織時,如果離開了對此類數(shù)據(jù)的算法及其運算的研究,那么這個研究是沒有意義的。有人將程序描述為:程序=算法+數(shù)據(jù)結(jié)構(gòu)3.1.1數(shù)據(jù)結(jié)構(gòu)定義由數(shù)據(jù)元素依據(jù)某種邏輯關系組織起來的結(jié)構(gòu)我們成為數(shù)據(jù)結(jié)構(gòu)。這種對數(shù)據(jù)元素間的關系描述我們稱為數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)形式是數(shù)據(jù)的存儲結(jié)構(gòu),就是說它在計算機內(nèi)的表示;此外,討論數(shù)據(jù)結(jié)構(gòu)時必須同時討論該類在數(shù)據(jù)上的運算才有意義。下面介紹數(shù)據(jù)結(jié)構(gòu)中的幾個基本概念:(1)數(shù)據(jù)(data):籠統(tǒng)地說數(shù)據(jù)就是計算機加工處理的對象。它分為兩類:數(shù)值數(shù)據(jù)(numericaldata)和非值數(shù)據(jù)(non-ricaldata)。其中,數(shù)值數(shù)據(jù)一般是指整數(shù)、實數(shù)或復數(shù),它主要用于商務處理、工程計算和工程計算。而非數(shù)字數(shù)據(jù)則包括文字、圖像、圖形、字符、表格和語音等。(2)數(shù)據(jù)對象:它是實例或值的集合。(3)數(shù)據(jù)的邏輯結(jié)構(gòu):由于數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素見依據(jù)某種數(shù)據(jù)關系組織起來的,那么,這種數(shù)據(jù)元素間的邏輯關系的描述我們稱之為數(shù)據(jù)的邏輯結(jié)構(gòu)。用二元組表示為:DS=(D,R)(3.1)其中,D是數(shù)據(jù)元素的有限集合,R是D中元素序偶的集合。依據(jù)數(shù)據(jù)元素間關系特征的不同,將數(shù)據(jù)的邏輯結(jié)構(gòu)劃分為四類基本邏輯結(jié)構(gòu),即序列結(jié)構(gòu)或線性結(jié)構(gòu)、集合結(jié)構(gòu)、圖狀結(jié)構(gòu)和集合結(jié)構(gòu)。3.1.2算法什么是算法?簡單的說就是求解問題的方法;也可以籠統(tǒng)的說成是求解一類問題的任意一種算法;但嚴格的講:算法是指對特定問題求解步驟的一種描述,是指令的優(yōu)先序列。其中算法的特征有五個:(1)輸入(input):可以有零個或多個輸入;(2)輸出(output):至少要有一個輸出;(3)確定性(definiteness):每一條指令都要有確定的定義和沒有二義性;(4)能行性(effectiveness)每條指令都必須是最基本的,并且它們可以通過執(zhí)行有限次基本運算來實現(xiàn);(5)有窮性:算法必須在執(zhí)行有限步之后停止,不能成為死循環(huán)[2]。3.2數(shù)組數(shù)組是數(shù)組變量的簡稱,它是指一組具有相同數(shù)據(jù)類型的變量的集合。數(shù)組中的每一個數(shù)據(jù)都是一個元素,我們稱之為數(shù)組元素。數(shù)組元素之間都有固定的先后順序,所以對于數(shù)組來說只要知道了它的數(shù)組名和下標就可以確定數(shù)組元素。由于數(shù)組是一種大家都非常熟悉的數(shù)據(jù)類型,在數(shù)據(jù)結(jié)構(gòu)討論中,通常使用數(shù)組來描述數(shù)據(jù)結(jié)構(gòu)的順序表示,即使用數(shù)組來實現(xiàn)數(shù)據(jù)的順序存儲結(jié)構(gòu)。數(shù)組有一個特點就是一旦定義就不能再添加和刪除元素。在這里,我們只講二維數(shù)組,二維數(shù)組的一般表示為:數(shù)據(jù)類型數(shù)組名[常量表達式1][常量表達式2];其中,常量表達式1表示的是數(shù)組的行元素,常量表達式2表示的是數(shù)組的列元素。二維數(shù)組的下標是二維的,可以認為二維數(shù)組是每個元素是一維數(shù)組的一維數(shù)組。二維數(shù)組映射到一維存儲空間是一般有兩種順序:列優(yōu)先順序和行優(yōu)先順序。像Pascal、Basic、C和C++等大多數(shù)高級語言都是按行優(yōu)先的順序存儲。在Fortran中就是按列優(yōu)先順序存儲的。先設有m行n列的二維數(shù)組,它的第一個數(shù)組元素a[0][0]的存儲地址為Loc(a[0][0]),每個元素占k個存儲單元,那么數(shù)組元素a[i][j]的存儲地址Loc(a[i][j])為:Loc(a[i][j])=Loc(a[i][j])+(i*n+j)*k其中0≦i<m;0≦j<n[2](3.2)3.3堆棧堆棧簡稱棧(stack),它是一種限定插入和刪除運算只能在同一端進行的線性數(shù)據(jù)結(jié)構(gòu)。其中允許刪除和插入的一端叫做棧頂(top),另一端則稱為棧底(bottom)。當棧中沒有任何元素時我們稱之為空棧。棧的特點是后進先出(LIFO),即若給定棧S=(a0,a1,……,an_1,)其中a0稱為棧底元素,an_1稱為棧頂元素。如果在進棧時是從依次進展的話,那么在出棧時恰好相反,從an_1到a0依次出棧。棧的基本運算可包括為:(1)構(gòu)建一個空棧;(2)判斷一個棧是空棧還是滿棧;(3)棧的基本操作;即在一個未滿戰(zhàn)中插入一個新的元素或在一個滿棧中刪除棧頂元素。當然,在需要時,棧還有很多的算法,如清除一個棧、求棧的長度以及遍歷一個棧等等[2]。棧的抽象數(shù)據(jù)類型的定義:Stack{數(shù)據(jù):可以是零個元素也可以是多個元素的線性序列,它最大允許的長度為MaxStackSize。運算:VoidCreate()//后置條件:已構(gòu)成一個空棧VoidPush(constT&x)//前置條件:棧未滿;后置條件:新元素x進棧并成為棧頂元素VoidPop()//前置條件:棧非空;后置條件:從棧中刪除棧頂元素TTop()const//前置條件:棧非空;后置條件:返回棧頂元素的值BOOLIsEmpty()const//后置條件:若棧為空棧,則返回TRUE,否則返回FALSEBOOLIsFull()const//后置條件:若棧已滿,則返回TRUE,否則返回FALSE[2]由于數(shù)據(jù)存儲的表示方式有兩種:順序表示和鏈接表示。所以在堆棧的表示也有兩種:堆棧的順序表示和鏈接表示。其中順序表示是存儲一維數(shù)組時的表示方法,當然他也可以用鏈接來表示,只是沒有這個必要,因為順序表示比鏈接表示要簡單和方便的多。3.4回溯法當一個問題的解可以表示成一個n-元組(x0,x1,…,xn-1)時,要求求出滿足約束條件的可行解或進一步求使目標函數(shù)取最大(最小)值的最優(yōu)解時,大部分的問題都可以用回溯法求解。3.4.1基本術(shù)語(1)約束條件;約束條件是指問題在開始時給出的用于判斷一個候選問題是否是可行解。當解滿足約束條件時我們稱它為可行解,把給定的數(shù)值函數(shù)稱之為目標函數(shù),把用來衡量每個可行解的優(yōu)劣,即使目標函數(shù)的取值最大或最小的可行解。(2)顯(隱)式約束;將直接明顯限定每個取值的約束條件叫做顯式約束,將一些隱藏的的約束條件叫做隱式約束。(3)解空間;對于已給定的實例,滿足顯式約束的所有可能元組組成的問題候選解集,即對于一個問題實例,所有滿足顯式約束的元組解的集合稱為解空間。(4)成本函數(shù);在解決最優(yōu)化問題時,問題還需給出一個數(shù)值函數(shù)作為目標函數(shù),我們把這個給出的函數(shù)稱為成本函數(shù)。當判斷一個解是不是可行解時,只要看它能不能使成本函數(shù)最大或最小即可。3.4.2狀態(tài)空間樹在討論問題時,我們可以解的空間描述為一棵樹,這個描述問題解空間的樹的結(jié)構(gòu)稱為狀態(tài)空間樹。圖3-1是n=3的一種狀態(tài)空間樹。樹的每個結(jié)點稱為一個問題狀態(tài),對于樹中的一個問題狀態(tài),如果從根到該結(jié)點代表一個候選解的話,那么就成該問題的狀態(tài)為解狀態(tài)[2]。如圖3.1中,每個葉結(jié)點都是解狀態(tài)。1171227122351513810351513810161496411161496411圖3.1n=3的空間狀態(tài)樹3.4.3回溯法思想通過前面的介紹,我們知道用回溯法求解的問題的解的空間是用一顆狀態(tài)空間樹來描述的,那么很顯然,我們就可以通過搜索空間狀態(tài)樹的方法來求解狀態(tài)。其中一種最簡單的做法是:使用一種叫樹搜索的方法,當訪問樹中的每一個問題狀態(tài)結(jié)點時,如果是解狀態(tài),則用判定函數(shù)來確定每個解狀態(tài)是不是答案狀態(tài)。如果是最優(yōu)化問題,還可以在搜索過程中不斷的替代可行解,使目標函數(shù)最大或最小,以達到最優(yōu)解。事實上,狀態(tài)空間樹并不需要事先就生成,而只需在求解過程中隨著搜索算法的進展,逐步生成空間樹的所有結(jié)點。如果我們在搜索的過程中使用一個叫做限界函數(shù)的布爾函數(shù)去限制那些不可能包括的子樹答案狀態(tài),這樣就可以大大的減少訪問的樹中的結(jié)點。綜上所述,回溯法是指使用限界函數(shù)的深度優(yōu)先生成的狀態(tài)空間樹中結(jié)點的方法。其中由廣度優(yōu)先生成的結(jié)點,并使用了限界函數(shù)的方法我們稱之為分支限界法。3.4.4回溯法的算法結(jié)構(gòu)設(a[0],a[1],…,a[k-1])是狀態(tài)空間樹從根到某個問題狀態(tài)的路徑,M(a[0],a[1],…,a[k-1])是所有結(jié)點Z的集合,它可使得Z中的每個a[k]都是一條從根到Z的路徑,Nk(a[0],a[1],…,a[k-1])是界限函數(shù),如果上述的結(jié)點Z,a[k]∈M(a[0],a[1],…,a[k-1])且Nk(a[0],a[1],…,a[k-1]),那么需要檢測以Z為根的子樹,不然將不能生成以Z為根的子樹上的所有問題結(jié)點。狀態(tài)空間樹的任意一個葉結(jié)點X,集合M為空集[2]。其實回溯法的本質(zhì)是按照深度優(yōu)先的方式一個一個地生成狀態(tài)空間樹的結(jié)點,并且通過限界函數(shù)來檢測那些結(jié)點是答案的結(jié)點,如果不用限界函數(shù)檢測的話,就變成了窮舉法,所以說回溯法的優(yōu)點就是使用了限界函數(shù)剪去了那些不是答案的結(jié)點,從而提高了算法的效率。3.5VisualC++簡介計算機科學的每一步發(fā)展幾乎都是在程序設計語言和軟件設計中得到體現(xiàn)。像C++、ObjectiveC、Eiffel、Smalltalk等面向?qū)ο蟪绦蛟O計語言是在20世紀80年代才日趨成熟,才被廣泛應用到程序設計當中,并且從這以后也有了許多新的發(fā)展,歸納起來可分為兩大類:一類是純面向?qū)ο蟮恼Z言;另一類是混合型的面向?qū)ο笳Z言,其中C++則屬于混合型的面向?qū)ο笳Z言。3.5.1C++的特點與發(fā)展C++語言是由AT&T公司的貝爾實驗室的BjarneStioustrup博士開發(fā)的,它是一門高效實用的混合型面向?qū)ο蟮某绦蛟O計語言,它最初的設計目標是支持面向?qū)ο缶幊碳夹g(shù)和支持抽象形態(tài)的類。C++語言有兩個部分組成:一是基礎部分,它是C++語言的核心,它的核心是C語言,但又不完全等同于C語言,因為在它保留了C語言優(yōu)點的同時又是C語言的加強版,像C語言的語言能力強、風格簡潔、效率高和C語言的函數(shù)庫都被保留了下來,這也是C++能與C語言得以完美兼容的主要原因。當然,在繼承了C語言優(yōu)點的同時,C++語言對C語言進行了擴充,克服了C語言完全面向過程的缺點,使它變成能完全支持面向?qū)ο蟮某绦蛟O計語言。它最大的特點就是能夠支持類的概念。同時也支持像派生、繼承和多態(tài)性等層次結(jié)構(gòu)。類是由用戶定義的一種對數(shù)據(jù)進行封裝和對這些數(shù)據(jù)進行操作的函數(shù)。類使得抽象數(shù)據(jù)類型得以描述。除此之外,;類還為數(shù)據(jù)提供隱蔽,這就確保了程序的可靠性、穩(wěn)定性和可維護性。VisualC++的發(fā)展經(jīng)歷了VisualC++1.0、VisualC++1.5、VisualC++2.0、VisualC++4.0、VisualC++5.0、VisualC++6.0,隨著版本的更新,其功能已日漸完善。3.5.2C++程序的結(jié)構(gòu)要想編寫一個程序,我們必須了解和掌握程序的結(jié)構(gòu),對C++來說,它程序的基本框架可大致分為三部分:聲明區(qū)、主函數(shù)和函數(shù)定義區(qū)。(1)聲明區(qū)聲明區(qū)的位置是在現(xiàn)有程序的所有函數(shù)的外部,但并不是說每個程序都需要有聲明區(qū),要視情況而定。它所包含的內(nèi)容一般有以下幾種情況:1.包頭文件:如#include<iostream.h>;2.宏定義:如#definePI3.14159;3.函數(shù)聲明:如intadd(int,int);4.結(jié)構(gòu)體定義:如structrecord{…};5.類定義:如classname{…};6.條件編譯:如#ifdef;7.全局變量聲明[3]。為了使程序的結(jié)構(gòu)清晰,我們一般將聲明區(qū)放在一個源代碼文件中,這個文件就是我們常說的頭文件,頭文件是系統(tǒng)提供的,用戶可以直接調(diào)用,當用戶需要某些特殊的函數(shù)時,也可以自己編寫頭文件。(2)主函數(shù)區(qū)每一個程序都是有很多個函數(shù)組合而成的,但主函數(shù)只有一個,其中主函數(shù)區(qū)是以main()函數(shù)開始,是整個程序運行的入口。函數(shù)中可能包括下面的內(nèi)容:1.函數(shù)調(diào)用:如intm=add(x,y);2.局部變量的聲明:inti,j;3.結(jié)構(gòu)控制:if(m>n)m=n;4.系統(tǒng)函數(shù)調(diào)用;5.一般的運算:b=1;6.對象與結(jié)構(gòu)的處理等[3]。(3)函數(shù)定義區(qū)程序中除了主函數(shù)外,其他的函數(shù)差不多都需要用戶自己定義,并且定義函數(shù)時函數(shù)名既不能與系統(tǒng)函數(shù)重名也不能與已定義的函數(shù)重名。每個函數(shù)都是有兩個部分組成:函數(shù)的說明部分和函數(shù)體部分。函數(shù)的說明部分主要是定義函數(shù)的類型、函數(shù)名和函數(shù)的參數(shù)類型和參數(shù)名;函數(shù)體部分主要是實現(xiàn)函數(shù)的具體功能,它是由一對{}括起來的語句集合。4問題的描述及其解決方案隨著市場經(jīng)濟的全球化發(fā)展,企業(yè)的競爭越來越激勵,企業(yè)要想在競爭中立于不敗之地,就要不斷的降低自己產(chǎn)品的價格,降低價格的途徑可概括為兩條:降低原材料的價格和生產(chǎn)成本。如果采用降低原材料價格的方法,那么產(chǎn)品的質(zhì)量就會下降,這是企業(yè)在生產(chǎn)過程中最忌諱的,因為質(zhì)量是企業(yè)生存的根本,所以可以說這個方法是不可行的。那就只有采用第二種方法,降低生產(chǎn)成本。降低成本的方法有很多,其中最主要最有效的方法就是合理分配人員[13]。怎樣才能合理分配人員呢?解決的方法很多,其中用運籌學的知識來求解是最簡單最方便的.因為運籌學具有很強的建模能力,它能將人員分配問題變成一個二維的數(shù)組模型,通過對二維模型的求解來獲得最佳的任務分配方案。4.1問題的內(nèi)容與要求(1)問題的主要內(nèi)容:現(xiàn)假設有n個人,準備去承擔m項工作(n≥m),每個人只能承擔一個任務,有的個別任務是有的人不都能承擔的,且每個人承擔每個任務所需消耗的費用是已知的。要求制定一個任務分配方案,使完成所有任務所消耗總費用最少。(2)要求:要求在VC++環(huán)境下做一個輸入輸出界面,使其能在windows下運行,用戶只需在windows環(huán)境下啟動程序之后,輸入自己的人數(shù)、任務數(shù)和他們每個人做每項工作的所需費用后,點擊界面上的輸出按鈕就能自動鏈接并啟動程序,然后快速地運行出最佳的任務分配方案和消耗的總費用。4.2問題分析與模型設計通過上面問題的描述可知,參加工作的人數(shù)、工作的項目個數(shù)和每個人完成每個任務的費用是知到的。那么我們可以通過運籌學的線性關系建立一個二維數(shù)組數(shù)學模型,它的目標函數(shù)可描述為:Min(x1j+x2j+x3j+…+xnj)其中n(參加的人數(shù));j≦m(任務數(shù))(4.1)現(xiàn)在我們只需求解出目標函數(shù)的值并輸出相應的解即可,對于這類問題,在以前我們是用人為的科學算法來計算,但只能解決三個、四個人參加的模型,對于多個的如七個、八個的就沒法計算了,而現(xiàn)代我們可以將它轉(zhuǎn)變成計算機語言,借助于計算機計算來解決這個問題,這樣就好多了。需要注意的是:考慮到有的人不能承擔有的任務,我們將他做這項任務所消耗的費用值用設為0,而在程序的設計和運行時我們可以將它視為無窮大,可以直接跳過這個結(jié)點執(zhí)行下一個解。因為每個人在做任何一項任務時,他所耗費用都不可能為0,所以我們可以將不能承擔這項任務的人的費用值設為0。4.3方案設計的步驟上面已經(jīng)運用運籌學及其相關的知識對現(xiàn)有的問題做了定性分析,再在此基礎上我們可以確立各基礎變量、相關變量以及各變量之間的關系[15]。從而建立一個任務分配的數(shù)學模型。通過數(shù)據(jù)結(jié)構(gòu)及其算法尋找求解的算法,在確定用回溯發(fā)實現(xiàn)最佳任務分配模型求解后,再利用C++來進行編程。最后利用VisionC++進行界面設計,將界面從原來的dos界面改成更人性化的windows界面。程序設計的具體步驟為:(1)確立問題和分析問題;這一步是系統(tǒng)地分析問題和提出問題,確立一個系統(tǒng)或?qū)ΜF(xiàn)有系統(tǒng)的詳細分析開始,通過分析找到影響系統(tǒng)的最主要因素。另外,通過分析,還要明確系統(tǒng)或組織的主要目標,找出系統(tǒng)的主要變量和參數(shù),弄清變化范圍、相互關系以及對目標的影響。在問題提出后,還要分析解決該問題的可能性和可行性。一是要確定決策目標,即明確決策的對象是什么,選取上述決策的有效性度量以及在方案比較時這些度量的權(quán)衡;二是要辨認哪些因素是決策中的關鍵因素,在選取這些關鍵因素時存在哪些資源和環(huán)境的限制[11]。(2)建模;在對問題進行定量分析和表達之后,利用運籌學知識建立一個任務分配的模型,以C++語言為基礎,結(jié)合數(shù)學、數(shù)據(jù)結(jié)構(gòu)方面的知識來更精確、科學的表述問題,將運籌學模型轉(zhuǎn)變成計算機模型。(3)編程;使用C++語言實現(xiàn)棧的定義、數(shù)組的輸入、輸出和數(shù)據(jù)結(jié)構(gòu)的解的算法。(4)求解模型;在上述結(jié)構(gòu)語言都實現(xiàn)之后,將他們組合成一個系統(tǒng),通用輸入相應的數(shù)據(jù)后讓模型對其進行求解。(5)界面的設計;建立一個VisionC++的對話框,其中應包含輸入、輸出、數(shù)據(jù)顯示等控件,并且讓這些控件與程序中函數(shù)實現(xiàn)調(diào)用。(6)調(diào)試;將總程序在VisionC++.6.0中運行調(diào)試,確保程序的可運行性。(7)程序功能測試;在程序?qū)懲旰蠡蛟趯懗绦蛑埃覀儽仨氁獪蕚涠嘟M數(shù)據(jù)(已知道分配結(jié)果)來對程序進行測試。最后將運行出來結(jié)果與理想結(jié)果相比較,以此來確定程序的準確性。(8)封裝;對程序進行外觀包裝和編寫說明書或使用手冊。這種以機代替人的方法已成為現(xiàn)代社會發(fā)展的主流,只有充分利用高端的計算機技術(shù)對企業(yè)的現(xiàn)有資源進行優(yōu)化配置,才能實現(xiàn)企業(yè)預期目標。在生產(chǎn)過程中要以運籌學的建模功能為橋梁,實現(xiàn)科學管理與計算機科學的完美結(jié)合,為現(xiàn)代管理學注入新理念和思想。在既保證了質(zhì)量的同時,又大大的提高了企業(yè)的生產(chǎn)效率,從而減少了決策人員和工作人員的工作量。最后達到降低生產(chǎn)運營成本的目的。5程序設計通過前面的陳述與分析,我們明白了本次設計的要求、目的以及內(nèi)容。現(xiàn)在的工作就是編寫詳細的程序,程序設計的整體框架如圖5.1。聲明區(qū)聲明區(qū)棧的定義棧的定義編輯文本文檔讀取數(shù)組數(shù)據(jù)編輯文本文檔讀取數(shù)組數(shù)據(jù)顯示數(shù)組數(shù)據(jù)顯示數(shù)組數(shù)據(jù)回溯法求解模型回溯法求解模型界面設計界面設計圖5.1程序設計的整體框架本程序設計時主要采用的是模塊化結(jié)構(gòu)程序設計思想,將模型主要分為棧的定義、數(shù)組的實現(xiàn)與輸入、數(shù)組的顯示、算法的實現(xiàn)與輸出和界面的設計五大板塊。圖5.2為本次設計的模塊分類。最佳任務分配模型最佳任務分配模型界面設計數(shù)組的顯示回溯法求解數(shù)組實現(xiàn)棧的定義界面設計數(shù)組的顯示回溯法求解數(shù)組實現(xiàn)棧的定義結(jié)果的輸出算法的實現(xiàn)打開文檔數(shù)組編程結(jié)果的輸出算法的實現(xiàn)打開文檔數(shù)組編程圖5.2模型的分類5.1棧的定義由于棧是所有存儲容器中最簡單的數(shù)據(jù)結(jié)構(gòu),所以在本程序設計時我們也用棧來存儲數(shù)據(jù)結(jié)構(gòu)。棧的一些理論和定義在第四章我們已經(jīng)介紹了,在這里我們就不在累述了,下面的程序就是本程序?qū)5亩x和處理。#if!defined(AFX__H__STACK_INCLUDED_)#defineAFX__H__STACK_INCLUDED_#include"common.h"http://棧初始條件的定義#defineSTACK_INIT_SIZE100//棧初始長度的定義#defineSTACKINCREMENT10//棧每次追加分配長度的定義//定義棧的數(shù)據(jù)類型(整型)typedefstruct{ SElemType*elem; inttop; intstacksize; }Stack;//棧的各項操作的實現(xiàn)statusInitStack(Stack&s){ //棧的初始化 s.elem=newSElemType[STACK_INIT_SIZE]; if(!s.elem)returnOVERFLOW; s.top=-1;//表示空棧 s.stacksize=STACK_INIT_SIZE; returnOK; }//銷毀棧statusDestroyStack(Stack&s){ deletes.elem; s.top=-1;s.stacksize=0; returnOK; }//判斷棧的存在statusClearStack(Stack&s){ //當棧存在時將棧清空,當棧不存在時返回出錯信息 if(!s.elem)returnERROR;//棧不存在 s.top=-1; returnOK; }//判斷棧是否為空棧statusStackEmpty(Stack&s){ //判斷棧空與否,當棧為空棧時返回TRUE,否則返回ERROR. //當棧不存在時返回出錯信息 if(!s.elem)returnERROR;//不是空棧 if(s.top<0)returnTRUE;//空棧 returnFALSE; }//棧的長度的返回intStackLength(Stacks){ //返回棧的長度 //當棧不存在時返回出錯信息 if(!s.elem)returnERROR; returns.top+1; }//棧頂元素的返回statusGetTop(Stacks,SElemType&e){ //當棧存在且不是空棧空時返回棧頂元素 //當棧不存在或棧為空時返回出錯信息 if(!s.elem)returnERROR; if(s.top<0)returnERROR; e=s.elem[s.top]; returnOK; }//棧的處理statusPush(Stack&s,SElemTypee){ //當棧存在時對棧進行壓縮//當棧不存在時返回出錯信息 if(!s.elem)returnERROR; if((s.top+1)==s.stacksize){//如果棧的初始空間已滿 SElemType*temp=s.elem;inti;//為棧重新分配存儲空間 s.stacksize+=STACKINCREMENT; s.elem=newSElemType[s.stacksize]; if(!s.elem)returnOVERFLOW;//當棧分配空間失敗時返回出錯信息 for(i=0;i<=s.top;i++)s.elem[i]=temp[i]; deletetemp; } s.top+=1; s.elem[s.top]=e; returnOK; }//退棧statusPop(Stack&s,SElemType&e){ //當棧不存在或棧是空棧時返回出錯信息 if(!s.elem)returnERROR;//當棧存在且不空時退棧 if(s.top<0)returnERROR; e=s.elem[s.top]; s.top-=1; returnOK; }//函數(shù)的調(diào)用statusStackTraverse(Stacks,int(*visit)(SElemType&e)){ //當棧存在且不空時調(diào)用visit函數(shù)對棧作由底到頭的遍歷 //當visit函數(shù)調(diào)用失敗返回錯誤信息 inti; if(!s.elem)returnERROR; if(s.top<0)returnERROR;//當棧不存在或棧是空棧時返回出錯信息 for(i=0;i<=s.top;i++)visit(s.elem[i]); returnOK; }#endif5.2數(shù)組數(shù)據(jù)的實現(xiàn)與讀取由于數(shù)組的實現(xiàn)要靠讀取文本文檔中數(shù)據(jù),所以這里我們將兩個功能放到一起作為一個整體模塊來來實現(xiàn),但在編寫程序時我們是可分為兩個板塊來寫。即:數(shù)組的實現(xiàn)模塊本程序中的數(shù)組是一個二維數(shù)組,我們可以用一個for循環(huán)中再嵌套一個for循環(huán)來完成。它的程序很簡單如下:#include<iostream.h>voidmain(){inti,j;//變量數(shù)據(jù)類型的定義fscanf(flp,"%d,%d",&cost.m,&cost.n);//人數(shù)與任務數(shù)的輸入//數(shù)組的實現(xiàn)for(i=1;i<=cost.m;i++){cost.elem[i][0]=-1; for(j=1;j<=cost.n;j++) fscanf(flp,"%lf,",&cost.elem[i][j]);//確定數(shù)組變量范圍}}(2)數(shù)組數(shù)據(jù)的讀取在C++中,要想讀取文本文檔中的數(shù)據(jù),跟C語言一樣主要采用指針的方法讀取文本文檔,它的程序很簡單,只要用一個指針函數(shù)指向文本文檔就可以了。數(shù)字數(shù)據(jù)的讀取程序:#include<iostream.h>voidmain(){ FILE*flp; flp=fopen("text.txt","r");//打開名為text的文本文檔}5.3數(shù)組數(shù)據(jù)的顯示在本程序中,數(shù)組的顯示是在一個靜態(tài)文本框中輸出的,它輸出的方法與輸入的方法大致一,但也有一些不同的地方。下面的程序就是本程序的數(shù)組數(shù)據(jù)輸出函數(shù): #include<iostream.h>{inti; CStringstr,ss; Stacks; InitStack(s);//人數(shù)和任務數(shù)的定義 ss.Format("人數(shù):%d,任務數(shù):%d\n",cost.m,cost.n); str+=ss; for(i=1;i<=cost.m;i++) { ss.Format("%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf\n",cost.elem[i][1],cost.elem[i][2],cost.elem[i][3],cost.elem[i][4],cost.elem[i][5],cost.elem[i][6],cost.elem[i][7],cost.elem[i][8],cost.elem[i][9],cost.elem[i][10]);//數(shù)組的顯示 }}5.4回溯法求解模型回溯法的本質(zhì)具體的算法在前面我們已經(jīng)介紹過了,它主要采用限界函數(shù)的深度優(yōu)先生成的狀態(tài)空間樹中結(jié)點。從而達到約束函數(shù)的滿意解。本程序的具體算法為://各變量的定義inti,j,count;doublev,totalCost;Stacks;//s棧的定義RLista;InitStack(s);InitRList(a);//初始化job數(shù)組for(j=0;j<(MAX_D+1);j++)job[j]=FALSE;count=0;//定義已分配工作的計數(shù)器j=0;v=0;totalCost=MAXINT;Push(s,j);do{ while((StackLength(s)<cost.m)&&(j<=cost.n)) { //遍歷遞歸樹,找一條由根到葉子的沒有沖突的通路 if((cost.elem[StackLength(s)+1][j]!=0)&&(job[j]!=TRUE)){ Push(s,j); if(j!=0)job[j]=TRUE; if(j!=0){v+=cost.elem[StackLength(s)][j];count+=1;} j=0; } elsej+=1; } //判斷解是否是最優(yōu)解,并將解帶入數(shù)組 if((StackLength(s)>=cost.m)&&(count==cost.n)){//存儲解向量 SaveResult(s,totalCost,v,a); if(totalCost>v)totalCost=v; } //回溯遍歷兄弟 if(StackLength(s)>0) { //如果棧不空退棧 Pop(s,j); job[j]=FALSE; if(j!=0){v-=cost.elem[StackLength(s)+1][j];count-=1;}//退棧并恢復數(shù)據(jù) j+=1; } }while((StackLength(s)>0)||(j<(cost.n+1)));//判定條件 CStringstr,ss; if(a.top!=-1)//棧不是空棧 { for(i=0;i<=a.top;i++) { for(j=1;j<=a.elem[i][0];j++) { ss.Format("(%d,%d)\n",j,a.elem[i][j]);//輸出方案矩陣 str+=ss; } } } ss.Format("總費用:%lf",totalCost);//總費用的輸出 str+=ss;//調(diào)用輸出靜態(tài)文本框的地址 this->SetDlgItemText(IDC_RESULT,str);//在RESULT文本框輸出 //AfxMessageBox(str,MB_OK);}5.5數(shù)組數(shù)據(jù)的輸出其實在總程序中,我們在簡單的設置一個按鈕之后,然后用一個相當于指針一樣的函數(shù)調(diào)用按鈕的地址就可以了,但在后臺卻是用前面定義的棧來對數(shù)據(jù)進行處理的。即將上面用回溯法求解出來的解從棧中釋放出來。它的詳細程序為:#if!defined(AFX__H__RESULT_INCLUDED_)#defineAFX__H__RESULT_INCLUDED_#defineINIT_SIZE1000//解的數(shù)組的初始長度的定義#defineADD_SIZE5//解的數(shù)組每次追加分配長度的定義#defineMAX_D10//設置矩陣的空間大小//定義棧的數(shù)據(jù)元素的數(shù)據(jù)類型typedefintSElemType;#include"stack.h"http://實現(xiàn)解的數(shù)組的數(shù)據(jù)類型typedefintResult[MAX_D+1];typedefstruct{ Result*elem; intlistsize; inttop; }RList;//**************************實現(xiàn)解的數(shù)組的各項操作*************statusInitRList(RList&a){ //初始化解的數(shù)組 //當為解的數(shù)組分配空間失敗時返回出錯信息 a.elem=newResult[INIT_SIZE]; if(!a.elem)returnOVERFLOW; a.top=-1; a.listsize=INIT_SIZE; returnOK;}statusClearRList(RList&a){ //將解的數(shù)據(jù)清空,分配的空間保留 if(!a.elem)returnERROR; a.top=-1; returnOK;}statusEnElem(Stacks,RList&a){ //將棧中的解加入解的數(shù)組 //當解的數(shù)組已滿則為數(shù)組重新分配空間 inti,j; if(!a.elem)returnERROR;//當空間分配失敗時返回出錯信息 if(a.top==(a.listsize-1)){//為數(shù)組重新分配空間 Result*temp=a.elem; a.listsize+=ADD_SIZE; a.elem=newResult[a.listsize]; if(!a.elem)returnOVERFLOW;//空間分配失敗時返回出錯信息 for(i=0;i<=a.top;i++)//將原數(shù)組中的解復制進新的數(shù)組 for(j=0;j<=a.elem[i][0];j++) a.elem[i][j]=temp[i][j];delete[]temp;//釋放臨時空間 } //將棧中的解加入解的數(shù)組 a.top+=1; for(i=1;i<=StackLength(s);i++) a.elem[a.top][i]=s.elem[i-1]; a.elem[a.top][0]=StackLength(s); returnOK;}statusSaveResult(Stacks,doubleM,doublevol,RList&r){ //判斷當前棧中的解是否是最佳解。如果是則將其加入解的數(shù)組;否則不進行任何操作。 //如果當前解優(yōu)于數(shù)組中的解則將數(shù)組清空間當前解入解的數(shù)組 if(vol>M)returnOK; if(vol==M){EnElem(s,r);returnOK;} ClearRList(r); EnElem(s,r); returnOK; }statusOutputResult(RListr){ //格式輸出解的數(shù)組中的各組解 //當解的數(shù)組為空時則輸出提示--無解 inti,j; if(r.top==-1)//空棧{cout<<endl<<"NoAnswer!";returnOK;} for(i=0;i<=r.top;i++){ cout<<endl; for(j=1;j<=r.elem[i][0];j++){ cout<<"("<<j<<","<<r.elem[i][j]<<")";//解的輸出 } } returnOK;}#endif5.6界面設計在本程序設計中,我們共用到了三個按鈕:讀入數(shù)據(jù)(OnTextReaddata)、顯示數(shù)據(jù)(OnGetdata)和任務分配(OnAction),五個靜態(tài)文本:數(shù)據(jù)讀入顯示文本框(OnData)、結(jié)果顯示文本框(OnResult)、結(jié)果顯示、指導老師和制作人,除此之外還有一個時間選取器,它的具體布局見圖5.3。5.7程序測試程序的測試就是將預先準備好的知道結(jié)果的多組數(shù)據(jù)輸入程序中,看看運行的結(jié)果跟標準答案相比較,如果相同,則說明程序設計是成功的,反之,如果與標準答案不一樣,則說明程序有問題,必須修改。下面是對程序的測試:測試1原始數(shù)據(jù):8,61,0,0,0,0,00,1,0,0,0,00,0,1,0,0,00,0,0,1,0,00,0,0,0,1,00,0,0,0,0,12,4,5,3,3,56,4,2,4,7,8分配結(jié)果應為:(1,1)(2,2)(3,3)(4,4)(5,5)(6,6)(7,0)(8,0)總費用為:6.00運行后的結(jié)果為:測試2原始數(shù)據(jù):10,101,0,0,0,0,0,0,0,0,00,1,0,0,0,0,0,0,0,00,0,1,0,0,0,0,0,0,00,0,0,1,0,0,0,0,0,00,0,0,0,1,0,0,0,0,00,0,0,0,0,1,0,0,0,00,0,0,0,0,0,1,0,0,00,0,0,0,0,0,0,1,0,00,0,0,0,0,0,0,0,1,00,0,0,0,0,0,0,0,0,1分配結(jié)果應為:(1,1)(2,2)(3,3)(4,4)(5,5)(6,6)(7,7)(8,8)(9,9)(10,10)總費用為10.00運行后的結(jié)果:測試結(jié)論:從上面的測試可以看出,顯示結(jié)果與預期結(jié)果一樣,說明設計成功。6結(jié)論通過程序的設計與運行,我們可以得到以下幾個結(jié)論:(1)就本設計而言,從上面的測試結(jié)果可以看出,本次設計已經(jīng)達到了預期的目的和要求。但是由于篇幅所限,上面我們只將兩組測試結(jié)果寫了出來,事實上,我們設計了很多組測試數(shù)據(jù),經(jīng)過測試,程序運行后的結(jié)果與預期結(jié)果都是一樣的,所以可以說本程序設計目的已經(jīng)完成。(2)本次設計告訴我們,不管是什么樣的任務分配模型,它都一定有一個或多個最佳任務分配方案。雖然在本程序中我們只討論了二維的少人少任務數(shù)的分配模型,但是我們可以從本次設計中衍生出其他多維、多人和更多任務分配問題的解決方法,不管是什么樣的模型,都一定有并且可以用計算機解出一組或多組解最佳任務分配解。(3)從結(jié)論(2)中我們可以看出,對某些模型來說,它的最佳任務分配方案可能不止一個。雖然在現(xiàn)實的生活中這種現(xiàn)象很少,但從理論上將,這種現(xiàn)象是一定存在的,所以當我們遇到這樣的問題時,我們隨便從最佳方案中選取一個即可,因為不管你選擇了哪一個方案,到最后他們所消耗的總費用都是相同的。(4)本次設計也實現(xiàn)了科學管理與計算機科學的完美結(jié)合。本次設計是以運籌學的建模功能為基礎,然后再將模型轉(zhuǎn)變成計算機語言后,通過計算機算法來求解模型的過程,這樣不僅節(jié)省時間,還能為我們節(jié)省大量人力、物力和財力等資源。除此之外,這也是實現(xiàn)管理科學與現(xiàn)代計算機科學技術(shù)接軌的具體表現(xiàn)。從設計的要求和內(nèi)容來看,本次程序滿足了我們的要求,在解決一些小型的任務分配問題時是沒有任何問題的。但要想廣泛地應用在實踐中時,還是需要對程序做一些修正,因為在實踐中很多問題的人和任務數(shù)都是很大的,當然我們也可以見這些大的問題分成小任務數(shù)的問題,只是這樣可能比較麻煩。不如直接擴大程序中人數(shù)和任務數(shù)的計算。參考文獻[1]胡運權(quán).運籌學教程(第三版)[M].北京:清華大學出版社.2007.4:1-10[2]陳慧南.數(shù)據(jù)結(jié)構(gòu)與算法—C++語言描述[M].北京.高等教育出版社.2005.1:3-395[3]付靈麗,柴欣.VisualC++程序設計基礎[M].北京:中國通道出版社,2004.8:1-271[4]王艷梅,趙希男,靖可.存在生產(chǎn)外部性的任務分配問題分析[J].管理科學,2008.8,21(4):25-32[5]嚴建峰,李偉華,劉明.多Agent系統(tǒng)任務分配的研究[J].計算機工程,2009.35(11):21-23[6]馬巧云,洪流,陳學廣.多Agent系統(tǒng)中任務分配問題的分析與建模[J].華中科技大學學報,2007.1,35(1):54-65[7]蔣紅梅,陳榮秋.虛擬企業(yè)任務分配的一種方法[J].華中科技大學管理學院,2002,12(12)[8]陳鳳,先曉兵.基于DFS的多Agent動態(tài)任務分配算法[J].計算機工程,2009.7,35(14):30-33[9]張瑜,李凡長.基于DFS的多Agent動態(tài)任務分配算法研究[J].電子學報,2009.11,37(11):51-57[10]徐娜,劉玉英,包紅.基于Swarw的多任務分配系統(tǒng)模型的實現(xiàn)[J].沈陽航空工業(yè)學院學報,2007.6,24(3):59-62[11]曲紹剛,楊廣文,林闖,史樹明.基于完成時間的任務分配方案與性能分拆[J].計算機研究與發(fā)展,2005.42(8):1397-1402[12]何霆,郭世偉,徐漢川.基于最小生產(chǎn)時間的制造任務分配策略[J].黑龍江大學自然科學學報,2009.10,26(5):91-96[13]韓泉葉,王松,黨建武.競爭環(huán)境下任務分配方法的研究[J].計算機工程與設計.2007.2,28(3):17-20[14]孫巨為,李彥哲,朱巖.任務分配方式優(yōu)化問題研究[J].指揮控制與仿真,2008.10,30(5):30-34[15]聶明泓,楊麗英,聶義勇.任務分配問題的建模與求解[J].2009.4,30(4):10-16[16]張國軍,湛紅暉,紹新宇,朱海平.柔性作業(yè)車間的任務分配及優(yōu)化方法[J].2010.3,38(3):4-8[17]李為相,張廣明,李邦義.一種多屬性的MAS任務分配機制研究[J].系統(tǒng)工程與電子技術(shù),2009.5,31(5):13-17[18]SemBorst,OnnoBoxma,JanFrisoGroote,etal.Taskallocationinamuti-serversystem[J].JournalofScheduling,2003,6:423-436.[19]AnsgarLamersdorfandJürgenMünch..Model-BasedTaskAllocationinDistributionSoftware[J].UniversityofKaiserslautern,FraunhoferIESE.2010,54:35-53附錄使用說明書本軟件可直接在windows環(huán)境下運行,要求用戶的電腦系統(tǒng)中裝有VisualC++6.0軟件。程序啟動后,用戶只需在界面的文本文檔中編輯數(shù)據(jù)之后,點擊“!”按鈕,然后再點擊界面的按鈕即可。具體的操作步驟如下:第一步:點擊“界面.dsp”項目文件,啟動軟件,啟動后的界面如圖附錄.1附錄.1啟動程序第二步:在文檔內(nèi)編輯數(shù)值,完成后點擊“!”運行程序,運行程序后顯示出來的界面如圖附錄.2附錄.2運行界面第三步:點擊“讀入數(shù)據(jù)”和“顯示數(shù)據(jù)”按鈕,確認輸入的數(shù)據(jù)準確無誤,如果有誤點擊右上角的關閉按鈕,檢查文本文檔的數(shù)據(jù)。讀入數(shù)據(jù)的顯示見圖附錄.3附錄.3讀入數(shù)據(jù)的顯示第四步:點擊“任務分配”按鈕,記錄分配結(jié)果。見圖附錄.4附錄.4分配的結(jié)果顯示第五步:點擊右上角的關閉按鈕關閉程序。基于C8051F單片機直流電動機反饋控制系統(tǒng)的設計與研究基于單片機的嵌入式Web服務器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協(xié)議棧的實現(xiàn)基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內(nèi)壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)基于單片機的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機實現(xiàn)一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設計基于單片機控制的高速快走絲電火花線切割機床短循環(huán)走絲方式研究基于單片機的機電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機的智能手機充電器基于單片機的實時內(nèi)核設計及其應用研究基于單片機的遠程抄表系統(tǒng)的設計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統(tǒng)單片機系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設計和應用基于單片機的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機單片機控制系統(tǒng)的研制基于單片機的數(shù)字磁通門傳感器基于單片機的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機的多生理信號檢測儀基于單片機的電機運動控制系統(tǒng)設計Pico專用單片機核的可測性設計研究基于MCS-51單片機的熱量計基于雙單片機的智能遙測微型氣象站MCS-51單片機構(gòu)建機器人的實踐研究基于單片機的輪軌力檢測基于單片機的GPS定位儀的研究與實現(xiàn)基于單片機的電液伺服控制系統(tǒng)用于單片機系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機的時控和計數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機和CPLD的粗光柵位移測量系統(tǒng)研究單片機控制的后備式方波UPS提升高職學生單片機應用能力的探究基于單片機控制的自動低頻減載裝置研究基于單片機控制的水下焊接電源的研究基于單片機的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機的氚表面污染測量儀的研制基于單片機的紅外測油儀的研究96系列單片機仿真器研究與設計基于單片機的單晶金剛石刀具刃磨設備的數(shù)控改造基于單片機的溫度智能控制系統(tǒng)的設計與實現(xiàn)基于MSP430單片機的電梯門機控制器的研制基于單片機的氣體測漏儀的研究基于三菱M16C/6N系列單片機的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機的膛壁溫度報警系統(tǒng)設計基于AVR單片機的低壓無功補償控制器的設計基于單片機船舶電力推進電機監(jiān)測系統(tǒng)基于單片機網(wǎng)絡的振動信號的采集系統(tǒng)基于單片機的大容量數(shù)據(jù)存儲技術(shù)的應用研究基于單片機的疊圖機研究與教學方法實踐基于單片機嵌入式Web服務器技術(shù)的研究及實現(xiàn)基于AT89S52單片機的通用數(shù)據(jù)采集系統(tǒng)基于單片機的多道脈沖幅度分析儀研究機器人旋轉(zhuǎn)電弧傳感角焊縫跟蹤單片機控制系統(tǒng)基于單片機的控制系統(tǒng)在PLC虛擬教學實驗中的應用研究HYPERLI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人力資源公司加盟合同
- 初級日語考試題庫及答案
- 賓館房間長期租賃合同
- 公寓樓裝飾工程施工合同
- 會計團隊協(xié)作與管理模式計劃
- 挖掘職業(yè)潛能的方式計劃
- 廣告設計與發(fā)布作業(yè)指導書
- 電信行業(yè)智能化電話通信與網(wǎng)絡方案
- 幼兒園日用品采購合同
- 入伙協(xié)議合同協(xié)議
- 2023年工業(yè)機器人系統(tǒng)運維員考試題庫及答案
- 園長指導保教活動制度
- 中醫(yī)禁食療法專家共識護理課件
- YY 0793.2-2023血液透析和相關治療用液體的制備和質(zhì)量管理第2部分:血液透析和相關治療用水
- 管理溝通-原理、策略及應用(第二版)教學課件1
- 國家的大糧倉課件
- 手術(shù)患者轉(zhuǎn)運交接及注意事項
- 《秘書文檔管理》思考與實訓習題及答案 -第2章
- 加油站股東合作協(xié)議書
- Part1-2 Unit1 Travel課件-【中職專用】高一英語精研課堂(高教版2021·基礎模塊2)
- 2023個人房屋租賃合同標準版范本
評論
0/150
提交評論