资源

NLP程序章节中的SAS代码(NLP)

/****************************************************************//*S A S S A M P L E L I B R A R Y*//*                                                              *//*姓名:NLP*//*标题:NLP程序章节中的SAS代码(NLP)*//*产品:或*//*系统:所有*//*关键词:NLP*//*程序:NLP*//*数据:*//*                                                              *//*支持:更新:*//*参考:*//*其他:*//*                                                              *//****************************************************************/标题“PROC NLP”;/****************************************************************//*PROC NLP:入门*//****************************************************************/标题3“无约束问题。Rosenbrocks函数';/*无约束问题*/程序nlp;最小f;decvar x1 x2;f1=10*(x2-x1*x1);f2=1-x1;f=.5*(f1*f1+f2*f2);跑步;title3“最小二乘法”;/*最小二乘法*/进程nlp;lsq f1 f2;decvar x1 x2;f1=10*(x2-x1*x1);f2=1-x1;跑步;title3“决策变量的边界约束”;/*决策变量的边界约束*/程序nlp;lsq f1 f2;decvar x1 x2;边界x1-x2<=.5;f1=10*(x2-x1*x1);f2=1-x1;跑步;title3“决策变量的线性约束”;/*决策变量的线性约束*/进程nlp;lsq f1 f2;decvar x1 x2;边界x1-x2<=.5;lincon x1+x2<=.6;f1=10*(x2-x1*x1);f2=1-x1;跑步;标题3“决策变量的非线性约束”;/*决策变量的非线性约束*/proc nlp tech=数量;最小f;decvar x1 x2;边界x1-x2<=.5;lincon x1+x2<=.6;nlincon c1>=0;c1=x1*x1-2*x2;f1=10*(x2-x1*x1);f2=1-x1;f=.5*(f1*f1+f2*f2);跑步;/*一个简单的最大似然示例*/title3“简单的最大可能性示例”;数据x;输入x@@;数据线;1 3 4 5 7;proc nlp数据=x vardef=n协方差=h pcov phes;剖面平均σ/α=.5.1.05.01;最大loglik;参数均值=0,σ=1;界限sigma>1e-12;loglik=-0.5*((x平均值)/σ)**2-log(σ);跑步;/*CRPJAC声明*/标题3“CRPJAC声明”;proc-nlp技术=列弗马;lsq f1 f2;decvar x1 x2;梯度g1-g2;crpjac cpj1-cpj3;f1=10*(x2-x1*x1);f2=1-x1;g1=-200*x1*(x2-x1*x1)-(1-x1);g2=100*(x2-x1*x1);cpj1=400*x1*x1+1;cpj2=-200*x1;cpj3=100;跑步;/*GRADIENT语句*/title3“梯度声明”;proc-nlp-tech=刚果;最小y;decvar x1 x2;梯度g1-g2;y1=10*(x2-x1*x1);y2=1-x1;y=.5*(y1*y1+y2*y2);g1=-200*x1*(x2-x1*x1)-(1-x1);g2=100*(x2-x1*x1);跑步;/*HESSIAN声明*/标题3“HESSIAN声明”;proc-nlp-tech=nrridg;最小f;decvar x1 x2;梯度g1-g2;粗麻布h1-h3;f1=10*(x2-x1*x1);f2=1-x1;f=.5*(f1*f1+f2*f2);g1=-200*x1*(x2-x1*x1)-(1-x1);g2=100*(x2-x1*x1);h1=-200*(x2-3*x1*x1)+1;h2=-200*x1;h3=100;跑步;/*雅各布语句(Rosenbrock函数)*/title3“雅各比声明(Rosenbrock函数)”;proc-nlp-tech=levmar;数组j[2,2]j1-j4;lsq f1 f2;decvar x1 x2;雅可比j1-j4;f1=10*(x2-x1*x1);f2=1-x1;j[1,1]=-20*x1;j[1,2]=10;j[2,1]=-1;j[2,2]=0;/*不需要*/跑步;/*MINQUAD和MAXQUAD语句*/title3“MINQUAD和MAXQUAD声明”;proc-nlp-pall;数组h[2,2].4 00 4;minquad h,-100;decvar x1 x2=-1;边界2<=x1<=50,-50≤x2≤50;林肯10<=10*x1-x2;跑步;proc-nlp-pall;minquad h,-100;decvar x1 x2;边界2<=x1<=50,-50≤x2≤50;林肯10<=10*x1-x2;h1=.4;h4=4;跑步;处理nlp全部;矩阵h[1,1]=.4 4;minquad h,-100;decvar x1 x2=-1;边界2<=x1<=50,-50≤x2≤50;林肯10<=10*x1-x2;跑步;标题3;/****************************************************************//*PROC NLP示例1:使用DATA=选项*//****************************************************************/title“PROC NLP示例1。使用DATA=选项';proc-nlp-tech=levmar;lsq y1-y15;parms x1-x3=1;tmp1=15*x2+最小值(1,15)*x3;y1=0.14-(x1+1/tmp1);tmp1=14*x2+最小值(2,14)*x3;y2=0.18-(x1+2/tmp1);tmp1=13*x2+最小值(3,13)*x3;y3=0.22-(x1+3/tmp1);tmp1=12*x2+最小值(4,12)*x3;y4=0.25-(x1+4/tmp1);tmp1=11*x2+最小值(5,11)*x3;y5=0.29-(x1+5/tmp1);tmp1=10*x2+最小值(6,10)*x3;y6=0.32-(x1+6/tmp1);tmp1=9*x2+最小值(7,9)*x3;y7=0.35-(x1+7/tmp1);tmp1=8*x2+最小值(8,8)*x3;y8=0.39-(x1+8/tmp1);tmp1=7*x2+最小值(9,7)*x3;y9=0.37-(x1+9/tmp1);tmp1=6*x2+最小值(10,6)*x3;y10=0.58-(x1+10/tmp1);tmp1=5*x2+最小值(11.5)*x3;y11=0.73-(x1+11/tmp1);tmp1=4*x2+最小值(12,4)*x3;y12=0.96-(x1+12/tmp1);tmp1=3*x2+最小值(13,3)*x3;y13=1.34-(x1+13/tmp1);tmp1=2*x2+最小值(14.2)*x3;y14=2.10-(x1+14/tmp1);tmp1=1*x2+最小值(15.1)*x3;y15=4.39-(x1+15/tmp1);跑步;数据条;输入r@@;w1=16.-_n;w2=最小值(_n_,16.-_n);数据线;.14  .18  .22  .25  .29  .32  .35  .39.37  .58  .73  .96 1.34 2.10 4.39;proc-nlp-data=bard-tech=levmar;lsq y;参数x1-x3=1。;y=r-(x1+_obs_/(w1*x2+w2*x3));跑步;proc-nlp-tech=levmar;数组r[15].14.18.22.25.29.32.35.39.37.58.73  .96 1.34 2.10 4.39 ;数组y[15]y1-y15;lsq y1-y15;参数x1-x3=1。;do i=1至15;w1=16.-i;w2=最小值(i,w1);w3=w1*x2+w2*x3;y[i]=r[i]-(x1+i/w3);结束;跑步;/****************************************************************//*PROC NLP示例2:使用INQUAD选项*//****************************************************************/title“PROC NLP示例2”。使用INQUAD=选项';数据四元1;输入类型$名称$x1 x2;数据线;常数-100  -100四边形x1 0.4 0四线组x2 0 4;proc-nlp-inquad=quad1-all;最小值;参数x1x2=-1;边界2<=x1<=50,-50≤x2≤50;林肯10<=10*x1-x2;跑步;数据四元2;输入类型_$_row_$_col_$_value_;数据线;常量-100四芯x1 x1 0.4四芯x2x2 4;数据四边形3;输入类型$名称$x1 x2 _rhs;数据线;常量-100  -100   .四线组x1 0.020。四芯x2 0.00 2。参数-1    -1   .下面。2   -50   .上方。50    50   .通用电气公司。10    -1  10;进程nlp-inquad=quad3;最小值;参数x1x2;跑步;/****************************************************************//*PROC NLP示例3:使用INEST=选项*//****************************************************************/title“PROC NLP示例3”。使用INEST=选项';proc-nlp-tech=trureg-outest=res;最小y;参数x1=1,x2=.5;界限0≤x1-x2;lincon.57735*x1-x2>=0,x1+1.732*x2>=0,-x1-1.732*x2>=-6;y=(((x1-3)**2-9.)*x2**3)/(27*sqrt(3));跑步;数据betts1(type=est);输入类型$x1x2_rhs;数据线;参数1.5。下层0 0。第57735-1页。第1.732页。勒1 1.732 6;proc-nlp-inst=betts1-tech=trureg;最小y;参数x1x2;y=(((x1-3)**2-9)*x2**3)/(27*sqrt(3));跑步;数据betts2(类型=est);输入类型$x1 x2 rhs a b c d;数据线;参数1.5。3   9  27   3下层0 0。通用电气57735-10。通用电气1 1.732 0。le 1 1.732 6。;proc-nlp-inst=betts2-tech=trureg;最小y;参数x1x2;y=(((x1-a)**2-b)*x2**3)/(c*sqrt(d));跑步;/****************************************************************//*PROC NLP示例4:重新启动优化*//****************************************************************/title“PROC NLP示例4。重新启动优化';proc-nlp-tech=trureg-outmodel=model-outest=est out=out1;lsq y1 y2;参数x1=-1.2,x2=1。;y1=10.*(x2-x1*x1);y2=1.-x1;跑步;proc打印数据=out1;跑步;proc nlp tech=none model=model inest=est out=out 2 outder=1 pjac PHISTORY;lsq y1 y2;参数x1x2;跑步;proc打印数据=out2;跑步;/****************************************************************//*PROC NLP示例5:近似标准误差*//****************************************************************/title“PROC NLP示例5。近似标准误差;数据x;输入x@@;数据线;1 3 4 5 7;proc nlp数据=x cov=j pstderr pshort PHISTORY;lsq残渣;参数平均值=0;resi=x平均值;跑步;proc nlp数据=x cov=1 sigsq=1 pstderr phes pcov pshort;最小nloglik;参数均值=0,σ=1;边界1e-12<σ;nloglik=.5*((x平均值)/σ)**2+log(σ);跑步;proc nlp数据=x cov=1 sigsq=1 pstderr pcov pshort;最小平方米;参数平均值=0;平方剩余=.5*(x平均值)**2;跑步;proc nlp数据=x cov=2 pstderr pcov pshort;最小平方米;参数平均值=0;平方剩余=.5*(x平均值)**2;跑步;/****************************************************************//*PROC NLP示例6:最大似然威布尔估计*//****************************************************************/title“PROC NLP示例6。最大似然威布尔估计;title3“无法律(1982):2-参数Weibull MLE”;数据枪;输入天数cens@@;数据线;143  0  164  0  188  0  188  0190  0  192  0  206  0  209  0213  0  216  0  220  0  227  0230  0  234  0  246  0  265  0304  0  216  1  244  1;数据par1(类型=est);保持类型sigθ;_type_=“武器”;sig=.5;c=.5;θ=0;产出;_类型=“b”;sig=1.0e-6;c=1.0e-6;θ=。;产出;跑步;proc-nlp-data=pike-tech=tr-inst=par1-outest=opar1outmodel=模型cov=2 vardef=n pcov phes;最大logf;参数sig c;剖面sig c/alpha=.9至.1 x-1.09至.01 x-.01;x_th=天数-θ;s=-(x_th/sig)**c;如果cens=0,则s+log(c)-c*log(sig)+(c-1)*log;logf=s;跑步;/*计算θ参数的上限*/proc单变量数据=pike noprint;var天数;输出=stats n=nobs min=minx range=range;跑步;数据统计;设置统计信息;保持类型θ;/* 1. 写入参数观察*/θ=最小值-.1*范围;如果θ<0,则θ=0;_type_=“参数”;产出;/* 2. 写入ub观察*/θ=最小值*(1-1e-4);_type_=“ub”;产出;跑步;进程排序数据=opar1;按类型;跑步;数据par2(类型=est);合并opar1(drop=theta)统计;按类型;保持类型sig cθ;if_type_ in(“parms”“lowerbd”“ub”);跑步;proc-nlp-data=pike-tech=tr-inst=par2-outest=opar2模型=模型cov=2 vardef=n pcov phes;最大logf;参数sig cθ;剖面sigθ/α=.5.1.05.01;跑步;标题3;/****************************************************************//*PROC NLP示例7:简单池问题*//****************************************************************/title“PROC NLP示例7。简单汇集问题;处理nlp全部;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy pools=1;界限0<=amountx amounty amounta amountb amountc,amountx<=100,数量<=200,0<=pooltox pooltoy ctox ctoy,1<=池<=3;lincon amounta+amountb=池tox+池玩具,pooltox+ctox=数量x,pooltoy+ctoy=数量,ctox+ctoy=金额c;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;costa=6;成本b=16;成本c=10;成本x=9;成本=15;f=成本x*金额x+成本*金额-costa*amounta-costb*amountb-costc*amountc;nlc1=2.5*数量x-池*池tox-2。*ctox;nlc2=1.5*数量-泳池*泳池玩具-2.*ctoy;nlc3=3*amounta+amountb-pools*(amounta+amountb);跑步;数据初始化1(类型=est);输入类型_$amountx amounty amounta amountbamountc pooltox pooltoy ctox ctoy泳池_rhs成本成本成本成本ca-cb-cc-cd;数据线;参数1 11 11 11 11 1 1 1 1. 6 16 10 9 15  2.5 1.5 2. 三。;proc-nlp-inst=init1-all;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy泳池;界限0<=amountx amounty amounta amountb amountc,amountx<=100,数量<=200,0<=pooltox pooltoy ctox ctoy,1<=池<=3;lincon amounta+amountb=池tox+池玩具,pooltox+ctox=总量x,pooltoy+ctoy=数量,ctox+ctoy=金额c;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;f=成本x*金额x+成本*金额-costa*amounta-costb*amountb-costc*amountc;nlc1=ca*amountx-pools*pooltox-cc*ctox;nlc2=cb*数量-池*池玩具-cc*ctoy;nlc3=cd*amounta+amountb-pools*(amounta+amountb);跑步;数据初始化2(类型=est);输入类型$amountx数量amounty数量b数量cpooltox pooltoy ctox ctoy泳池_rhs costa costb costc costx costy;数据线;参数1 11 11 11 11 1 1 1 1.   6 16 10  9   15 2.5 1.5  2  3下标0 0 0 0 00 0 0 0 1.   .  .  .  .    .   .   .  .  .上部100 200。.   .  .  .  .    .   .   .  .  .等式。1  1  .   -1  -1   .  .  .0   .  .  .  .    .   .   .  .  .等式1-1   .  -1  .  .0   .  .  .  .    .   .   .  .  .等式。1  .  .  .    .  -1   . -1  .0   .  .  .  .    .   .   .  .  .等式。1    .   .  -1 -1  .0   .  .  .  .    .   .   .  .  .;proc-nlp-inst=init2-outmod=model-all;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy游泳池;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;f=成本x*金额x+成本*金额-costa*amounta-costb*amountb-costc*amountc;nlc1=2.5*数量x-池*池tox-2。*ctox;nlc2=1.5*数量-泳池*泳池玩具-2.*ctoy;nlc3=3*amounta+amountb-pools*(amounta+amountb);跑步;proc-nlp-inst=init2-model=model-all;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy泳池;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;跑步;proc-nlp-inst=init2-model=model-all;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy=0,池=2;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;跑步;/****************************************************************//*PROC NLP示例8:化学平衡*//****************************************************************/title“PROC NLP示例8。化学平衡’;proc-nlp-tech=tr-pall;数组c[10]-6.089-17.164-34.054-5.914-24.721-14.986 -24.100 -10.708 -26.662 -22.179;阵列x[10]x1-x10;最小y;parms x1-x10=.1;边界1.e-6<=x1-x10;林肯2.=x1+2.*x2+2.*x3+x6+x10,1.=x4+2.*x5+x6+x7,1.=x3+x7+x8+2.*x9+x10;s=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10;y=0。;do j=1到10;y=y+x[j]*(c[j]+log(x[j]/s));结束;跑步;proc nlp tech=tr fdhessian all;数组c[10]-6.089-17.164-34.054-5.914-24.721-14.986 -24.100 -10.708 -26.662 -22.179;阵列x[10]x1-x10;阵列g[10]g1-g10;最小y;参数x1-x10=.1;边界1.e-6<=x1-x10;林肯2.=x1+2.*x2+2.*x3+x6+x10,1.=x4+2.*x5+x6+x7,1.=x3+x7+x8+2.*x9+x10;s=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10;y=0。;do j=1到10;y=y+x[j]*(c[j]+log(x[j]/s));g[j]=c[j]+log(x[j]/s);结束;跑步;/****************************************************************//*PROC NLP示例9:最小化网络中的总延迟*//****************************************************************/title“PROC NLP示例9。最小化网络中的总延迟”;proc nlp所有初始值=.5;最大y;parms x12 x13 x32 x24 x34;边界x12<=10,x13≤30,x32≤10,x24<=30,x34≤10;/*流入十字路口的东西必须流出*/嵌线x13=x32+x34,x12+x32=x24,x24+x34=x12+x13;y=x24+x34+0*x12+0*x13+0*x32;跑步;proc nlp all initial=.5;最小y;parms x12 x13 x32 x24 x34;边界x12 x13 x32 x24 x34>=0;lincon x13=x32+x34,/*流入=流出*/x12+x32=x24,x24+x34=5;/*=f=所需流量*/t12=5+.1*x12/(1-x12/10);t13=x13/(1-x13/30);t32=1+x32/(1-x32/10);t24=x24/(1-x24/30);t34=5+.1*x34/(1-x34/10);y=t12*x12+t13*x13+t32*x32+t24*x24+t34*x34;跑步;/****************************************************************//*重写PROC OPTMODEL的NLP模型*//****************************************************************//*PROC NLP示例7*/处理所有nlp;参数数量x数量数量数量数量b数量cpooltox pooltoy ctox ctoy pools=1;界限0<=amountx amounty amounta amountb amountc,amountx<=100,数量<=200,0<=pooltox pooltoy ctox ctoy,1<=池<=3;lincon amounta+amountb=池tox+池玩具,pooltox+ctox=总量x,pooltoy+ctoy=数量,ctox+ctoy=金额c;nlincon nlc1-nlc2>=0。,nlc3=0。;最大f;costa=6;成本b=16;成本c=10;成本x=9;成本=15;f=成本x*金额x+成本*金额-costa*amounta-costb*amountb-costc*amountc;nlc1=2.5*数量x-池*池tox-2。*ctox;nlc2=1.5*数量-泳池*泳池玩具-2.*ctoy;nlc3=3*amounta+amountb-pools*(amounta+amountb);跑步;过程操作模型;var amountx init 1>=0<=100,数量初始化1>=0<=200;var amounta init 1>=0,amountb init 1>=0,amountc init 1>=0;var pooltox初始化1>=0,pooltoy初始化1>=0;var ctox初始化1>=0,ctoy初始值1>=0;var池初始化1>=1<=3;con-amounta+amountb=pooltox+pooltoy,pooltox+ctox=总量x,pooltoy+ctoy=数量,ctox+ctoy=金额c;数字costa,costb,costc,costx,costy;costa=6;成本b=16;成本c=10;成本x=9;成本=15;最大f=成本*金额x+成本*金额-costa*amounta-costb*amountb-costc*amountc;connlc1:2.5*amountx-pools*pooltox-2.*ctox>=0,nlc2:1.5*数量-泳池*泳池玩具-2.*ctoy>=0,nlc3:3*amounta+amountb-池*(amounta+amountb)= 0;解决;打印数量x数量数量数量b数量cpooltox pooltoy ctox ctoy泳池;/*PROC NLP示例8*/proc-nlp-tech=tr-pall;数组c[10]-6.089-17.164-34.054-5.914-24.721-14.986 -24.100 -10.708 -26.662 -22.179;阵列x[10]x1-x10;最小y;参数x1-x10=.1;边界1.e-6<=x1-x10;林肯2.=x1+2.*x2+2.*x3+x6+x10,1.=x4+2.*x5+x6+x7,1.=x3+x7+x8+2.*x9+x10;s=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10;y=0。;do j=1到10;y=y+x[j]*(c[j]+log(x[j]/s));结束;跑步;过程操作模型;设置CMP=1..10;数字c{CMP}=[-6.089-17.164-34.054-5.914-24.721-14.986 -24.100 -10.708 -26.662 -22.179];var x{CMP}初始值0.1>=1.e-6;条件2.=x[1]+2.*x[2]+2.*x[3]+x[6]+x[10],1.=x[4]+2.*x[5]+x[6]+x[7],1.=x[3]+x[7]+x[8]+2.*x[9]+x[10];/*替换NLP模型中的变量*/impvar s=CMP}x[i]中的总和{i;最小y=CMP中的和{j}x[j]*(c[j]+log(x[j]/s));解决;打印x y;/*广义读取*/数据补偿;输入ca1a2a3;数据线;-6.089   1 0 0-17.164  2 0 0-34.054  2 0 1-5.914   0 1 0-24.721  0 2 0-14.986  1 1 0-24.100  0 1 1-10.708  0 0 1-26.662  0 0 2-22.179  1 0 1;数据原子;输入b@@;数据线;2. 1. 1;过程操作模型;设置CMP;设置ELT;数字c{CMP};编号a{ELT,CMP};数字b{ELT};将数据原子读入ELT=[_n_]b;将数据comp读入CMP=[n_]英语教学中的c{i}<a[i,_n_]=col(“a_”||i)>;var x{CMP}初始值0.1>=1.e-6;ELT}中的conbal{i:b[i]=CMP}a[i,j]*x[j]中的sum{j;impvar s=CMP}x[i]中的总和{i;最小y=CMP中的和{j}x[j]*(c[j]+log(x[j]/s));打印b;解决;打印x;退出;数据补偿;输入名称$c a h a n a o;数据线;小时-6.089 1 0H2-17.164 2 0 0水-34.054 2 0 1编号-5.914 0 10氮气-24.721 0 2 0NH-14.986 1 10号编号-24.100 0 1 1O-10.708 0 1号氧气-26.662 0 2俄亥俄州-22.179 1 0 1;数据原子;输入名称$b;数据线;H 2。编号1。O 1。;过程操作模型;设置<string>CMP;设置ELT;数字c{CMP};编号a{ELT,CMP};数字b{ELT};将数据原子读入ELT=[name]b;将数据comp读入CMP=[name]英语教学中的c{i}<a[i,name]=col(“a_”||i)>;var x{CMP}初始值0.1>=1.e-6;ELT}中的conbal{i:b[i]=CMP}a[i,j]*x[j]中的sum{j;impvar s=CMP}x[i]中的总和{i;最小y=CMP中的和{j}x[j]*(c[j]+log(x[j]/s));解决;打印x;退出;