Python动态规划实现虚拟机部署的算法思想
作者:常子Aka 发布时间:2022-12-13 05:02:47
标签: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)
来源:https://blog.csdn.net/weixin_43540234/article/details/118889019
0
投稿
猜你喜欢
- 前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建
- 上一篇列出了Perl中定义数组,对象的方式与JS的异同。这里继续补充数组,哈希的相关操作。一、数组可以对数组进行增删,插入。与JS不同的是这
- 自从web2.0之后,网页设计开始走向实用设计的阶段,越来越多的设计师注意到“为表达信息而设计”。着迷于前段时间黑白灰老师给大家介绍的“in
- 1、词表映射无论是深度学习还是传统的统计机器学习方法处理自然语言,都需要先将输入的语言符号(通常为标记Token),映射为大于等于0、小于词
- 一,uptime 可以查看系统的运行时间show global status like 'uptime';二,利用linux
- 深入作用域链与闭包为什么要把作用域链和闭包放在一起讲呢,它们有什么关联吗?试想,我们如果在一个内部的函数使用了外部的变量,是通过[[oute
- 去除数字,特殊字符,只保留汉字import res = '1123*#$ 中abc国'str = re.sub('[
- 打开sqlserver时提示评估期已过解决方法:打开sqlserver安装中心(注意:选择R2的安装中心)选择版本升级中途可能会出现需要重启
- 导入相关的包import pygame, sys, randomfrom pygame.locals import *设置屏幕大小以及基本参
- 前言本博客默认读者对神经网络与Tensorflow有一定了解,对其中的一些术语不再做具体解释。并且本博客主要以图片数据为例进行介绍,如有错误
- 理论傅立叶变换用于分析各种滤波器的频率特性,对于图像,2D离散傅里叶变换(DFT)用于找到频域.快速傅里叶变换(FFT)的快速算法用于计算D
- 本文,我们将回到之前写的showMovieHandler方法,并更新它以返回一个JSON响应,表示系统中的单个电影信息。类似于:{? ? &
- 假设我们有一幅图像,图像中的文本被旋转了一个未知的角度。为了对文字进行角度的校正,我们需要完成如下几个步骤:1、检测出图中的文本范围2、计算
- 1. 使用函数 np.random.random由于 np.random.random() 默认生成 0~1 之间的小数,因此需要转换一下如
- 有时候用phpMyAdmin的时候会突然出现这个错误信息 “无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP
- 虽说Oracle的动态SQL语句使用起来确实很方便,但是其拼装过程却太麻烦。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_cha
- 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
- 之前一篇文章里提到了利用Cython来编译Python,这次来讲一下如何用Cython给Python写扩展库。两种语言混合编程,其中最重要的
- json 作为一种通用的编解码协议,可阅读性上比 thrift,protobuf 等协议要好一些,同时编码的 size 也会比 xml 这类
- python部分#!/usr/bin/env Python# coding=utf-8from ctypes import *from Py