简单回顾

从7月初开始参加了阿里云的算法大赛,第一赛季获得了第14名的成绩 ,第二赛季由于其他事情需要处理,获得了23名的成绩。对于一个没有受过专业算法训练,第一次参加算法比赛的我来说,成绩还是比较合理的。

经验总结

  1. 穷举部分应该最后加入
    一般来说,算法题目总归缺少不了排列组合的尝试,但是如果过早的在算法中引入了排列组合的大规模计算,则每次代码运行时间会很长,非常浪费时间。这里可以有两个方案,第一,可以做一个系统配置项,是否启用排列组合的尝试;第二,可以将排列组合的强度也做成一个配置项。
    所谓的排列组合的强度,就是算法的广度和深度的限制。例如背包问题,如果全部有10个元素,我进行全排列尝试,20个元素,则进行简单的贪婪算法。这里的10就可以认为是一个阈值,超过阈值的时候,考虑到时间成本,使用一般的算法。

  2. 保证每次运行结果都是符合题目要求的
    在复杂的场景下,你的算法可能是非常优秀的,但是可能在一个很微小的点上,是不符合题目要求的。题目要求是最大的前提,如果违反题目要求,再好的算法都是不能被采纳的。所以务必检查每次的运行结果是否符合题目要求。

  3. 保证编码正确
    有时候,一个想法是正确的,但是往往可能出现编码的错误,使得结果变坏。所以,必须保证你的代码和你的想法是一致的。如果出现你的想法使得你的运行结果变差的时候,不要先急着推翻你的想法,而是应该先看一下是不是你的代码有什么错误,没有真正反映出你的实际想法。

  4. 逻辑和阈值
    在复杂的算法题目中,有时候我们喜欢用阈值来运行出不同结果,然后选择最优的结果。但是,如果可能的话,应该以统计等方式决定阈值。如果可能的话,应该有一个明确的逻辑,而不使用阈值。阈值没有泛用性,并且有时候由于不能测试每一个阈值的效果,容易出现局部最优解,而不是全局最优解

  5. 版本管理
    不是每一个想法都会给结果带来正面的效果,有些改动可能不但没有效果,而且使得结果变坏,我们需要一个版本管理的概念,将不好的结果及时回滚到原来的状态。有时候,两个想法可能被同事加入到代码中,并且两个想法独立使用和一起使用效果也不同,这个时候更加需要版本管理工具了。建议使用Git做版本管理工具,可以自由的添加或者删减不同的想法。

  6. 自动测试 和 电源管理
    这次没有准备自动测试的代码,正确的做法是,白天进行编码工作,晚上对于阈值,各种想法的排列组合的效果,进行自动测试。
    在自动测试的时候,请注意电源管理的设定,需要看一下是否设定了休眠,如果设定了休眠状态,基本上什么都运行不了了。
    对于每次自动测试的结果,都必须保留下来,作为算法的评价依据。

  7. 中间指标 和 数据分析
    在最终目标之外,还需要订立一些其他指标来判断算法的好坏。
    整个最终结果往往是由多种因素决定的,如果将这些因素的量化结果也打印出来,对于这些指标进行分析,往往可以找到优化点。
    有一些题目,在写算法之前,可以将题目中给定的数据集进行一些分析,总结出数据集的特征,然后针对这些特征选择算法,也是一个很重要的步骤。

  8. 从答案中找问题
    很多算法的最终结果可能是一些调度计划和分配方案。仔细观察这些结果,找到一些明显可以优化的点,这也是提高算法结果的途径。
    从算法执行结果这个答案中寻找你的算法中存在的问题,是一条很有用的途径

算法和人生

算法比赛和人生有很多相识的地方,有一些算法在确定的时候,就决定了能够做出什么样的结果。
一个不好的算法,再怎么优化,得出的结果可能都比不上一个未经优化的好算法。当然,一个中庸的算法,虽然无法达到进过优化的好的算法的结果,但是往往可以接近一个未经优化的好的算法的结果。人生也是如此,选择比努力更重要。
引申开来,算法有时候也不能太转牛角尖,在一些小的局部细节上斤斤计较,而忽视了一些起决定性的因素。当然,这一点说起来容易做起来难。人人往往容易在微观的,局部的领域里面锱铢必究,而忘记从大局上找到问题的关键点。按照中心极限理论,有一些次要的因素,有些使得算法变好,有些使得算法变坏,但是这些因素的综合作用往往是相互抵消的。

编程语言

从算法层面来看,OOP的各种语言都是差不多的。很多人喜欢争论语言的优劣,其实如果真正研究算法和运筹学的,语言的优劣其实根本可以不用去考虑。使用你自己习惯的语言就可以了。我用C#习惯了,所以往往可以用C#的各种特性来简化代码,特别是Lambda和Linq这样的特性,熟练掌握的话,往往可以将负责的功能用简单的代码实现。如果真正静下心来,研究一些算法或者AI大数据的时候,你是根本没有时间和兴趣加入语言优劣的论战的。

C# 平台兼容性

注意:Windows平台的C#程序,在Mac上,用Mono执行出来的结果,可能是精度问题,结果会出现差异!有时候这些差异会影响结果。如果坚持要在两种平台上运行程序,请使用Java或者.NET Core

