目录

1.赛题描述

2.全部代码


1.赛题描述

2.全部代码


# import psutil  ##查看程序所占用的内存空间
# import osimport numpy as np
import configparser
import timestart =time.clock()config_path = 'F:\\桌面\\data\\config.ini'
path1 = "F:\\桌面\\data\\demand.csv"
path2 = "F:\\桌面\\data\\site_bandwidth.csv"
path3 = "F:\\桌面\\data\\qos.csv"
path4 = "F:\\桌面\\data\\output\\solution.txt"
##路径
# config_path = '/data/config.ini'
# path1 = "/data/demand.csv"
# path2 = "/data/site_bandwidth.csv"
# path3 = "/data/qos.csv"
# path4 = "/output/solution.txt"
#读取配置文件
conf = configparser.ConfigParser()
conf.read(config_path, encoding="utf-8")
qos_constraint = conf.getint("config", "qos_constraint")##获取时间度个数
data1 = np.loadtxt(path1, dtype=str, delimiter=',', skiprows=1)
t = len(data1)
# print(t)##获取客户结点ID
data0 = np.loadtxt(path1, dtype=str, delimiter=',')
data2 = data0[0].tolist()
data2.pop(0)
n = data2##获取边缘节点ID
data3 = np.loadtxt(path2, dtype=str, delimiter=',', skiprows=1)
m = []
for item3 in data3:m.append(item3[0].tolist()[0:2])
# print(data3)
# print(m)
##定义客户节点类
class custom:def __init__(self, name):self.name = name
##定义边缘节点类
class bianyuan(custom):# cj = 430080def __init__(self, name, data, cj):super(bianyuan, self).__init__(name)self.cj = cjself.data = datadef distribute(self, slip): ###遍历每个客户结点更新self.data = self.data + slip### 读取一个时间刻度的需求量数据
def read_demand_data(path, time_chip):data1 = np.loadtxt(path, dtype=str, delimiter=',', skiprows=1)m_demand = {}for item in range(1, len(n)+1):item_data = data1[time_chip-1][item]m_demand.update({n[item-1]: item_data})# print(m_demand)return m_demand# read_demand_data("E:\\桌面\\华为云作业\\线下调试数据\\data\\demand.csv")# 读取一个时间刻度的qos限制数据
def read_qos_data(path, i):data2 = np.loadtxt(path, dtype=str, delimiter=',', skiprows=1)# print(data2)m_qos = {}for item in data2:m_qos.update({"%s"%(item[0]):int(item[i])})# print(m_qos)return m_qos# for i in range(1, len(n)+1): ##表示的是客户节点的循环,应该放在程序的开始
#     read_qos_data("E:\\桌面\\华为云作业\\线下调试数据\\data\\qos.csv", i)# 读取一个时间刻度的单个边缘节点限制数据
def read_bianyuan_limit_data(path):data3= np.loadtxt(path, dtype=str, delimiter=',', skiprows=1)m_limit = {}for item in data3:m_limit.update({"%s"%(item[0]):int(item[1])})# locals()['bianyuan_limit_'+item[0]+'_data'] = m_limit.get("%s"%item[0])# print(locals()['bianyuan_limit_'+name+'_data'])return  m_limit# read_bianyuan_limit_data("E:\\桌面\\华为云作业\\线下调试数据\\data\\site_bandwidth.csv", "B")if __name__ == "__main__":# time_chip = 1wj = 0 ##用来存方案整体成本for item7 in m:locals()["bianyuan_list_" + str(item7)] = []  ##创建以边缘节点命名的列表m个list_all = {}  ###用于存单个边缘节点所有时刻的带宽值for time_chip in range(1, t+1):for i in range(1, len(n) + 1):  ##表示的是客户节点的循环,应该放在程序的开始m_demand = read_demand_data(path1, time_chip)  # 读取需求,返回在一个时间度下每个客户节点需求m_qos = read_qos_data(path3, i)  # 读取qos,返回一个时间度下,每个客户节点与每个边缘节点的qosm_limit = read_bianyuan_limit_data(path2)  ##读取限制性数据,# 返回每个边缘节点限制m_qos_suit = {k:v for k, v in m_qos.items() if v<=qos_constraint}  ##判断符合条件的qosm_qos_nosuit = {k:v for k, v in m_qos.items() if v>qos_constraint}m_qos_suit_num = len(m_qos_suit)# print("合适结点数目:", m_qos_suit_num)m_qos_nosuit_num = len(m_qos_nosuit)# print(m_qos_suit)# print(m_qos_nosuit)Dj = m_demand.get("%s"%n[i-1])  ##获取每个节点的需求数据slip = int(Dj)//m_qos_suit_num + 1   ##平均分配数量# print(slip)m_qos_suit_keys = m_qos_suit.keys()  ##获取适合的键(边缘节点名字)m_qos_nosuit_keys = m_qos_nosuit.keys()  ##获取不适合的键# print(m_qos_nosuit_keys)# print(m_qos_suit_keys)# print(locals()["custom_suit_" + str(n[i-1])].name_list)if i == 1:  ##只在第一轮客户结点时,创建所有边缘结点对象# flag1 = 1  ##设置flag,用于批量命名合适结点和不合适结点的对象for name in m_qos_suit_keys:# for i in range(1,101):# if flag1<(m_qos_suit_num+1):locals()["bianyuan_suit_"+name] = bianyuan(name, 0, m_limit.get(name))  ##批量命名满足要求结点对象locals()["bianyuan_suit_"+name].distribute(slip)  ##更新其内部数据# flag1 += 1# print(locals()['bianyuan_suit_A'].data)# flag2 = 1for name1 in m_qos_nosuit_keys:# for i in range(1,101):# if flag2<(m_qos_nosuit_num+1):locals()["bianyuan_suit_"+name1] = bianyuan(name1, 0, m_limit.get(name1))  ##批量命名不满足要求结点对象locals()["bianyuan_suit_"+name1].distribute(0)# flag2 += 1else:for item5 in m_qos_suit_keys:locals()["bianyuan_suit_"+item5].distribute(slip)for item6 in m_qos_nosuit_keys:locals()["bianyuan_suit_"+item6].distribute(0)##打印结果str_content1 = "%s:" % n[i-1]str_content = "%s:" % n[i-1]# print(bianyuan_name)for item2 in m_qos_suit_keys:str_content1 += "<%s,%d>," % (item2, slip)with open(path4, 'a') as file_handle:if m_demand.get(n[i-1]) and i == 1 and time_chip == 1:file_handle.write(str_content1)  # 写入elif m_demand.get(n[i-1]):file_handle.write('\n')  # 有时放在循环里面需要自动转行,不然会覆盖上一条数据file_handle.write(str_content1)  # 写入elif m_demand.get(n[i-1]) != true and i == 1 and time_chip == 1:file_handle.write(str_content)  # 写入elif m_demand.get(n[i-1]) != true:file_handle.write('\n')  # 有时放在循环里面需要自动转行,不然会覆盖上一条数据file_handle.write(str_content)  # 写入# print(str_content)##存一个时刻下边缘节点的的流量for item7 in m:  ###将一个时刻的所有边缘节点带宽存到字典里边list_all.update({item7:(locals()["bianyuan_suit_"+item7].data)})locals()["bianyuan_list_" + item7].append(list_all.get(item7))# print(list_all)# time_chip += 1##计算成本for item8 in m:locals()["bianyuan_list_" + str(item8)].sort()###获得每个边缘节点所有时刻的95带宽值print(locals()["bianyuan_list_" + str(item8)])wjj = locals()["bianyuan_list_" + str(item8)][int(np.ceil((len(locals()["bianyuan_list_" + str(item8)]) * 0.95))) - 1]print(wjj)wj += locals()["bianyuan_list_" + str(item8)][int(np.ceil((len(locals()["bianyuan_list_" + str(item8)]) * 0.95))) - 1]# wj = locals()["bianyuan_suit_"+str(item4)].return_wj()print("总成本为:", wj)# print(u'当前进程的内存使用:%.4f GB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024 / 1024))end = time.clock()print('Running time: %s Seconds' % (end - start))# main(path1, path2, path3, path4)

