优化建模实例(四):运输排程问题之二

本文继续介绍运输排程问题的输入数据处理和数据验证。

优化建模实例(四):运输排程问题之二

输入数据

该优化模型中需要使用的输入数据集如表24.10所示。

优化建模实例(四):运输排程问题之二

下列代码创建了以上数据集:

优化建模实例(四):运输排程问题之二优化建模实例(四):运输排程问题之二优化建模实例(四):运输排程问题之二

在船运排程中,为了使得合并运输线路与非合并运输线路相互关联起来,在设计数据模型时,数据集work.ship_direct_route中增加了变量shared_route。如果在去往某地区仓库的线路中不存在合并运输线路,则shared_route的取值为“DIRECT”,如地区仓库WH1这一行中,shared_route的取值为“DIRECT”;如果存在合并运输线路,则shared_route的取值为合并运输线路的名称,如地区仓库WH5这一行中,shared_route的取值为“WH4WH5”;如果仅存在合并运输线路,则在数据集中work.ship_direct_route添加一行虚拟的非合并运输线路,以便仅对变量warehouse和shared_route赋值,例如地区仓库WH4这一行,运能数据全部缺失,表示去往地区仓库WH4的线路中,并不存在非合并运输线路,但是shared_route的取值为“WH4WH5”,表示去往WH4的线路中,存在一条合并运输线路。

优化建模实例(四):运输排程问题之二

在work.stock_at_port中保存的是周初在码头和火车站待运的汽车数量。这部分汽车数量属于上周调度计划中的部分,由于允许有0到2天的待运时间,故它们仍然在码头和火车站待运。需要注意的是,这部分数量会占用本周船舶和火车的运能。

数据验证

输入数据是优化模型的基础,为了避免在模型运行过程中出现不可预测的错误,所有的输入数据都必须先经过验证,然后再输入到模型中。验证的内容包括数据的合理性、数据集之间的相互关联性、数据的完整性等内容。

前面的实例中使用了多个输入数据集,并且数据集之间是相互关联的,因此本例中运用了DATA步、HASH对象和SQL过程对多个数据集进行了验证。

在实际项目中,数据集是通过ETL程序从生产环境或其他数据库中抽取并加工生成的,这样一来,数据的合理性、关联性和完整性往往不能得到保证。因此,在实际项目中数据验证这一步骤更加重要。

首先,为了避免改变原数据集,将所有的数据都复制到临时库的新数据集中。代码如下:

优化建模实例(四):运输排程问题之二

接下来在宏DataValidation中对数据集进行验证,将错误的数据从原数据集中删除,并输出到对应的数据集work.error_XXX中(同时输出错误原因)。代码如下:

优化建模实例(四):运输排程问题之二

以上程序将数据集work.data_allocation中变量allocation或者bklg的取值小于0的观测从work.data_allocation中删除,并将其保存到work.exp_allocation中。

优化建模实例(四):运输排程问题之二

以上程序将数据集work.data_production中与work.data_allocation中的package和color不匹配的观测或者quantity取值不合理的观测从数据集work.data_production中删除,并将删除的观测保存到数据集work.exp_production中。

优化建模实例(四):运输排程问题之二

以上程序将数据集work.data_stock中与work.data_allocation中的package和color不匹配的观测或者stock取值不合理的观测从数据集work.data_stock中删除,并将删除的观测保存到数据集work.exp_stock中。

优化建模实例(四):运输排程问题之二

以上程序根据work.data_production中的生产数据和work.data_stock中的初始库存数据,生成了新的数据集work.data_production_stock。新数据集中观测关于变量package和color是唯一的,每天的产量和初始库存将保存在不同的列中。

接下来的代码会对船舶、火车的运输线路进行验证,原理和方法同上面对生产及库存数据的验证,这里以work.data_allocation中的wareshouse为基准,将在本次优化中不需要的线路从运能和排程数据集中删除,并保存到对应的以exp_开头的数据集中。   

优化建模实例(四):运输排程问题之二优化建模实例(四):运输排程问题之二

下面代码会对码头和火车站的期初库存数据进行验证。

优化建模实例(四):运输排程问题之二

