Python动态规划实现虚拟机部署的方法(python,移动开发)

时间:2024-05-01 14:50:35 作者 : 石家庄SEO 分类 : 移动开发
  • TAG :

题目描述

考虑到在虚拟机部署中资源提供商通常希望自己的收益最大化,现假设有一台宿主机,共有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动态规划实现虚拟机部署的方法

源代码

importsysprint("请输入申请虚拟机的用户个数,cpu个数,内存容量:")a=list(map(int,input().split()))#用数组a来存储参与报价的用户的个数,云端要存储的cpu个数,容量大小a1=a[0]#存储用户个数,要输入几行数据a2=a[1]#存储cpu的个数a3=a[2]#存储容量b=[]cpu_num=0size_num=0money=0b1=[0]*a1#数组b1存储用户报价p1=[0]*a1#数组p1记录报价金额的位置foriinrange(a1):print("请输入第",i+1,"个用户的申请CPU个数内存容量报价:")b.append(list(map(int,input().split())))forkinrange(a1): b1[k]=b[k][2] p1[k]=kforiinrange(0,a1-1):forjinrange(1,a1-i):ifb1[j]>b1[j-1]:temp=b1[j-1]b1[j-1]=b1[j]b1[j]=temptemp=p1[j-1]p1[j-1]=p1[j]p1[j]=tempdefFun(i):globalcpu_num,size_num,moneycpu_num=cpu_num+b[p1[i]][0]size_num=size_num+b[p1[i]][1]money=money+b[p1[i]][2]ifcpu_num>a2orsize_num>a3:money=money-b[p1[i]][2]cpu_num=cpu_num-b[p1[i]][0]size_num=size_num-b[p1[i]][1]foriinrange(a1):Fun(i)print("最大化收益:",money)
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python动态规划实现虚拟机部署的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue3和vue2中mixins如何使用下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18