SAS之OPTMODEL(一)

浏览: 3313
SAS

好久没有在博客发文章了,主要是文笔不好,发出来怕人耻笑,但是又因为希望能够跟别人有更多的交流,自然也希望能够在这方面写出一点自己的见解,让同行、朋友、同事了解自己,以便在未来能够有很好的切磋。正好碰到这么一个机会,认识了天善的梁总和高总,受到他们的鼓励,于是就有了水到渠成的开始。

由于本人从事数据方面的工作,因而对于数据、算法、编程有一定的了解,所以想从这方面入手来慢慢展开。

先发一个SAS系列的文章吧,近来对SAS优化问题比较感兴趣,也对这方面有一定的涉猎,所以打算从SAS/OR开始,借OPTMODEL这一过程步来逐步介绍各类优化问题吧。

正文

(1) SAS简介

SAS里面模块众多,包括了BASE、STAT、OR、ETS、IML等各类模块,如果你专攻数据清洗,那么只需要BASE模块就足以,如果要往建模方向发展,则需进一步考虑STAT和ETS模块了,这两个模块包含了各类常见模型过程步:线性回归(reg)、逻辑回归(logistic)、时间序列(arima)、聚类(cluster)等,基本上能够满足你的需求,IML也许你也会用到,假如你需要使用矩阵语言来进行计算的话,例如矩阵的数值计算。而OR模块则受众面似乎比较窄,至少我工作以来似乎没有碰到过需要用到OR模块的地方,当然跟我工作性质有关,本人主要从事数据处理、数据建模分析挖掘方面的工作,SAS/OR则主要用来探索分销网络、生产系统、资源分配和调度问题的研究,希望未来有机会在工作中用到OR吧。总之你能做的,想做的,在SAS各类模块里应有尽有,前些天参加SAS中国论坛大会,看到众多SAS公司的牛人在上面分享SAS的各类知识,收获颇多,当天讲座现场全场爆满,SAS产品应用也陈列大厅,各种大数据与SAS结合的成果展示,绝对亮瞎你的眼。所以,赶紧一起来学SAS吧,SAS资料不用担心,我会为大家奉上学习资料,保证让大家满意而归。

(2)SAS之OPTMODEL简介

前面已经介绍了OR主要涉及的领域,接下来我想借助OR模块中的OPTMODEL过程步来介绍一下SAS在运筹学方面的一些知识。

SAS中的OPTMODEL过程主要用于解决数学中的各类约束规划问题,主要包括以下几个内容:

1.      Constraint logic programming(CLP)约束逻辑规划

2.      Linear programming(LP)线性规划

3.      Mixed integer linearprogramming(MILP)混合整数线性规划

4.      Network algorithms(Network)网络算法

5.      General nonlinear programming(NLP)一般非线性规划

6.      Quadratic programming(QP)二次规划


接下来我将借助OPTMODEL过程对上述每一个主题做一个简单的介绍,由于篇幅所限,我会分为6篇小文来分享,由于个人学术水平有限,在对各类概念的介绍时,将会简略的介绍一下相关概念,至于更深一步的学术方面的知识,大家可以一起探讨和交流。

首先对OPTMODEL过程的语法简单介绍一下。

这一过程主要分为三个部分:Proc语句;Declaration语句;Programming语句。

Proc语句

PROC OPTMODEL;

这部分语句主要用于调用OPTMODEL过程步,同时初始化模型参数和模型优化方式,以及控制结果的输出形式。

Declaration语句:

      CONSTRAINT Declaration;

      IMPVAR Declaration;

      MAX and MIN ObjectiveDeclarations;

      NUMBER, STRING, and SETParameter Declarations;

      PROBLEM Declaration;

      VAR Declaration;

主要用于定义参数,变量,约束条件以及目标函数。

Programming语句:

      Assignment Statement

      CALL Statement

      CLOSEFILE Statement

      COFOR Statement

      CONTINUE Statement

      CREATE DATA Statement

      DO Statement

      DO Statement, Iterative

      …………

主要用于执行数据处理,例如读取数据集、产生随机数、对变量赋值、输出数据等。

那么接下来我将借助于OPTMODEL过程来详细的解释上述5个主题,同时解释所涉及到OPTMODEL过程中的各类选项。


1.       Constraint logic programming(CLP)约束逻辑规划

约束条件:通常是指一个包含若干变量的关系表达式,用以表示这些变量必须满足的问题,表达式可以是线性、非线性、或者是逻辑表达式。

规划目标:基于一个函数主体即objectfuction在满足约束条件的前提下对object fuction求可行解,我们称object fuction为目标函数,目标函数可以是非线性的、线性的、或者其他逻辑函数等。

约束逻辑规划的一般形式如下所示:


接下来我以”send more money字谜问题”来对函数进行规划求解:

约束条件:

字母D、E、M、N、O、R、S、Y满足

S E N D + M O R E = M O N E Y  每一分位上的字母代表一个数字

SM不等于0

每个字母都满足唯一性

目标函数:求满足条件的这8个字母所对应的数字

SAS代码如下所示:

proc optmodel;

   /* 申明变量并设定为整数 */

   var S integer, E integer, N integer,

D integer, M integer, O integer,

R integer, Y integer;

   /* 对所有变量设定上下限区间 */

   for {j in 1.._NVAR_}do;

      _VAR_[j].lb = 0;

      _VAR_[j].ub = 9;

   end;

 /* 设定约束等式 conconstraint的简写 */

   con Arithmetic: 1000*S + 100*E + 10*N +D

                 +  1000*M + 100*O + 10*R +E

                 = 10000*M + 1000*O + 100*N + 10*E +Y;

   /* 设定约束条件SM不等于0 */

   con S ne 0;

   con M ne 0;

   /* 设定唯一性 */

   con alldiff(S E N DM O R Y);

   solve; /* 运行程序进行求解 */

   print S E N D M O RY;

quit;

运行程序之后,我们可以得到如下结果:

model1.png

运行时间在log中如下所示:

NOTE: “PROCEDURE OPTMODEL”所用时间(总处理时间):

      实际时间         1.16 秒

      CPU 时间          0.84 秒

对上述结果进行验证,满足题目条件,且代码简单,运行效率相对采用data步(可以自行尝试一下)来做要高效很多。

对于约束逻辑规划,这方面可做的工作还有很多,后面如果有机会我会单独详细的介绍一下SAS中有关CLP的详细资料,绝对会很有意思。

推荐 4
本文由 mingfeng07 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

5 个评论

SAS有视频学习嘛,貌似这个很贵的
欢迎入驻,常来写写
谢谢
只需要看一些资料就行,没有你想象的那么难,发个云盘地址给你:链接: http://pan.baidu.com/s/1mifbTzi 密码: ka5w
你好,请问SAS软件都是20GB以上吗?这么大的软件包,个人电脑能够安装吗?

要回复文章请先登录注册