资源

循环赛日程安排(clp8)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:clp8*//*标题:循环赛日程安排(clp8)*//*产品:或*//*系统:所有*//*关键字:或*//*程序:CLP、GANTT、SQL*//*数据:*//*                                                             *//*支持:更新:*//*参考:*//*MISC:CLP程序章节中的示例8*//*约束编程书*//*                                                             *//***************************************************************/%宏循环(nteams);%设nrounds=%eval(%sysfunc(ceil((&nteams*(&nteams-1)/2)/4));数据行为数据;i=1到&nteams-1;做j=i+1到&nteams;_activity_=compress('ACT_'||put(i,best.)||'_'|| put(j,best.]);_持续时间=1;产出;结束;结束;运行;proc-clp-actdata=actdata-schedule=schedule;schedule finish=&nrounds actselect=minls;资源(团队1团队与团队);资源(ROOM1-ROOM4);要求%i=1%到&nteams-1;%做j=&i+1%到&nteams;ACT_&i._&j=(团队&i)ACT_&i._&j=(团队&j)ACT_&i._&j=(房间1、房间2、房间3、房间4)%结束;%结束;;运行;proc-sort data=计划;开始-结束;运行;%修复圆轨道;%圆轨道(14);/*将输出计划数据集从过程CLP转换为PM格式*/%宏调度;数据和dsn_温度1;设置和dsn。(下降=资源数量);如果OBSTYPE='TIME';运行;proc-sort-data=&dsn_temp1(drop=OBSTYPE);按活动分类;运行;数据和dsn_温度2;设置和dsn。(下降=持续时间开始完成);如果OBSTYPE='RESOURCE';运行;proc-sort-data=&dsn_温度2;按活动;运行;proc转置数据=&dsn_temp2输出=&dsn_temp21(drop=_NAME_);按活动分类;变量数量;id资源;运行;数据&dsn。;合并&dsn_温度1和dsn_温度21;按活动分类;运行;数据表(drop=i);制定时间表;数组testmiss(*)_numeric;do i=1至dim(测试失误);如果testmiss(i)=。则testmiss(i)=0;结束;运行;%修补计划;%计划(schedule);/******************************************************************//*设置图案和图例注释*//******************************************************************//*指定模式语句*/%宏setPattern(计数、颜色);模式和计数。v=s color=&color repeat=1;%修补setPattern;/*将颜色映射到图案*/%宏setPatterns(数据=pattern_color_map);数据_全部_;集合&data;保留计数1;dummy=解析(“%setPattern('||put(count,best.)||','||color||')”);调用执行(虚拟);计数=计数+1;运行;%修补setPatterns;/*将颜色映射到图案*/数据模式颜色映射;格式颜色$8。;输入_图案颜色$8。;数据线;1个红色2个蓝色3黄色4个橙色;%宏addLegend(title=,colsperrow=5,data=machine_color_map,activity=机器,fontfactor=0.85,out=anno,footnotes=4,x位移=35,y位移=5,中心=100,y开始=0,barHeight=1.75,barWidth=4.0,barTextFactor=3.0,yTitleStart=7);%annomac;/*为注释图例创建空间*/%i=1%到&footnotes-1;脚注&i.“;%结束;脚注和脚注。c=ltgray h=1.5 j=c;%让xStart=%sysevalf(&center-(&xDisplacement*&colsperrow/2.0));数据输出;%dclanno;%系统(3,3,4);格式savcol$8。;下降计数savcol tempx tempy;集合&data;tempy=int(计数/&colsperrow);tempx=计数-&colsperrow*tempy;保留计数0;保留y&yStart;保留x&xStart;savcol=颜色;如果计数等于0,则执行;%标签(%sysevalf(居中-(%length(&title)*&fontfactor)),%sysevalf(&yStart+&yTitleStart),&title,0,0,%sysevalf(&barHeight.*1.2),C);结束;颜色=savcol;x=&xStart+tempx*&xDisplacement;y=&yStart-临时*&yDisplacement;%bar(x,y,x+&barWidth,y+&barHeight,*,0,solid);x=x+&barWidth/&barTextFactor;y=y-&barHeight;%标签(x,y,输入(&activity,best.),0,0,%sysevalf(&barHeight),C);计数=计数+1;运行;%setPatterns;%修补addLegend;%宏显示;proc-sql;将表temp创建为选择trim(translate(substr(activity,5,2),'','_'))作为p1str“团队1”,条带(translate(substr(activity,7),“”,“_”)作为p2str“团队2”,1+log2(房间1*1+房间2*2+房间3*4+房间4*8)作为房间,工期、开始时间、完成时间;将表schedsort创建为从temp中选择p1str、p2str、持续时间、开始、结束、房间联合对应选择p1str作为p2str,选择p2str作为p1str,持续时间,开始,结束,房间温度;退出;/*显示团队时间表*/proc-sort数据=schedsort;通过p1str启动;运行;数据调度;set schedsort;保持持续时间p1 segmt_no _pattern start finish p2str room;保留segmt_no;格式_模式p13。;标签p1=“团队”;p1=输入(p1str,最佳);_模式=房间;如果p1str-ne-lag1(p1str),则执行;segmt_no=1;结束;否则会这样做;segmt_no=segmt_no+1;结束;光洁度=光洁度-0.1;运行;进程排序数据=schedseg;通过p1 segmt_no;运行;数据标签a;_y=-1;_lvar=“p2str”;_xvar=“开始”;_hlabel=0.8;_yoffset=-.2;_xoffset=0.35;运行;%addLegend(title='Rooms',data=pattern_color_map,activity=_pattern,colsperrow=2,xDisplacement=7,yDisplacement=3,yStart=10,center=53,barHeight=1,barWidth=2.5,fontFactor=0.5,barTextFactor=-3.0,yTitleStart=3);标题“PROC CLP:每个团队的时间表”;title2“段上方的数字表示对手”;goptions htext=1.0;title1 h=5pct c=ltgray“循环赛团队时间表”;title2 h=1.25“条形图上方的数字表示对手”;proc-gantt data=schedseg-anno=anno-labdata=labelsa;id p1/*开始完成*/;图表/动作=p1持续时间=持续时间ss=开始/*开始时间*/sf=完成/*完成时间*/pcompress/*将图表压缩到一页上*/诺霍布努姆诺列根;运行;/*显示房间明细表*/进程排序数据=临时;从房间开始;运行;数据室划分;设定温度;保持持续时间团队segmt_no开始完成房间装修1;保留segmt_no;label room=“房间”;团队=trim(p1str)||'/'|trim(p2str);finish1=饰面-.1;如果房间ne lag1(房间)那么做;segmt_no=1;结束;否则会这样做;segmt_no=segmt_no+1;结束;运行;数据标签b;_y=-1;_lvar=“团队”;_xvar=“开始”;_hlabel=.7_jlabel=‘r’;_yoffset=-.2;_xoffset=0.8;运行;goptions reset=pattern htext=.75 hsize=8in vsize=5in vpos=25;图案1 c=ltgray r=10;title1 h=5pct c=ltgray“Round Robin Room Schedule”;title2 h=.75“条形图中的数字表示配对”;proc-gantt data=roomsched labdata=labelsb;id房间/*开始完成*/;图表/act=房间持续时间=持续时间skip=2 barht=2 labsplit='/'ss=开始/*开始时间*/sf=完成1/*完成时间*/pcompress/*将图表压缩到一页上*/诺霍布努姆诺列根;运行;%修复显示器;%显示器;标题;