在将上面所有的数据集都验证完毕之后,将会生成一个关于所删除观测的汇总信息数据集,其中每条观测为每个数据集中删除的观测条数。通过汇总数据集提供的信息,用户可以通过查看对应的以exp_开头的数据集,从而具体分析产生数据错误的原因。

优化建模实例(四):运输排程问题之二

原数据集中所有被删除的观测条数汇总如图24.7所示。

优化建模实例(四):运输排程问题之二

图24.7 数据集work.exp_status内容

图24.7表明24.2.3节中的代码创建的数据集是合理的。

在宏DataValidation的最后,通过DATASETS过程删除了验证过程中创建的、数据集名称以temp_或val_开头的中间数据集。

本文结束,下一篇文章介绍运输排程问题的代码和功能与技巧汇总。

回复【数据和代码】可以下载《深入解析SAS》一书的数据和代码。

优化建模实例(四):运输排程问题之二

查询往期文章,请回复下列关键字:

安全】==>【SAS智能平台安全管理】系列文章

Base基础】==>【Base SAS基础】系列文章

编程概念】==>【SAS编程基本概念】系列文章

描述性统计】==>【SAS统计分析系列:描述性统计分析】系列文章

读外部数据】==>【读取外部数据到SAS数据集】系列文章

假设检验】==>【参数估计与假设检验】系列文章

单数据集处理】==>【单数据集处理】系列文章

方差分析】==>【方差分析】系列文章

主成分与因子分析】==>【主成分分析与因子分析】系列文章

多数据集处理】==>【多数据集处理】系列文章

判别分析】==>【判别分析】系列文章

聚类分析】==>【聚类分析】系列文章

线性回归】==>【线性回归】系列文章

数据汇总展现】==>【数据汇总与展现】系列文章

SQL语言】==>【SQL语言】系列文章

LOGISTIC回归分析】==>【LOGISTIC回归分】系列文章

宏语言】==>【SAS宏语言】系列文章

多语言支持】==>【开发多语言支持的SAS程序】系列文章

时间序列】==>【时间序列分析】系列文章

线性规划】==>【线性规划】系列文章

优化建模实例(四):运输排程问题之二

小贴士

读者可以从以下链接获取SAS公司提供的免费版环境:

SAS大学版(SAS? University Edition)是SAS为在校大学生免费提供的基于虚拟机和网页的SAS环境。回复关键字【大学版】,可以查看详细介绍。

下载路径:

http://www.sas.com/en_us/software/university-edition/download-software.html

SAS学术版(SAS? OnDemand for Academics)是 SAS 为学术届人士免费提供的、在线的、基于SAS 私有云上的应用服务环境。

用户首先需要注册,然后按照提示信息就可登录。

注册路径:

http://odamid.oda.sas.com

本文转自《深入解析SAS — 数据处理、分析优化与商业应用 》

作者:夏坤庄、徐唯、潘红莲、林建伟

如若转载本文,请在文章顶部标注 “本文转自SAS知识 (ID: SASAdvisor),摘自《深入解析SAS — 数据处理、分析优化与商业应用 》”

优化建模实例(四):运输排程问题之二优化建模实例(四):运输排程问题之二 

作者介绍

优化建模实例(四):运输排程问题之二

夏坤庄

《深入解析SAS — 数据处理、分析优化与商业应用》第一作者, SAS软件研究开发(北京)有限公司客户职能部总监。在承担研发工作的同时,夏及其团队负责对SAS非英语市场提供技术支持,并且与在美国及其它地区的团队一起,服务于SAS的SaaS/RaaS业务,同时提供和验证关于SAS产品和技术在应用领域的最佳实践。在加入SAS软件研究开发(北京)有限公司之前,夏就职于SAS中国公司,历任资深咨询顾问、项目经理、首席顾问、咨询经理,拥有丰富的咨询和项目实施经验。在长期的从业经历中,不但为SAS的金融行业客户成功实施了众多深受好评的项目,而且在近年领导实施了非金融行业的多个大数据分析项目。

SAS知识    微信:SASAdvisor     长按二维码关注

优化建模实例(四):运输排程问题之二

欢迎大家投稿,一起分享SAS的点滴

投稿邮箱:  sasadvisor@outlook.com

优化建模实例(四):运输排程问题之二