华为2022年软挑赛初赛试题及初级代码(成渝赛区)相关推荐

  1. 计挑赛初赛试题(2021)(Java组)

    以下题目仅为个人思路,如果有错的地方还请指出. 16.从大于等于N的正整数里找到一个最小的数M,使之满足:M和M的逆序数(如1230的逆序数为321)的乘积为一个[100000000,20000000 ...

  2. 计挑赛初赛试题(2020)(一)

    题目描述: 有一组均由字符A~Z和a~z组成的字符串,其中要求将字符串中各字符按如下要求进行转换: A<->z.B<->y.C<->x....... .X<- ...

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

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

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

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

  5. 华为2020软件精英挑战赛成渝赛区初赛赛后方案分享

    队伍介绍 我们是来自UESTC的选手.成渝赛区初赛成绩为0.1806.在这里分享我们的方案和代码.本篇博客对于前排大佬毫无用处,仅适用于后排同学学习进步使用.犹豫很久还是决定开源了,因为复赛题目数据量 ...

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

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

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

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

  8. 2016华为软件精英挑战赛:赛题及其答疑汇总

    注:本文文字均摘自官方指定网站和论坛,权威且可信,答疑见中间部分,非常全,众玩家可放心阅读. 同时文末给出了包括自己在内的诸多玩家的解法. 前言 赛题源自"未来网络"业务发放中的路 ...

  9. 2020华为软件精英挑战赛历程总结——初赛篇

    前言 去年懵懵懂懂,一个人从头自闭到尾,到最后也没对上判题器,复赛第十遗憾离场.今年的开端也是十分不顺,我们提交的第一发线上14s,这时候前排已经有0.x的成绩了,一度陷入深深的自我怀疑之中.好在队友 ...

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

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

最新文章

  1. Netty源码解析1-Buffer
  2. 如何设计应用层协议(草稿)
  3. itemchanged信号找不到_失物 | 求FDU同学帮转帮找蓝牙键盘,坐标东区宿舍19号楼...
  4. 基于VC++开发串口通信的方法
  5. 【APIO2016】Fireworks【闵可夫斯基和】【凸包向量和】【可并堆】
  6. java ee的小程序_Java EE 8 –为更多设备提供更多应用程序
  7. 在VC8里调用VBScript.dll的RegularExpression
  8. javascript中的字符串编码、字符串方法详解
  9. edittext 无法输入内容_掌握其中1个Excel小技巧,你就不用再担心会重复录入内容了。...
  10. AIX 连接IBM存储,多路径软件常用命令
  11. 管理SourceForge项目的方法
  12. mpchart点击_MPAndroidChart实现K线面板(一)
  13. 技术岗的职业规划_致程序员:30岁+的职业规划是什么?这些你必须知道!
  14. URL和URI的区别及理解
  15. VMware 运行出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”解决方案
  16. 计算机应用基础都学什么,计算机应用基础学习计划
  17. The Finalless——新学期的scrum
  18. cents 7.0命令
  19. Centos7.4安装Nginx实战
  20. div+css实现圆角阴影效果

热门文章

  1. 数据结构与算法 php pdf,数据结构与算法之美(完结)云盘分享_IT教程网
  2. java2实用教程第五版耿祥义电子版_Java2实用教程(第5版)答案_耿祥义
  3. 安卓udp发包工具_好装逼牌udp-tcp发包工具
  4. 软工文档---可行性研究报告
  5. MentoHUST讲解教程(锐捷破解)
  6. 2021-09-27
  7. asp导出excel文件格式
  8. 探索Android FrameWork底层开发视频全套
  9. Android学习视频精品课程汇总(持续更新)
  10. 输入n个学生的成绩c语言,c语言帮忙改错!输入n个学生的成绩信息,按照每个学生的个人平均成绩从高到低输出他们的信息...