本篇內(nèi)容介紹了“Python動態(tài)規(guī)劃實現(xiàn)虛擬機部署的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了白云免費建站歡迎大家使用!
考慮到在虛擬機部署中資源提供商通常希望自己的收益最大化,現(xiàn)假設有一臺宿主機,共有x個cpu和y GB的內(nèi)存,用戶可以采取自己報價的方式向資源提供商申請使用虛擬機資源,譬如說付w元申請a個cpu和b GB內(nèi)存的一臺虛擬機。請你設計一個算法,讓資源提供商可以合理地安排虛擬機,使得自己的收益最大化。
輸入:
n x y
2 4 200
4 2 150
…
說明,n表示共有n條用戶報價申請,宿主機共有x個cpu和y GB的內(nèi)存;
以下n行,每行表示用戶申請的cpu和內(nèi)存數(shù),以及用戶報價的金額。
該問題為尋找全局最優(yōu)解問題,采用動態(tài)規(guī)劃的思想。找最大利益是最終的問題,可以將最大利益的子問題看做是已經(jīng)報價的每個用戶最大金額,并將其所要求的CPU數(shù)和內(nèi)存數(shù)加入到總的需求總,與提供的CPU數(shù)和內(nèi)存容納進行對比。解決了目前最大報價的用戶,下一個最大報價又可以看做是一個子問題,但CPU和內(nèi)存容量需要減去已經(jīng)分配的,如此反復,到CPU和內(nèi)存容量不能滿足任何一個用戶要求為止,最優(yōu)解便求得。
運行結(jié)果:
源代碼
import sys print("請輸入申請?zhí)摂M機的用戶個數(shù),cpu個數(shù),內(nèi)存容量:") a = list(map(int, input().split())) # 用數(shù)組a來存儲參與報價的用戶的個數(shù),云端要存儲的cpu個數(shù),容量大小 a1 = a[0] # 存儲用戶個數(shù),要輸入幾行數(shù)據(jù) a2 = a[1] # 存儲cpu的個數(shù) a3 = a[2] # 存儲容量 b = [] cpu_num=0 size_num=0 money=0 b1 = [0]*a1 #數(shù)組b1存儲用戶報價 p1 = [0]*a1 #數(shù)組p1記錄報價金額的位置 for i in range(a1): print("請輸入第",i+1,"個用戶的申請CPU個數(shù) 內(nèi)存容量 報價:") b.append(list(map(int, input().split()))) for k in range(a1): b1[k] = b[k][2] p1[k] = k for i in range(0,a1-1): for j in range(1,a1-i): if b1[j]>b1[j-1]: temp=b1[j-1] b1[j-1]=b1[j] b1[j]=temp temp=p1[j-1] p1[j-1]=p1[j] p1[j]=temp def Fun(i): global cpu_num,size_num,money cpu_num=cpu_num+b[p1[i]][0] size_num=size_num+b[p1[i]][1] money=money+b[p1[i]][2] if cpu_num>a2 or size_num>a3: money=money-b[p1[i]][2] cpu_num=cpu_num-b[p1[i]][0] size_num=size_num-b[p1[i]][1] for i in range(a1): Fun(i) print("最大化收益:",money)
“Python動態(tài)規(guī)劃實現(xiàn)虛擬機部署的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!