Python動態規劃實現虛擬機器部署

大雄45發表於2021-08-01
導讀 這篇文章主要介紹了Python動態規劃實現虛擬機器部署的演算法思想,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
宣告

本文章為個人拙見,僅僅提供參考,不一定正確,各位大佬可以發表自己的意見。

題目描述

考慮到在虛擬機器部署中資源提供商通常希望自己的收益最大化,現假設有一臺宿主機,共有x個cpu和y GB的記憶體,使用者可以採取自己報價的方式向資源提供商申請使用虛擬機器資源,譬如說付w元申請a個cpu和b GB記憶體的一臺虛擬機器。請你設計一個演算法,讓資源提供商可以合理地安排虛擬機器,使得自己的收益最大化。

輸入:
n x y
2 4 200
4 2 150

說明,n表示共有n條使用者報價申請,宿主機共有x個cpu和y GB的記憶體;

以下n行,每行表示使用者申請的cpu和記憶體數,以及使用者報價的金額。

演算法思想

該問題為尋找全域性最優解問題,採用動態規劃的思想。找最大利益是最終的問題,可以將最大利益的子問題看做是已經報價的每個使用者最大金額,並將其所要求的CPU數和記憶體數加入到總的需求總,與提供的CPU數和記憶體容納進行對比。解決了目前最大報價的使用者,下一個最大報價又可以看做是一個子問題,但CPU和記憶體容量需要減去已經分配的,如此反覆,到CPU和記憶體容量不能滿足任何一個使用者要求為止,最優解便求得。

測試結果

執行結果:

Python動態規劃實現虛擬機器部署Python動態規劃實現虛擬機器部署

原始碼

import sys  
print("請輸入申請虛擬機器的使用者個數,cpu個數,記憶體容量:")
a = list(map(int, input().split()))  # 用陣列a來儲存參與報價的使用者的個數,雲端要儲存的cpu個數,容量大小  
a1 = a[0]  # 儲存使用者個數,要輸入幾行資料  
a2 = a[1]  # 儲存cpu的個數  
a3 = a[2]  # 儲存容量  
b = []
cpu_num=0
size_num=0
money=0
 
b1 = [0]*a1  #陣列b1儲存使用者報價   
p1 = [0]*a1  #陣列p1記錄報價金額的位置
 
for i in range(a1):
    print("請輸入第",i+1,"個使用者的申請CPU個數 記憶體容量 報價:")
    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動態規劃實現虛擬機器部署的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2784524/,如需轉載,請註明出處,否則將追究法律責任。

相關文章