数学,映射,建模和运动:优步工程在广泛的具有挑战性问题上工作。现在,我们挑战了你:如果你认为你可以解决我们,这是证明它的机会。我们与之合作Codefights.给你带来#uberbot.。

在Codefights上的玩家参与与人类玩家和自动机器人的计时、竞争性编码挑战。当你与UberBot共同作战时,你将解决我们在发展业务中面临的一些核心挑战,比如找到一辆车的最佳路线,或者如何为uberPOOL匹配最佳乘客。

开发机器人
CodeFights是如何考虑优步开发这款机器人的?我们有3个主要限制条件:
使与超级相关的任务。许多编码挑战可以向您没有看到解决任务的最终影响和业务应用程序的程度。我们希望包括足够的上下文来显示每个任务所代表的问题空间的更大图像。
在3-10分钟内进行明确定义的任务可解决。我们的一些问题需要一段时间来解决;当处理大问题时,将一个大任务分解成更小的、自包含的模块是一种很好的方法,它可以在不需要所有前期工作的情况下提供更大的蓝图。
把简单、中等和困难的任务结合起来。一系列的困难是我们实际工作的内容,并给我们更多的分辨率来衡量绩效。
每一场对抗UberBot的cofight都包含3-5个任务,包括代码编写和代码审查:
- 调试:找出错误并修复他人的实施。
- 恢复:您有一个实现,但是缺少其中的一部分,您需要恢复它。
- 代码从头开始:我们提供一个算法规范,你写它。
为了简单起见,评分完全基于正确性和速度。你回答得越快,你得到的分数就越多。
《CodeFights》在创造内容时所关注的一大问题便是让任务变得足够困难而具有挑战性,同时又足够简单而保持乐趣。“作为一个实验,我们在10月初将机器人添加到CodeFights的面试过程中,在那里,面对面面试的第一部分是与UberBot对抗。CodeFights的首席技术官Aram Shatakhtsyan告诉我们,“但后来我们意识到,我们的受访者是一个Ioi.金牌得主。所以这是一个非常有偏见的样本!”
一旦创建了机器人的内容,就是时候将机器人的性能校准给超级工程师了。像CodeFights的其他机器人一样,Uberbot有两个核心组件:培训和播放。
培训
在推出之前,优步的软件工程师通过与UberBot作战来解决任务。系统地测量和监控每个尝试解决方案的组成部分。UberBot会追踪优步工程师答对问题的频率,如果答对了,还会追踪他们完成任务所需的时间。(' totalCount, rightCount, wrongCount '和' avgAnsTime ')。随着正确答案的积累,我们重新计算基准:
' newAvgAnsTime = (avgAnsTime * rightCount + ansTime) / (rightCount + 1) '
`antime`是培训师给出正确答案的时间。我们重复了这段时间来积累大型样品并产生Uberbot的竞争策略,进一步描述。
玩
为了让这个模拟模拟出一个优步工程师会如何表现,当面对对手时,优步机器人模拟复制了它在训练中遇到的一系列答案。对于每一项任务,UberBot会使用以下方法概率地决定其得分:
' right = rightCount / totalCount '
`pprong = orycount / totalcount`
' Pskip = 1 - right - Pwrong '
“Plight,Pwrong,PSKIP”代表Uberbot将正确地回答给定任务的概率,错误地或根本不正确。如果Uberbot决定正确回答,它可以从平均优步工程师的随机偏差答案到达其最终性能的时间。
挑战机器人
现在你已经有了一些关于UberBot是如何构建的背景知识,你准备好进行CodeFight了吗?挑战#uberbot.在这里:https://codefights.com/bots/bot_uber.。如果你能打败他们,加入他们:超越机器人,我们将邀请你更多地了解在优步工程工作是什么感觉。好运!







