焦华
(贵州商学院,贵阳 550014)
数学建模是从理性的视角观察客观世界,是对现实世界的数学语言描述。数学建模的过程可用图1的流程图表达[1]:
图1 数学建模的步骤流程
由流程图可以看出,计算机软件是数学建模必备的重要工具。在此不作抽象的分析讨论,而是注重实战、注重操作、注重思路。因此将全国大学生数学建模2017年竞赛题B题作为对象,分析讨论在该数学建模过程中如何用计算机软件指引正确的思考方向。现将B题重述如下:
“照相挣钱”是一种移动互联网时代的自助服务模式。用户下载应用程序App后,可注册为该App会员,并接收安排的拍摄任务(例如到超市检查某一商品的货架状况),并获得App为该任务划定的报酬。这种基于移动互联网的平台为企业提供了各种市场调研和信息收集。与传统的市场调查方法相比,既可以大大节约调查成本,又有效保障调查数据的真实性,同时缩短了调查周期。App作为平台运作的核心,任务定价是其核心要素。如果价格不合理,一些任务将无人过问,这将导致商品调查的失败[2]。
附件一是一个历史任务数据,作为一个已结束的项目,内容包括每个任务的位置、定价和完成(“1”完成,“0”未完成)情况;附件二是一个注册会员信息数据,包括注册会员的位置、信誉值等,任务开始预订时间和预订限额是参考会员的信誉值给出的,通常会员信用越高,任务选择的优先级越高,配额越大;附件三是全新的、只有任务位置信息的检查项目任务数据,请完成下列问题:
(1)研究附件一项目任务定价有何规律?分析了任务未完成的原因。
(2)分析附件一,设计一个新的任务定价方案,并将其与原方案进行比较。
(3)在很多实际情况下,多个任务可能会集中在同一位置附近,导致用户竞争选择。可以考虑打包后发布这些任务。在这样的考虑下,我们如何修改先前的定价模型,并对最终的任务完成有什么影响?
(4)为附件三中的新项目提供任务定价方案并评估你的方案的实施效果。
附件一:Excel表格——已结束项目任务数据
附件二:Excel表格——会员信息数据
附件三:Excel表格——新项目任务数据
竞赛题B给出之后,后面并不是要给出完整的解答方案,而是只针对问题1,借助计算机软件,寻找到解题正确的路径,强调软件的“灯塔”指引作用。
“多赢”才是能够长期存在的商业模式,企业、App平台、会员三者关联如图2。
图2 App平台效用图
App平台搭建起企业与注册会员之间的桥梁,企业通过App平台发布付薪任务,会员从App平台领取任务,任务完成后提交到App平台,企业从App平台获取需要的资料。
附件一是一个已结束项目的任务数据,表头是任务号码、任务GPS纬度、任务GPS经度、任务标价、任务执行情况,共有835条记录。附件二是会员信息数据,表头是会员编号、会员位置(GPS)、预订任务限额、预订任务开始时间、信誉值,共有1877条记录。
用Excel的相关函数对“已结束项目任务数据.xls”作简单数据汇总[3]:
该电子表格除表头外,有835行数据,上面只取部分截图。
完成任务数的公式为“=COUNTIF(E2:E836,"=1")”,结果为:522。
未完成任务数的公式为“=COUNTIF(E2:E836,"=0")”,结果为:313。
标价最大值的公式为“=MAX(D2:D836)”,结果为:85。
标价最小值的公式为“=MIN(D2:D836)”,结果为:65。
标价平均值的公式为“=AVERAGE(D2:D836)”,结果为:69.11078。
图3 Excel数据汇总图
从上面结果可看出任务定价的规律:最低价65元、最高价85元、平均价69元。
海量的表格数据不容易找到规律,要想办法图形表示。MATLAB图形功能强大、程序设计简捷明快,只要将Excel表格数据导入MATLAB,余下的事就是MATLAB的绘图和编程。用先选定后复制的方式将“已结束项目任务数据.xls”这个Excel表中的“任务GPS纬度”列导入到剪贴板中,再将剪贴板中数据导入到MATLAB中,具体操作如下[4]:
进入MATLAB工作桌面,选取菜单File→Import Data…→选定.xls文件→选clipboard(剪贴板)→点击Next→点击Next→点击Finish→区域数据存放到MATLAB的clipboarddata变量中。此时命令窗口出现“Import Wizard created variables in the current workspace.”的信息,于是MATLAB的工作空间中就有了clipboarddata变量,其存储了从Excel表中导过来的数据。在命令窗口执行〉〉x=clipboarddata;将数据保存到x中。整个过程其实结果就是将Excel表中的“任务GPS纬度”列保存到了MATLAB的变量x中。
用同样方法将Excel表中的“任务GPS经度”列保存到MATLAB的变量y中(y=clipboarddata)、“任务执行情况”列保存到变量bz中(bz=clipboarddata;)。
用同样方法将附件二:“会员信息数据.xls”中的“会员位置(GPS)”列保存到变量hy中(hy=clipboarddata;),注意每个单元格有两个数据。
由于MATLAB工作空间中的数据在退出时会释放掉,为了永久保存这里用save命令save app_rw_hy将数据存盘,文件以app_rw_hy.mat存放在默认的C:MATLAB6p1work目录中,以后用load app_rw_hy加载,将数据读入内存。
为了得到835个项目任务位置的分布情况,在命令窗口执行load app_rw_hy,plot(y,x,'o')命令后,得到图4(1个小蓝圈代表1个项目任务位置)。
图4 项目任务位置分布图
注意:纬度、经度是球面坐标系的度量,这里直接作为纵坐标和横坐标绘制平面图,实际上是进行了球面到平面的坐标变换。图中反映了任务之间大致的位置关系。plot(y,x,'o')以经度y为横坐标、以纬度x为纵坐标绘图是为了和电子地图的标识相一致。
为了在图中标注任务完成情况,编写M文件sxjm1.m,代码如下[4]:
运行后得到图5的图案,其中小蓝圈代表完成的项目任务,小红圈代表未完成的项目任务。
图5 项目任务完成情况标识图
不忘初心,任务未完成的原因是什么?注册会员位置离任务位置很远吗?请注意有835个项目任务,有1877个注册会员,编写M文件sxjm2.m,扩充代码如下[5]:
运行后得到图6的图案,其中绿方框代表会员位置。
图6 项目任务、会员位置图
为什么只见方框不见圆圈?1877个方框将835个圆圈(含蓝圆圈与红圆圈)全覆盖了?通过观察其中有一个绿方框和其他绿方框相距很远,现编写代码sxjm4.m将其锁定[5]。
运行结果得到i=1175,在MATLAB命令窗口键入命令检验:
在Excel表格中找到单元格B1176,其中的两个数据(113.131483,23.031824)表达的纬度和经度是离谱的,应当是原始数据的录入错误(纬度和经度颠倒了),需要纠正过来。修改M文件sxjm2.m代码如下:load app_rw_hy,plot(y,x,'o')hold on
运行结果如图7。
图7 数据修正后的项目任务、会员位置图
能够看到部分未被覆盖的圆圈,有少部分散远的方框,在MATLAB中将图形逐步放大,如图8。
图8 把图7部分放大图
图9 把图8部分放大图
图10 把图9部分放大图
观察上面的图形发现一个与常识相背的现象:有些与会员距离远的任务是完成了的,而有些任务位置处在会员密布的地方居然未完成,如何解释?初心本来是完成任务的就近原则,想通过数据图形化得到验证,结果却深受打击。仔细分析可以这样解释:图中的位置距离是经纬度的偏差,而非实际的交通状况,可能城市建筑物的阻碍或路面施工貌似距离近的两个地方反而路程远或者不方便;而图中距离远的两点可能有地铁直达很方便。从会员预定任务到App任务指派分配,应当是软件程序完成的。前面的表格数据并没有表明哪个会员完成了哪项任务,但分配原则应当是一项任务只能安排一个人(如果安排多人,任务报酬给谁?),一个人可安排多项任务。因此有些任务位置虽然处在会员密布的地方,但只能指派一名会员去完成,而此人信誉值不高。
观察图形还可得到,会员分布比任务分布范围广阔很多,但集中度是在任务区域范围。由于会员信息数据表中位置列对应的每个单元格包含两个数据,不能像前面一样用Excel的函数得到位置相关的最大值和最小值,只能用MATLAB编程求得。
为了得到会员纬度、经度的最大值和最小值,编写M文件sxjm3.m代码如下:
运行后得到会员的位置情况如下:
会员纬度最小值:20.3351,最大值:33.6521
会员经度最小值:106.2391,最大值:116.9705
由前面的结果任务的位置情况如下:
任务纬度最小值:22.49308,最大值:23.87840
任务经度最小值:112.6833,最大值:114.4936
可以看出会员的范围比任务的范围要广阔得多。
虽然前面已将表格数据图形化,但并不知道任务及会员在地球上的具体位置,无论是好奇心或是解决问题的需要,都应当借助电子地图查询。在此利用百度地图框定会员区域。
首先进入百度首页(www.baidu.com),点击页面右上部的地图选项卡,进入地图后点击正下方的地图开放平台链接,进入平台后下拉滚动条,找到工具支持——坐标拾取器,点击后进入北京地图,滚动鼠标滚轮可看到中国地图和世界地图。地图上移动鼠标时可看到任意地点的经纬度坐标,找到你需要的位置用左键点一下,坐标值将显示于右上角文本框。
由会员纬度最小值20.3351及经度最小值106.2391可确定是越南南定;由会员纬度最大值33.6521及经度最大值116.9705可确定是中国宿州。在地图上框定会员区域如图11。
图11 会员区域框定图
从图中可看出越南除外,框定会员区域有10个省市自治区的领地:广东、广西、贵州、湖南、江西、湖北、安徽、河南、四川及重庆(红色矩形框框定)。
下面用GPSspg查询网(www.gpsspg.com)中的经纬度查询框定任务区域。进入www.gpsspg.com页面后,点击左边的在线工具网页列表中的经纬度查询,进入页面后在搜索栏输入纬度和经度可得到确定的地理位置。
图12 由GPSspg查询网得到任务区域左下角位置
由任务纬度最小值22.4931及经度最小值112.6833可确定是广东的江门。如图13所示。
由任务纬度最大值23.8784及经度最大值114.4936可确定是广东的河源。于是框定的任务区域如图14(红色矩形框框定)。
任务区域框定在广东珠江三角洲的城市。为了查对比较,继续用GPSspg查询网(www.gpsspg.com)中的经纬度查询,此时搜索栏输入的不是纬度和经度,而是红框中的地名。
图13 由GPSspg查询网得到任务区域右上角位置
图14 框定的任务区域
图15 框定的任务区域放大图
图16 由GPSspg查询网得到广州的经纬度
可查到广州的纬度和经度为gzw=23.1291,gzj=113.2644;同样方法可得到:
运行后得到图17(绿色三角形代表珠三角9座城市的位置)。
图17 任务、城市合并图
将两张图作比对。
图18 任务、城市合并图与珠三角地图的比对图
比对结果是:任务主要集中在珠三角的佛山、广州、东莞、深圳,东莞完成情况非常好,深圳完成情况很差,佛山与广州喜忧参半。是什么原因造成的?
根据统计数据四个城市2016年人均GDP为:深圳16.74万元,广州14.53万元,佛山11.61万元,东莞7.51万元[6],由此可见,任务完成情况和当地经济发展水平有关联,任务标价(平均69元)对收入高的城市吸引力弱、对收入低的城市吸引力强。
前面提到会员分布比任务分布范围广阔很多,但集中度是在任务区域范围。会员分布区域框定了10个省市自治区的领地;而任务分布区域只框定了广东珠三角地区。任务对会员的吸引力有两方面:任务难度和任务标价。MATLAB绘图中的位置距离是经纬度的偏差,不是实际的交通状况,看不出任务对会员的难易程度。用软件程序完成的从会员预定任务到App任务指派分配,只能是一项任务只能安排一个人。此人未完成任务的原因可能是信誉值不高、标价没有吸引力、任务有难度或者临时有事等。
原始的表格数据并没有表明哪个会员完成了哪项任务,未完成的任务追责到哪个会员,但App平台是记录在案的,并以此为依据重新评定注册会员的信誉值。至于App平台如何完成从会员预定任务到任务的指派分配,如何及时动态评定会员的信誉值,等等,这是App应用程序的源代码决定的。数学建模大赛的魅力是让我们只看见“冰山一角”[7]。
分析和解决问题的过程中,充分应用了办公软件Excel,工程师软件MATLAB,功能强大的专业软件百度地图及GPSspg查询网。这些软件如航海中的“灯塔”,指引了正确的思考方向。在使用通用软件编程困难的情况下,选用强大的专业软件,就仿佛站在巨人的肩上,前方的路由模糊变清晰!