前天的程序存在写问题,主要反映在程序运行时长高等

Python实现——2021华为软挑初探

2021华为软挑部分答疑——哪些你有错却总是找不到的地方,我来带你找啦(含标准输入代码)

今天做了下改进:

代码如下:

运行时长:69.91018056869507,测试为training-1

import sys
import os
import re
import random
import numpy as np
import copy
import timeclass Sever_Machine:def __init__(self,Sever):self.Model=Sever[0]                    #型号self.CPU_cores=Sever[1]            #CPU核数self.Memory_Size=Sever[2]        #内存大小self.Hardware_cost=Sever[3]    #硬件成本self.Energy_cost=Sever[4]        #能耗成本self.No_=0self.Node_A=[]                      #当前A节点剩余核数内存情况self.Node_B=[]                      #当前B节点剩余核数内存情况self.Both=[]self.assigned=[]self.assigned_Node=[]self.rest_CPU_A=self.CPU_cores/2self.rest_Memory_A=self.Memory_Size/2self.rest_CPU_B = self.CPU_cores/2self.rest_Memory_B = self.Memory_Size/2def add_to_Node_A(self,V):self.Node_A.append(V)self.assigned.append(V[4])self.assigned_Node.append(1)self.rest_Memory_A -= V[2]self.rest_CPU_A -= V[1]def add_to_Node_B(self,V):self.Node_B.append(V)self.assigned.append(V[4])self.assigned_Node.append(2)self.rest_Memory_B -= V[2]self.rest_CPU_B -= V[1]def add_to_both(self,V):self.Both.append(V)self.assigned.append(V[4])self.assigned_Node.append(0)self.rest_CPU_A-=V[1]/2self.rest_Memory_A-=V[2]/2self.rest_CPU_B -= V[1]/ 2self.rest_Memory_B -= V[2] / 2def Judge_whether_to_insert(self,V):K=[]if V[3]==1:if self.rest_CPU_A>=V[1]/2 and self.rest_CPU_B>=V[1]/2 and\self.rest_Memory_A>=V[2]/2 and self.rest_Memory_B>=V[2]/2:self.add_to_both(V)return Trueelse:return Falseif V[3]==0:if self.rest_CPU_A>=V[1] and self.rest_Memory_A>=V[2] :K.append(1)if self.rest_CPU_B >= V[1] and self.rest_Memory_B >=V[2]:K.append(2)if len(K)==2:if random.choice(K)==1:self.add_to_Node_A(V)else:self.add_to_Node_B(V)return Trueelif len(K)==1:if K[0]==1:self.add_to_Node_A(V)else:self.add_to_Node_B(V)return Trueelse:return Falsedef del_Virtual(self,V):K=self.assigned.index(V[4])K_1=self.assigned_NodeM=self.assigned_Node[K]if M==0:self.rest_CPU_A += V[1]self.rest_Memory_A += V[2]if M==1:self.rest_CPU_B += V[1]self.rest_Memory_B += V[2]if M==0:self.rest_CPU_A += V[1] / 2self.rest_Memory_A += V[2] / 2self.rest_CPU_B += V[1] / 2self.rest_Memory_B += V[2] / 2self.assigned.remove(V[4])del self.assigned_Node[K]O=self.assigned_Nodedef Node_Situation(self):Load_CPU_A=self.CPU_cores/2-self.rest_CPU_ALoad_CPU_B=self.CPU_cores/2-self.rest_CPU_BLoad_M_A=self.Memory_Size/2-self.rest_Memory_ALoad_M_B=self.Memory_Size/2-self.rest_Memory_Breturn Load_CPU_A,Load_CPU_B,Load_M_A,Load_M_Bdef Use_situation(self):Load_CPU= self.CPU_cores  - self.rest_CPU_A-self.rest_CPU_ALoad_M = self.Memory_Size - self.rest_Memory_A- self.rest_Memory_Breturn Load_CPU,Load_Mdef replace_machine(self,Sev):self.Model = Sev[0]  # 型号self.CPU_cores = Sev[1]  # CPU核数self.Memory_Size = Sev[2]  # 内存大小self.Hardware_cost = Sev[3]  # 硬件成本self.Energy_cost = Sev[4]  # 能耗成本class daily_situation:def __init__(self,Sever,Virtual,use_Case):self.Sever=Severself.Virtual=Virtualself.Virtual_name=list(np.array(Virtual)[:,0])self.use_Case=use_Caseself.days=0.2*(len(use_Case))self.Sever_have=[]self.Configured=[]def Sever_Select(self,K):V=copy.copy(K)Selected_Sever = []Select = random.choice(self.Sever)Select_i = Sever_Machine(Select)while V != []:Select_V =random.choice(V)result = Select_i.Judge_whether_to_insert(Select_V)if result == True:  # 随机配置V.remove(Select_V)if V==[]:Selected_Sever.append(Select_i)breakif result == False:for i in range(len(V)):result = Select_i.Judge_whether_to_insert(V[i])if result == True:V.remove(V[i])breakif result == False and i >= len(V) - 1:Selected_Sever.append(Select_i)Select = random.choice(self.Sever)Select_i = Sever_Machine(Select)return Selected_Severreturn Selected_Severdef add_to_old(self,S,V):for i in range(len(S)):if V!=[]:random.shuffle(V)for V_i in V:result=S[i].Judge_whether_to_insert(V_i)if result==True:V.remove(V_i)return S,Vdef transfer(self,Sever,V_total):Transferable_num = int(len(V_total) * 5 / 1000)if Transferable_num>0:# for i in range(len())passelse:passreturn Severdef Virtual_use(self):User_total=[]V_Total=[]User_used_Sever=[]Coun=0Total_Host=[]for i in range(len(self.use_Case)):daily_used_Sever=[]Old_Sever_unfull_i = []daily_Buy_Host=[]V_T = []Host_buy = Sever_Machine(random.choice(self.Sever))daily_Buy_Host.append(Host_buy)for j in range(len(self.use_Case[i])):if self.use_Case[i][j][0] == 'add':V_I = copy.copy(self.Virtual[self.Virtual_name.index(self.use_Case[i][j][1])])V_I.append(self.use_Case[i][j][2])V_Total.append(V_I)V_T.append(V_I)User_total.append(self.use_Case[i][j][2])if Old_Sever_unfull_i!=[]:for Old_i in Old_Sever_unfull_i:result = Old_i.Judge_whether_to_insert(V_I)if result==True:User_used_Sever.append(Old_i)daily_used_Sever.append(Old_i)Old_Sever_unfull_i.remove(Old_i)breakif result==False:result = Host_buy.Judge_whether_to_insert(V_I)if result == True:User_used_Sever.append(Host_buy)daily_used_Sever.append(Host_buy)else:Host_buy = Sever_Machine(random.choice(self.Sever))daily_Buy_Host.append(Host_buy)Host_buy.Judge_whether_to_insert(V_I)daily_used_Sever.append(Host_buy)User_used_Sever.append(Host_buy)else:result=Host_buy.Judge_whether_to_insert(V_I)if result == True:User_used_Sever.append(Host_buy)daily_used_Sever.append(Host_buy)else:Host_buy=Sever_Machine(random.choice(self.Sever))daily_Buy_Host.append(Host_buy)Host_buy.Judge_whether_to_insert(V_I)daily_used_Sever.append(Host_buy)User_used_Sever.append(Host_buy)if self.use_Case[i][j][0] == 'del':V_name=self.use_Case[i][j][0]User_Site = User_total.index(self.use_Case[i][j][1])Vm = V_Total[User_Site]try:Sever_use=User_used_Sever[User_Site]Sever_use.del_Virtual(Vm)Old_Sever_unfull_i.append(Sever_use)User_total.remove(User_total[User_Site])if V_Total[User_Site] in V_T:V_site=V_T.index(V_Total[User_Site])del daily_used_Sever[V_site]V_T.remove(V_Total[User_Site])del V_Total[User_Site]del User_used_Sever[User_Site]except:for Vm_i in range(len(User_used_Sever)):if self.use_Case[i][j][1] in User_used_Sever[Vm_i].assigned:User_used_Sever[Vm_i].del_Virtual(Vm)Old_Sever_unfull_i.append(User_used_Sever[Vm_i])User_total.remove(User_total[Vm_i])if Vm in V_T:V_site = V_T.index(Vm)del daily_used_Sever[V_site]V_T.remove(Vm)V_Total.remove(Vm)del User_used_Sever[Vm_i]Total_Host.extend(daily_Buy_Host)Q=[]for S_k in range(len(daily_Buy_Host)):Q.append(daily_Buy_Host[S_k].Model)Q_set = set(Q)Q_num = len(list(Q_set))print('(Purchase,', Q_num, ')')for Q_i in Q_set:print('(',Q_i,',', Q.count(Q_i), ')')print('(migration,', 0, ')')for Q_seti in Q_set:for day_i in daily_Buy_Host:if day_i.Model==Q_seti:day_i.No_=CounCoun+=1for V_k in range(len(V_T)):try:if daily_used_Sever[V_k].assigned_Node[daily_used_Sever[V_k].assigned.index(V_T[V_k][4])] == 1:print('(', daily_used_Sever[V_k].No_, ',', 'A', ')')if daily_used_Sever[V_k].assigned_Node[daily_used_Sever[V_k].assigned.index(V_T[V_k][4])] == 2:print('(', daily_used_Sever[V_k].No_, ',', 'B', ')')if daily_used_Sever[V_k].assigned_Node[daily_used_Sever[V_k].assigned.index(V_T[V_k][4])] == 0:print('(', daily_used_Sever[V_k].No_,  ')')except:for day_j in range(len(daily_used_Sever)):if V_T[V_k][4] in daily_used_Sever[day_j].assigned:if daily_used_Sever[day_j].assigned_Node[daily_used_Sever[day_j].assigned.index(V_T[day_j][4])] == 1:print('(', daily_used_Sever[day_j].No_, ',', 'A', ')')if daily_used_Sever[day_j].assigned_Node[daily_used_Sever[day_j].assigned.index(V_T[day_j][4])] == 2:print('(', daily_used_Sever[day_j].No_, ',', 'B', ')')if daily_used_Sever[day_j].assigned_Node[daily_used_Sever[day_j].assigned.index(V_T[day_j][4])] == 2:print('(', daily_used_Sever[day_j].No_,  ')')def Get_data(path):if os.path.exists(path):with open(path,'r') as data:Lis=data.readlines()Sever=[]Virtual=[]counter=0use_Case=[]while Lis:num=Lis[0].strip().split('\n')[0]if num.isdigit():Lis=Lis[1:len(Lis)]last_num=int(num)else:add_sentence=Lis[0:last_num]P=[]for i in range(len(add_sentence)):P_1=[]sentence = add_sentence[i]result=re.findall(r'[a-zA-Z0-9.]{1,}',sentence)for r_i in result:if r_i.isdigit():P_1.append(int(r_i))else:P_1.append(r_i)P.append(P_1)if counter==0:Sever=Pif counter==1:Virtual=Pif counter>1:use_Case.append(P)counter+=1Lis=Lis[last_num:len(Lis)]return Sever,use_Case,Virtualdef main():# to read standardS = time.time()A = Get_data('training-1.txt')# processd=daily_situation(A[0],A[2],A[1])d.Virtual_use()E = time.time()print(E - S)# to write standard output# sys.stdout.flush()if __name__ == "__main__":main()

