联系我们:010-88559646

  老师群

170086145

  学生群

179326524

209318323

215410234

客服电话:010-88559646

A1-高性能民航旅客行程推荐系统

时间:2022-03-11 09:15:00

第十一届中国软件杯大赛--A组赛题 

赛题名称:高性能民航旅客行程推荐系统

组类:A组( 本科、研究生、高职)

出题企业:中国民航信息网络股份有限公司

答疑老师:黄老师 xphuang@travelsky.com.cn(请在邮件标题中标注【中国软件杯】)

A1-补充说明(2022.4.25发布)补充说明-A1-高性能民航旅客行程推荐系统.doc

线上赛题解析直播回放: https://wx.vzan.com/live/tvchat-1631200660?shauid=undefined&vprid=0&v=1652957796492

赛题简介:介绍整个赛题的实现目标、实用价值、涉及技术和整体要求

以Web服务的方式实现一个为民航旅客提供行程推荐功能的高性能后台服务,包括数据预处理、最佳路径选择等技术,为前端系统(如携程机票搜索网站)提供实时机票搜索推荐服务。

赛题业务场景:描述赛题相关的真实企业业务背景。从真实场景中,适当简化或者提炼出适合比赛的赛题场景

移动互联网时代,搜索预定机票愈加方便快捷。例如下图来回程的行程推荐需求:

1648023626775909.png

行程推荐结果如下:

1648023598459762.png

最终预定的行程和票价:

1648023677587122.png

机票预订过程中,往往需要搜索多次才形成一个订单,因此,机票搜索请求规模很大(查订比约为1000:1),必需要有一个高并发、高性能、低延时、低价命中率高的机票搜索服务提供行程推荐信息。

行程推荐涉及海量备选行程生成与票价计算,如果采用穷举法将耗费大量的CPU与内存资源,响应时间也很长。在真实机票搜索系统中,如何在有限的硬件资源下计算出多个低价行程结果是一个技术难点,尤其是在业务规则复杂的国际机票搜索领域,全世界只有不到十家公司研发出高性能机票搜索系统,是公认的难点系统。此题要求选手设计一种行程推荐算法,依据航班、运价、航班余座等三类数据,完成业务功能简洁的高性能国内机票搜索后台引擎。

基本功能要求

B/S结构的前后端系统,前端浏览器网页实现搜索请求输入以及结果展示,后台服务提供以下功能:

1、低价行程推荐:支持一个或多个(最多8个)航班联程的行程推荐功能(旅客人数限定为1人,出票代理人为1个),返回若干个最低价行程结果,功能说明:

每个航班请求需指定日期、起始城市、目的城市,只搜索起始地与目的地之间的直达航班;

航班之间衔接时间不低于120分钟;

每个最低价行程结果包含行程中的所有具体航班、舱位、总票价等信息;

最低价行程结果数由请求指定,当结果数最大可能值小于该值时,返回所有结果;

举例:

请求:

1.png

旅客人数:1

代理人:BJS001

返回结果数:2

结果:

22.png

2、多代理人行程推荐:支持输入多个出票代理人(最多20个),要求每个低价行程结果附带可出票的所有代理人信息。功能说明:

同一个航班组合,可能出现不同代理人的出票金额不同的情况,此时相同票价金额视为一个低价行程结果;

每个低价行程结果中的所有航班必须由相同代理人出票,不能切割成不同代理人出票;

举例:

 请求:

在上述低价行程推荐请求的基础上调整为3个代理人,分别为BJS001,SHA001,CAN001

结果:

9.png

3、多旅客行程推荐:在多代理人低价行程推荐的需求上,增加多个旅客(最多8个)同时搜索的功能,功能说明:

每个低价行程结果中所有旅客同机乘坐;

每个低价行程结果中所有旅客在某一个代理人处一起出票,也就是说旅客不能拆分到不同代理人处出票;

旅客数量不能超过该航班余座数值;

举例:

请求:

在上述多代理人行程推荐请求的基础上调整为2个旅客

 结果:

10.png

4、航班余座数据实时更新:航班余座数值初始值由选手自主随机生成,余座数值变更由外部模拟系统主动发送变更报文触发,更新频率较低(比如一个航班的平均更新频率大概为每天1次。一般规律,一个月内即将起飞的航班比一个月后的更新频率更高,以此类推)。

数据说明:

所有数据的原始数据都是纯文本,每一行为一条。

航班数据:

11.png

注:

(1)假设一个城市最多一个机场

(2)航班范围为未来一年未飞国内航班

运价数据:

6.png

注:每个航班对应一个或多个运价,一个运价只能覆盖一个航班。

运价规则数据:

1648025997264459.png

行程中每个航班(除最后一段)都要匹配运价规则:

(1) 匹配运价规则carrier到agencies的所有字段;

(2)其中nextCarrier字段匹配后序相邻衔接航班的承运人;

(3) 取sequenceNo最小的一条规则数据;

(4)surcharge字段作用于当前航班对应的运价之上;

(5)如果没有匹配上任何规则,视为通过(即surcharge为0);

航班余座数据:

866.png

非功能性要求

为了保证系统高性能,有如下要求:

单次搜索过程不能拆分为多进程/线程并发处理;

单台服务器的搜索服务进程/线程数为CPU核数,在请求并发数为CPU核数时,CPU的idle值应小于20%;

搜索过程全程无阻塞,没有网络传输、文件访问、进程/线程间互斥锁等操作;

航班余座数据更新时,服务器内所有搜索服务进程/线程同时生效,且搜索服务不中断不阻塞;

同一台服务器内所有搜索服务进程/线程共享独一份航班、运价、航班余座等数据,如对数据增加索引,该索引也要共享;

实现条件:开发环境、实验平台、开发语言、数据库、编译器、涉及硬件等实现条件

开发环境:linux平台

开发语言:推荐C/C++

实验平台:搜索引擎为独立的Web服务,推荐自研http服务软件,也可用第三方的http服务软件

数据库:无第三方数据库,自研数据访问技术

编译器:推荐gcc

测试数据或平台:提供给参赛者的测试环境和测试数据

航班、运价、航班余座等数据可从公开的机票预订网站上获得,或者自行模拟生成。

开发所需设备及设备指标需求说明

无特殊要求。

文档及其他要求

相关设计和说明文档应包含:软件结构说明、功能模块与微服务设计说明、接口设计说明、主要数据结构及算法说明等,提供清晰的程序结构说明和源代码阅读指南。

各评分项及大致占比

本赛题重点是高性能,因此非功能分值比重较高。

1、提交材料(20%)

代码、文档完整清晰(文档应完整描述低价搜索算法、高效数据访问技术等关键设计点,代码应当具备良好的编程风格)。

2、功能和非功能实现(70%)

基本功能要求30%

非功能性要求40%

3、创新(10%)

自研http服务软件,不使用第三方的http服务软件(如apache/nginx等)

初赛作品提交要求

1、源代码、程序包、Web服务启动指令、相关设计和说明文档、演示视频(7分钟之内)、ppt、测试数据、测试操作说明、测试过程与结果等。

2、作品实例应直接部署在公有云(或可以支持从Internet访问的私有云)平台上,方便评审老师访问。

【参赛团队作品中团队自主开发部分的软件作品著作权归参赛团队所有,其中具有市场应用及拓展的优秀作品,出题企业具有优先权,可以优先合作开发或者优先购买。另如基于该作品的任何合作升级开发、市场拓展等活动,以及在这一过程中所获得的任何商业费用,出题企业应与参赛团队协商解决。】

关于我们

客服电话:010-88559646

大赛邮箱:cnsoftbei@qq.com

邮编:100048

联系地址:北京市海淀区紫竹院路66号赛迪大厦18层

网站备案/许可证号:京ICP备05039896号-10     京公网安备 11010802020860号