算法大赛网址 最后一公里极速配送

本文已经同步到 阿里云算法大赛总结

转载于:https://www.cnblogs.com/TextEditor/p/5850856.html

最后一公里极速配送 - 阿里云算法大赛总结相关推荐

  1. 智慧航空AI大赛-阿里云算法大赛总结 第一赛季总结

    [以前的文章]最后一公里极速配送 - 阿里云算法大赛总结 总结一下新的教训 1.由于都是NP难题,获得最优解用常规的方法非常困难,对于不是算法科班出身的人来说,首先应该到网络上寻找一下论文,是否有一些 ...

  2. 500位全球算法开发者零奖金参加阿里云天池大赛 AI预测台风助力防灾减灾

    9月26日,在杭州云栖大会 GEEKLAND 现场,由阿里云天池大赛主办的追风少年-台风图像时间序列预测 Hackathon 正式举行. 大赛旨在召集全球算法开发者,聚焦人工智能与气象的深度结合,探寻 ...

  3. 【啃书】【阿里云天池大赛赛题解析】目录

    算法与业务结合的开发步骤:业务理解->数据探索->特征工程->模型训练->模型验证->特征优化->模型融和.其中蕴含着模型的重构与参数的优化. 实际业务场景应用机器 ...

  4. 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)

    目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...

  5. 【读书向】阿里云天池大赛赛题解析——模型部分

    [读书向]阿里云天池大赛赛题解析--模型部分 目录 [读书向]阿里云天池大赛赛题解析--模型部分 回归 线性回归调用方法 K近邻回归调用方法 决策树回归调用方法 随机森林回归 封装 Pipeline ...

  6. 阿里云天池大赛赛题(机器学习)——工业蒸汽量预测(完整代码)

    目录 赛题背景 全代码 导入包 导入数据 合并数据 删除相关特征 数据最大最小归一化 画图:探查特征和标签相关信息 对特征进行Box-Cox变换,使其满足正态性 标签数据统计转换后的数据,计算分位数画 ...

  7. 阿里云天池大赛赛题(机器学习)——阿里云安全恶意程序检测(完整代码)

    目录 赛题背景 全代码(ML 和 DL) 特征工程进阶与方案优化 代码 特征工程进阶部分 基于LightGBM 的模型验证 模型测试 深度学习解决方案:TextCNN建模 代码 数据读取 数据预处理 ...

  8. 国内首本数据竞赛图书《阿里云天池大赛赛题解析——机器学习篇》今日开启预售!

    天池平台已经举办了超过 200 场来自真实业务场景的竞赛,每场赛事沉淀的课题和数据集,将在天池保留和开放.天池平台已成为在校学生踏入职场前的虚拟实践基地,也成为聚集40万数据人才,孵化2000余家数据 ...

  9. 阿里云天池大赛赛题解析——机器学习篇 | 留言赠书

    国内第一本针对竞赛实操的图书:<阿里云天池大赛赛题解析--机器学习篇>,正式发售. 阿里云天池7年200多场数据大赛精华提取录 为什么写这本书 七年前,天池团队的几名创始成员带着" ...

最新文章

  1. 爬虫之requests模块发送带参数的请求
  2. linux kernel 内存管理 感想总结(未完待续)
  3. 计算机科学与技术专业术语
  4. 浏览器和迅雷简单拿到动漫妹子图
  5. python3+django写的个人笔记博客
  6. Python3.5+selenium操作Chrome浏览器的简单实例
  7. UA OPTI501 电磁波 Lorentz Oscillator Model 4 Hilbet变换与Kramers-Konig关系式
  8. ORACLE SELECT 语句中使用 CASE
  9. 【云ERP】SAP S/4 HANA CLOUD 采购订单处理基本操作
  10. c语言简单的模拟坐标,C语言模拟实现简单扫雷游戏
  11. java项目红叉_完美解决Eclipse导入的项目上有个红叉,但不影响项目运行的问题
  12. mysql按日、周、月、年分别统计数据
  13. 输入流与输出流的区别
  14. 汇编jnl_汇编指令集
  15. 【Linux】Linux中变量#,@,0,1,2,*,$$,$?的解释
  16. c语言 camp;gt与camp;lt,那位高人告诉我怎么复习c语言二级啊?????
  17. 全开源微信小程序商城系统源码:基于Java+uniapp框架开发
  18. c语言编程if语句的用法,c语言if语句的用法有哪些
  19. openwrt安装GPS设备,使用GPSD获取GPS信息
  20. python pil grab screen

热门文章

  1. html中擦窗效果,最有效的清洁窗户窗框方法有哪些,怎样清洁效果最好?
  2. 笔记:git常用操作,git使用,git命令行
  3. 云商城云小店官网源码-修复30套模板支持一键对接各大系统
  4. PHP文字转语音合成网源码 百度API开发
  5. 面试:一文搞懂堆和栈的区别
  6. CentOS 5 yum Mono 2.4 (实战成功)
  7. Text Link Ads 注册[赚钱一]
  8. CakePHP 2.x十分钟博客教程
  9. Magento数据库结构:EAV
  10. 贪心——FatMouse' Trade(hdu1003)