2021华为软挑再探——代码实现相关推荐

  1. 2021华为软挑部分答疑——哪些你有错却总是找不到的地方,我来带你找啦(含标准输入代码)

    前期工作: 2021华为软挑初探--代码实现 2021华为软挑再探--代码实现 1 关于打包 在windows系统下,先把你写的程序写在src里面的CodeCraft-2021里面 然后在这个页面,将 ...

  2. 2020华为软挑热身赛代码开源-思路大起底(华为软件精英挑战赛编程闯关)

    本文首发于个人公众号[两猿社],后台回复[华为],获取完整开源代码链接. 昵称:lou_shang_shi_bian_tai 成绩:0.032 社长没有针对硬件做任何优化,热身赛成绩也一般.但有些比赛 ...

  3. 2019华为软挑代码总结-交通规则模拟

    文章目录 前言 三.数据读入后怎么跑呢? 总结 四.怎么看效果? 前言 以前一份代码的阅读,2019华为软挑 三.数据读入后怎么跑呢? 思路: 1.创建地图类,将地图中每个路口到其他路口最短路径保存. ...

  4. O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)

    这篇文章纯粹是心血来潮,原因是去年上传到github的参赛代码,前几天又有两个人star和fork了. 记得star热潮还是去年4月复赛刚结束的那几天,厚着脸皮在八大赛区的群里发消息求关注,之后就陷入 ...

  5. 2020华为软挑热身赛-这些坑我帮你踩过了(华为软件精英挑战赛编程闯关)

    本文始发于个人公众号[两猿社]. 声明,为保证比赛公平,本文不会提供比赛源码,仅提供思路与踩坑经验. 他来了,他来了,他带着面试绿卡走来了. 他来了,他来了,他带着20w大奖走来了. 一年一度的华为软 ...

  6. 华为软挑赛2023-初赛笔记

    前言 比赛介绍 官方链接: 2023华为软件精英挑战赛--普朗克计划 (huaweicloud.com) 赛题介绍 场景介绍 官方赛题介绍: 2023华为软件精英挑战赛初赛赛题及相关材料发布_2023 ...

  7. 华为软挑赛2023-复赛笔记

    前言 比赛介绍 参考初赛博客: 华为软挑赛2023-初赛笔记_没有梦想的大白兔的博客-CSDN博客 赛题变动 官网赛题: 华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云 (huaweicloud ...

  8. 2022华为软挑比赛(初赛笔记)

    文章目录 2022华为软挑(初赛笔记) 1. 赛题要求 2. 解决方案 2.1 挑选适合的边缘节点 2.2 第一轮:最大分配 2.3 第二轮:均值分配 总结 本文仓库地址: Github-CodeCr ...

  9. 2021华为软件精英挑战赛初赛代码及思路

    2021华为软件精英挑战赛训练赛.正式赛思路分享     有幸再次参加了华为软件精英挑战赛(去年由于不知道数据集有坑,导致没能进入复赛,今年决定再来一次弥补去年的遗憾)     今年的赛题相比去年个人 ...

  10. 2018华为软挑--模拟退火+FF解决装箱问题【C++代码】

    算法简介: 装箱问题是一个NP完全问题,求解全局最优解有很多种方法:遗传算法.禁忌搜索算法.蚁群算法.模拟退火算法等等,本次使用模拟退火,它的优点是在参数合适的情况下基本上可以100%得到全局最优解, ...

最新文章

  1. AI框架外部用户贡献代码
  2. 爱情神话:庄妃用美色套牢洪承畴之谜
  3. Kubernetes Eviction Manager工作机制分析
  4. python读取xml数据并显示为表格_用Python解析XML数据,然后用SQL创建一个数据库
  5. php连接mssql的一些方法总结
  6. java web开发常用标签
  7. Process Explorer工具介绍
  8. MySQL 8.0中的JSON增强
  9. 2017.9.18 calc 失败总结
  10. 16.2. jps - Java Virtual Machine Process Status Tool
  11. 代码安全 | 什么是OWASP?OWASP十大漏洞解析
  12. jzojWZK打雪仗【高精】【DP】【卡特兰数】
  13. 五、原码、反码和补码
  14. 政府安全资讯精选 2017年第十二期 中国网络安全漏洞披露平均效率远超美国; 美国美国国土安全部发布指令,要求联邦机构强化Web和电子邮件安全...
  15. android 开发帮助书籍pdf
  16. hihoCoder1044
  17. 连接数据库报错init datasource error, url: jdbc:mysql:/
  18. DELLEMC S4048
  19. Android IPC机制之IPC概念、Android 多进程和相关基础知识
  20. 无锁实现线程间共享数据

热门文章

  1. 萌新分享打印文件夹下所有文件的代码
  2. 《深入解析Windows操作系统第4版》随笔记录03
  3. matlab能替代几何画板吗,比几何画板更强大的工具软件GeoGebra,数学老师值得拥有...
  4. Extjs介绍及视频教程
  5. linux chmod、chown命令不起作用
  6. 千牛机器人回复词库_千牛机器人自动回复语大全
  7. java 快逸报表_数据填报 | 快逸报表工具-Java报表软件
  8. c语言设计遗传算法旅行商,用遗传算法解决旅行商问题的简单实现
  9. SVN安装和中文语言包安装
  10. excel验证身份证信息是否正确