Python動態規劃實現虛擬機器部署
導讀 | 這篇文章主要介紹了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和記憶體容量不能滿足任何一個使用者要求為止,最優解便求得。
測試結果
執行結果:
原始碼
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ubuntu 20.04.2 KVM虛擬機器動態遷移實現(下)Ubuntu虛擬機
- Ubuntu 20.04.2 KVM虛擬機器動態遷移實現(上)Ubuntu虛擬機
- Python 如何實現以太坊虛擬機器Python虛擬機
- 動手實現程式碼虛擬機器虛擬機
- 虛擬機器(三)虛擬機器配置靜態Ip虛擬機
- Python 實現 動態規劃 /斐波那契數列Python動態規劃
- 深入理解 python 虛擬機器:原來虛擬機器是這麼實現閉包的Python虛擬機
- 使用DiskGenius工具來實現物理機遷移虛擬機器,實現虛擬化虛擬機
- 分享Python以太坊虛擬機器實現Py-EVMPython虛擬機
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- 【虛擬機器】Windows(x86)上部署ARM虛擬機器(Ubuntu)虛擬機WindowsUbuntu
- 移動機器人運動規劃及運動模擬機器人
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- 伺服器物理機使用ESXI虛擬化並劃分虛擬機器伺服器虛擬機
- ida 在虛擬機器中實現linuxremote debugging虛擬機LinuxREM
- KVM虛擬機器遷移(靜態)虛擬機
- 動態規劃動態規劃
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- 憑什麼別的虛擬機器叫虛擬機器,Python的叫直譯器?虛擬機Python
- ubuntu虛擬機器設定靜態ip(windows能夠ping通ubuntu虛擬機器)Ubuntu虛擬機Windows
- Java虛擬機器是怎麼實現synchronized的Java虛擬機synchronized
- VMware配置centos虛擬機器靜態ipCentOS虛擬機
- Linux虛擬機器設定靜態IPLinux虛擬機
- OA專案-虛擬機器上部署專案虛擬機
- Dapr + .NET Core實戰(十四)虛擬機器叢集部署 mDNS + Consul虛擬機DNS
- 一機實現All in one,NAS如何玩轉虛擬機器!虛擬機
- [leetcode] 動態規劃(Ⅰ)LeetCode動態規劃
- 動態規劃法動態規劃
- 模板 - 動態規劃動態規劃
- 動態規劃初步動態規劃
- 動態規劃分析動態規劃
- 動態規劃(DP)動態規劃
- VMware安裝虛擬機器時,全名、使用者名稱、虛擬機器名是什麼。修改虛擬機器為靜態ip虛擬機
- 深入理解python虛擬機器:偵錯程式實現原理與原始碼分析Python虛擬機原始碼
- 深入理解 Python 虛擬機器:整型(int)的實現原理及原始碼剖析Python虛擬機原始碼
- 深入理解 Python 虛擬機器:列表(list)的實現原理及原始碼剖析Python虛擬機原始碼
- Java虛擬機器記憶體區域劃分Java虛擬機記憶體