2018华为软件精英挑战赛经验(一)

本文分享了一场比赛经历,重点介绍销量预测问题和放置优化问题的解决方案。预测方面采用二次指数平滑法,并通过特定系数调整提高精度;优化方面则使用定向遍历可行解结合竖贪心算法和矫正算法实现高利用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初赛、复赛。比赛耗时50天。忙忙碌碌、紧紧张张。

西北赛区真的很强,最终成绩初赛6/64 复赛6/36。真是666!!!
 
简单说一下赛题:
赛题围绕两个点展开:销量预测问题、放置优化问题。
 
请求 预测问题与简单解析:赛题给出了用户对于虚拟机请求的2-3个月的历史数据文档(txt文件),需要做的是通过读取和抽取文件中关键信息(时间信息)、统计历史虚拟机的请求数量。根据历史数据去预测接下来一段时间(时间的长短、时间的间隔有一些小花样需要处理)的不同规格的虚拟机请求数量,预测结果的准确性是考察的一部分。
放置优化问题与简单解析:预测出来的虚拟机请求数量了,接下来,要去部署这些虚拟机去,怎么样来部署呢?需要把不同规格的虚拟机数量放置在固定规格的服务器上,服务器和虚拟机的规格(在一个input.txt)在文件给出,也是需要我们自己去获取关键信息,服务器的不同规格就像不同大小的容器(或者叫背包),虚拟机的不同规格就像不同大小的物品,我们要把这些不同规格的虚拟机(小物件)放在服务器(背包)上面。怎么样放得最满、最严实是我们要解决的问题。
 
举例
给出8种虚拟机:
flavor5 2 4096
flavor10 8 8192
flavor2 1 2048
flavor11  8  16384
flavor12  8  32768
flavor13  16  16384
flavor14  16  32768
flavor15  16  65536
给出3种服务器:
General  56  128  1200
Large-Memory  84  256  2400
High-Performance  112  192  3600

怎么解决:根绝历史数据,预测出8种不同规格虚拟机的请求数量,把预测出来的结果部署在3种不同规格的服务器上。预测的准确度和放置的利用率直接影响到最终的得分,最终的得分有评分公式。

 

 

 

先来一张图镇楼(假装很厉害)。96.841分
这是训练赛的截图,正式赛两次第6名,直接凉凉.....月色为你思念成河.....(我自己唱)

----------------------------------------------------------分界线----------------------------------------------------------------

废话不多说,下面分享干货:
预测方法:二次指数平滑(发现到后面用的方法大部分都是这个,确实好用,简单有效,胜过其他逼格很高的预测算法),通过一次差分数据、二次差分数据、三次差分数据(用二次差分数据做归一化处理)。用这个3种数据做二次指数平滑,再加上一个奇怪的系数,这个系数只有自己去慢慢试才能得知。
放置方法:定向遍历可行解(解系附近)30万次,加上竖贪心放置算法,加上矫正算法,再加上得分公式来权衡利弊,从30万个可行解中选取一个得分最好的解进行输出,鲁棒性很高、很稳定、很放心,毕竟是30万次尝试的结果,复赛最终的放置率可以达到99.5%以上,完美解决。
预测准确度和放置利用率之间的利弊权衡也很关键,在假设自己知道标准预测答案的前提下:怎么样去找见预测准确度和放置利用率之间的权衡点,通过评分公式去权衡,比如:我就牺牲部分预测准确度去成全更高、更完美的放置利用率又何尝不行呢? 

 

 

 

 

 

 

### 如何配置 `proj_match_points_ransac` 参数及其最佳实践 #### 参数详解 `proj_match_points_ransac` 是 Halcon 中的一个重要算子,用于基于 RANSAC 算法计算两个图像之间的投影变换矩阵。以下是其主要参数的说明以及推荐的最佳实践: 1. **Row 和 Column** - 输入参数:分别表示源图像中的点坐标(行号和列号)。 - 推荐实践:确保输入的点集尽可能覆盖整个感兴趣区域,并且具有足够的特征点以提高鲁棒性。 2. **RowsProj 和 ColsProj** - 输入参数:目标图像中对应的点坐标。 - 推荐实践:这些点应与 Row 和 Column 对应良好,通常由其他匹配算法提供初始估计[^1]。 3. **EstimationMethod** - 可选值:'linear', 'normalized_dlt', 或 'gold_standard'。 - `'linear'`: 使用线性方法快速估算模型参数。 - `'normalized_dlt'`: 归一化直接线性变换 (DLT),适用于大多数情况下的稳健性能。 - `'gold_standard'`: 数学上最优的方法,但速度较慢,适合精度优先场景[^3]。 - 推荐实践:如果对实时性有较高要求,建议使用 `'normalized_dlt'`;对于高精度需求,则可选用 `'gold_standard'`。 4. **DistanceThreshold** - 描述:定义几何距离阈值,超出此范围的点会被视为离群点。 - 推荐实践:根据实际应用场景调整,默认值可以设为 1 到 5 像素之间。较大的值可能会引入更多噪声点,而较小的值可能导致有效点被误剔除[^2]。 5. **MatchThreshold** - 描述:SAD(Sum of Absolute Differences)窗口匹配的阈值,控制匹配质量。 - 推荐实践:具体数值取决于图像对比度和纹理复杂程度。一般情况下可以从经验值如 20 开始尝试并逐步优化[^4]。 6. **RandSeed** - 随机种子初始化变量,影响随机抽样过程。 - 推荐实践:保持固定值以便于调试阶段重现相同结果;生产环境中可根据时间戳动态生成不同种子值增加多样性。 7. **ReturnParameters** - 输出参数集合,包含最终拟合得到的单应矩阵 HMatrix、剩余误差 Error、参与投票的有效样本数 NumInliers 等信息。 #### 示例代码 以下是一个简单的 Python 脚本示例展示如何调用该函数: ```python from halcon import * # 初始化 HALCON 图像对象和其他必要数据结构... row, col = [], [] # 替换为您的源图关键点位置列表 rows_proj, cols_proj = [], [] # 替换为目标图对应的关键点位置列表 # 设置 ProjMatchPointsRansac 参数 estimation_method = 'normalized_dlt' distance_threshold = 3.0 match_threshold = 20.0 rand_seed = 42 # 执行操作 result_h_matrix, error_value, num_inliers = proj_match_points_ransac( row, col, rows_proj, cols_proj, estimation_method, distance_threshold, match_threshold, rand_seed) print(f"Estimated Homography Matrix:\n{result_h_matrix}") print(f"Error Value: {error_value}, Number of Inliers: {num_inliers}") ``` #### 总结 合理设置上述各参数能够显著提升 `proj_match_points_ransac` 的运行效果,在满足应用需求的同时兼顾效率与准确性。务必依据具体的实验环境反复测试验证所设定的各项指标是否恰当。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值