资源

具有非标准时间约束的资源调度(clp9)

/***************************************************************************//*                                                                         *//*S A S S A M P L E L I B R A R Y*//*                                                                         *//*名称:clp9*//*标题:具有非标准时间约束的资源调度(clp9)*//*产品:或*//*系统:所有*//*关键字:或*//*程序:CLP、GANTT、NETDRAW、SQL*//*数据:*//*                                                                         *//*支持:更新:*//*参考:*//*MISC:示例9来自*//*约束编程书*//*                                                                         *//***************************************************************************/%宏绘图打桩(中心=49,运算符=-,偏移=4);%设barWidth=0.8;%设yStart=31;%bar(%sysevalf(&center&operator&offset),&yStart,%sysevalf(&center&operator&offset&operator&barWidth),%sysevalf(&yStart-&barHeight),黑色,0,纯色);%修补拉拔桩;%宏观绘图桩(操作符=-);%设barHeight=10;%draw-Piling(操作员=&操作员);%drawPilling(operator=&operator,offset=9.2);%设barHeight=12;%drawPilling(operator=&operator,offset=5.5);%drawPilling(operator=&operator,offset=7.7);%设x=43.4;%设y=17;%标签(&x,&y,'p1',黑色,0,0,2.5,4);%设x=57.1;%标签(&x,&y,‘p2’,黑色,0,0,2.5,4);%修补;%宏观绘图粘土(中心=49,运算符=-);%设颜色=CXFFD090;%设顶部=76;%poly(%sysevalf(&center&operator&center&operator-1),&顶部,&color,MSOLID,1);%polycont(%sysevalf(&center&operator&center&operator-1),5,&color);%polycont(&center,5,&color);%polycont(&center,%sysevalf(&top/2.0+2),&color);%polycont(%sysevalf(&center&operator(&center/2.0)&operator2),%sysevalf(&top/2.0+2),&color);%polycont(%sysevalf(&center&operator(&center/2.0)&operator3),%sysevalf(&top/2.0+12),&color);%polycont(%sysevalf(&center&operator(&center/2.0)&operator10),%sysevalf(&top/2.0+12),&color);%修补;%宏drawBar(type=,drawBorder=1,drawFill=1,color=);%条(%sysevalf(&x+&xStart),&y,%sysevalf(&x+&barWidth+&xStart),%sysevalf(&y+&barHeight),&颜色、0和类型);%修理牵引杆;%宏拉杆(color=,drawBorder=1,drawFill=1,pattern=MEMPTY,hashColor=黑色);%如果&drawFill%,则%do;%牵引杆(type=SOLID,drawFill=1,color=&color);%结束;%如果&drawBorder%,则%do;%drawQuad公司(%sysevalf(&x+&xStart),&y,%sysevalf(&x+&barWidth+&xStart),&y,%sysevalf(&x+&barWidth+&xStart)、%sysevalf(&y+&barHeight)、,%sysevalf(&x+&xStart),%syseval(&y+&barHeight),color=&color,pattern=&pattern,hashColor=&hashColor);%结束;%修理牵引杆;%宏drawLabel(char=,num=0);%标签(%sysevalf((&x+&barWidth)/2.0*&xLabelFactor+&xLabelOffset+和xStart),%sysevalf((&y+&barHeight)/2.0*&yLabelFactor),“&char.&num”,黑色,0,0,2.5,4);%修补drawLabel;%宏drawBoxes(char=,count=,color=,drawBorder=1,drawFill=1,pattern=MEMPTY,hashColor=black);%i=1%到&count;%设x=&i*(&barWidth+&barSeparation);%让y=&yStart;%drawBars(color=&color,drawBorder=&drawBord,drawFill=&drowFill,pattern=&pattern,hashColor=&hashColor);%如果&char ne%,则%do;%drawLabel(char=&char,num=%eval(&i.+5-&count));%结束;%结束;%修补;%宏绘图Tri(x1,y1,x2,y2,x3,y3,color=);%聚乙烯(&x1,&y1,&color,MSOLID,1);%polycont(&x2,&y2,&color);%polycont(&x3,&y3,&color);%聚乙烯(&x1,&y1,黑色,M5X45,1);%polycont(&x2,&y2,黑色);%polycont(&x3,&y3,黑色);%修补;%宏drawQuad(x1,y1,x2,y2,x3,y3,x4,y4,color=,pattern=MEMPTY,hashColor=黑色);%聚乙烯(&x1,&y1,&color,MSOLID,1);%polycont(&x2,&y2,&color);%polycont(&x3,&y3,&color);%polycont(&x4,&y4,&color);%poly(&x1,&y1,&hashColor,&pattern,1);%polycont(&x2,&y2,黑色);%polycont(&x3,&y3,黑色);%polycont(&x4,&y4,黑色);%修补;%宏drawQuads(计数=,颜色=,图案=);%设y=40;%do i=按-1计数%到1%;%设x=%eval(&i*14);%drawQuad(%sysevalf(&x+8.5),&y,%sysevalf(&x+19.5),&y,%sysevalf(&x+18.5),%syseval(&y-9),%sysevalf(&x+9.5),%syseval(&y-9),color=&color,pattern=&pattern);%结束;%修补;%宏drawSide(中心=49,文本中心=42.3,运算符=-,num1=1,num2=1);/*绘制V1*/%设y=75.9;%drawTri(%sysevalf(&center&operator 30),&y,%sysevalf(&center&operator 48),&y,%sysevalf(&center&operator 38),%syseval(&y-25.9),颜色=沙子(&S));%设y=%sysevalf(&y-17.9);%让x=%sysevalf(&textCenter&operator 45);%drawLabel(char=v,num=&num1);/*绘制B1*/%设y=58;%drawQuad(%sysevalf(&center&operator 29),&y,%sysevalf(&center&operator 38),&y,%sysevalf(&center&operator 38),%syseval(&y-8),%sysevalf(&center&operator 29),%syseval(&y-8),颜色=CXA0A0A0);%设x=%sysevalf(&textCenter&operator 33.5);%设y=%sysevalf(&y-6);%drawLabel(char=b,num=&num2);%设y=%sysevalf(&y-3);%drawLabel(char=s,num=&num2);/*绘制M1*/%设y=70;%drawQuad(%sysevalf(&center&operator 30),&y,%sysevalf(&center&operator 35),&y,%sysevalf(&center&operator 37),%syseval(&y-12),%sysevalf(&center&operator 30),%syseval(&y-12),color=ltgray,pattern=M1L0,hashColor=CXD0D0D0);%让x=%sysevalf(&textCenter&operator 33);%设y=%sysevalf(&y-10);%drawLabel(char=m,num=&num2);/*标签A1-A6*/%设x=%sysevalf(&textCenter&operator 33.5);%设y=%sysevalf(&y-15.7);%drawLabel(char=a,num=&num2);%让x=%sysevalf(&textCenter&operator 21.0);%设y=%sysevalf(&y-19.5);%drawLabel(char=a,num=%eval(&num2&运算符-1));%让x=%sysevalf(&textCenter&operator 13.0);%drawLabel(char=a,num=%eval(&num2&operator-2));%修补drawSide;%宏drawSky;%bar(1,10,97,100,白色,0,固体);%bar(0.85,4.7,97.15,100,黑色,0,空);%修补drawSky;%宏drawBridge;%annomac;数据anno_bridge;%dclanno;%系统(3,3,3);%drawSky;%牵引粘土;%drawClay(操作符=+);%拉拔桩;%拉拔桩(操作员=+);%设barWidth=14;%设barHeight=6;%设yLabelFactor=1.93;%设xLabelFactor=2.0;%设xLabelOffset=-6;%设yStart=70;%设xStart=0;%设barSeparation=0;%让砂=CXF8EABF;%drawSide;%drawSide(运算符=+,num1=2,num2=6);/*拉砂桶*/%drawQuads(颜色=沙,计数=4,图案=M5X45);/*绘制T1-T5*/%抽屉(char=t,count=5,color=CX80A0DF);%设钢筋宽度=4;%设barHeight=30;%设yLabelFactor=1.6;%设xLabelFactor=2.0;%设xLabelOffset=-0.6;%设yStart=40;%设barSeparation=10;%设xStart=12;/*绘制M2-M5*/%抽屉盒(char=m,count=4,color=ltgray,pattern=M1L0,hashColor=CXD0D0D0);%设barWidth=6;%设yLabelFactor=1.8;%设xLabelFactor=2.0;%设xLabelOffset=-1.8;%设yStart=31;%设barSeparation=8;%设xStart=11;%设barHeight=7.5;/*绘制B2-B5*/%drawBoxes(char=s,count=4,color=CXA0A0A0,drawBorder=0);%设barHeight=11;%drawBoxes(char=b,count=4,color=CX000000,drawBorder=0,drafFill=0);%设barHeight=9;%drawBox(字符=,计数=4,颜色=CXA0A0A0);运行;proc-ganno annotate=anno_bridge;运行;退出;%修补吊桥;选项nodate非成员;%吊桥;数据桥;格式_ACTIVITY_$3_DESC_34美元_资源_ 14美元。_成功_$3_LAG_3美元;输入ACTIVITY_&_DESC_&_DURATION__RESOURCE_&_成功者_&_LAG_&_LADDUR_;_数量_=1;数据线;a1开挖(1号桥台)4台挖掘机s1。挖掘(支柱1)2台挖掘机。a3挖方(立柱2)2挖掘机p1。a4开挖(第3支柱)2台挖掘机p2。a5开挖(第4支柱)2台挖掘机。a6开挖(桥台2)5台挖掘机。ab1混凝土凝结时间(桥台1)1。m1中。ab2混凝土凝固时间(支柱1)1。平方米。ab3混凝土凝结时间(第2支柱)1。立方米。ab4混凝土凝结时间(支柱3)1。m4。ab5混凝土凝结时间(4号柱)1。m5。ab6混凝土凝结时间(桥台2)1。m6。b1混凝土基础(桥台1)1台混凝土搅拌机ab1。b1混凝土基础(桥台1)1台混凝土搅拌机s1 ff-4b2混凝土基础(支柱1)1台混凝土搅拌机ab2。b2混凝土基础(支柱1)1台混凝土搅拌机s2 ff-4b3混凝土基础(柱2)1台混凝土搅拌机ab3。b3混凝土基础(支柱2)1台混凝土搅拌机s3 ff-4b4混凝土基础(支柱3)1台混凝土搅拌机ab4。b4混凝土基础(支柱3)1台混凝土搅拌机s4 ff-4b5混凝土基础(支柱4)1台混凝土搅拌机ab5。b5混凝土基础(支柱4)1台混凝土搅拌机s5 ff-4b6混凝土基础(桥台2)1台混凝土搅拌机ab6。b6混凝土基础(桥台2)1台混凝土搅拌机s6 ff-4l交付预制支座2台起重机t1。l交付预制支撑架2台起重机t2。l交付预制支座2台起重机t3。l交付预制支座2台起重机t4。l交付预制支撑架2台起重机t5。m1砌体工程(桥台1)16砌砖t1。m1砌体工程(桥台1)16砌砖ua fs-2m2砌体工程(支柱1)8砌砖t1。m2砌体工程(支柱1)8砌砖t2。m2砌体工程(支柱1)8砌砖ua fs-2m3砌体工程(第2支柱)8砌砖t2。m3砌体工程(第2支柱)8砌砖t3。m3砌体工程(第2支柱)8砌砖ua fs-2m4砌体工程(支柱3)8砌砖t3。m4砌体工程(支柱3)8砌砖t4。m4砌体工程(支柱3)8砌砖ua fs-2m5砌体工程(支柱4)8砌砖t4。m5砌体工程(4号柱)8砌砖。m5砌体工程(4号柱)8砌砖ua fs-2m6砌体工程(桥台2)20砌砖t5。m6砌体工程(桥台2)20砌砖ua fs-2p1基桩2 20打桩机3。p2基桩3 13打桩机4。pa项目0的开始。a1。pa项目0的开始。a2。pa项目0的开始。a3。pa项目0的开始。a4。pa项目0的开始。a5。pa项目0的开始。a6。pa项目0的开始。l财务报表30pa项目0的开始。例如。项目0结束。s1模板(桥台1)8木工b1。s1模板(桥台1)8木工a1 sf-3s2模板(支柱1)4木工b2。s2模板(支柱1)4木工a2 sf-3s3模板(支柱2)4木工。s3模板(立柱2)4木工p1 sf-34模板(支柱3)4木工b4。s4模板(支柱3)4木工p2 sf-3s5模板(支柱4)4木工b5。s5模板(支柱4)4木工a5 sf-3s6模板(桥台2)10木工b6。s6模板(桥台2)10木工a6 sf-3t1定位(预成型支座1)12起重机v1。t2定位(预制支架2)12起重机类型。t3定位(预成型支座3)12起重机。t4定位(预成型支座4)12起重机。t5定位(预成型支座5)12起重机v2。ua拆除临时住房10。体育。e安装临时住房10。ue安装临时住房10。第1节第6节ue安装临时住房10。s2第6节ue安装临时住房10。第3节第6节ue安装临时住房10。第4节第6节ue安装临时住房10。第5节第6节ue安装临时住房10。s6第6节v1填充1 15个履带。v2填充2 10履带式输送机。;/*调用PROC CLP*/proc-clp-actdata=网桥调度时间=调度时间桥;计划完工=104;运行;/*创建合并计划*/proc-sql;将表bridgeinfo创建为选择distinct _ACTIVITY_作为ACTIVITY格式$3。长度3,_DESC_作为DESCRIPTION,_RESOURCE_作为桥接器的资源;进程排序数据=schedtime_bridge;按活动分类;运行;数据调度时间桥;合并bridge_info计划时间桥;按活动分类;运行;进程排序数据=schedtime_bridge;通过开始完成;运行;proc打印数据=schedtime_bridge noobs width=min;;标题“桥梁施工进度计划”;运行;/*开始为PROC GANTT准备时间表*//*提取只有优先约束的项目数据集*/数据桥c;删除标签;设置桥接器(其中=(_lag_=''));运行;/***************************************************************//*为图形输出定义实用程序宏*//***************************************************************//*%colorIdex创建资源-图案-颜色映射*//*%fnLegend使用脚注根据映射添加图例*//*%setPatterns根据映射执行模式语句*/%宏colorIdex(res_var=,proj=,palette=,out=);proc-sql;创建表格输出为(&O)从&proj;中选择distinct(&resvar);退出;数据输出;出发;删除名称tr颜色ct;格式颜色$10。;保留模式1;保留color_ct 1;名称tr=小写(strip(&res_var));如果name_tr eq'n/a'或name_tr eq'',则color='red';否则;color=扫描(&palette,color_ct);color_ct=color_ct+1;结束;产出;_模式=模式+1;运行;%修补colorIdex;/*宏%fnLegend使用脚注添加图例*//*标题*//*                                                                       *//*颜色条11文本。。。颜色条1n文本*//*颜色条m1文本。。。颜色条mn文本*/%宏fnLegend(tfact=1.75,h=10,xStart=5,rhs=100,nCol=,nRow=,title=“使用的资源”,map=,font=“Albany AMT”,var=_Resource_);%设rH=%sysevalf(/h/([nRow+2));/*行高*/%让cW=%sysevalf((&rhs-2*&xStart)/&nCol);/*列宽*/%let rowsH=%sysevalf(&rH*&nRow);/*所有图例行的高度*/%设barH=%sysevalf(&rH*0.35);/*图例高度(彩条)*/%让rTextH=%sysevalf(&barH*&tfact);/*图例行中的文字高度*/%让tiTextH=%sysevalf(&rTextH*1.2);/*标题行中文本的高度*/脚注;数据_全部_;调用执行('footnote1 f='||“&font”||'j=c h='||put(&tiTextH.,best)||'pct'||'“'||&title||'”;');调用执行('footnote2 f='||“&font”||'h='||put(&rH.,best.)||'pt“”;');运行;数据_全部_;设置&map end=完成;保留计数0;idxRow=int(计数/&nCol);idxCol=计数-idxRow*&nCol;x=&xStart+idxCol*&cW;y=&rowsH-idxRow*&rH;_fnlStr_=条带(&var);如果_fnlStr_eq“”,则_fnl Str_='N/A';如果计数等于0,则调用执行('footnote3 h='||put(&rowsH.,best.)||'pct“”');如果小写(条带(颜色))等于“红色”,则调用execute(catx('','f=',“&font”,'h=',&barH,'ct','m=(',x,',',y,')pct','c=',颜色,'方框=1 bs=0 pct“”');其他的调用执行(catx('','f=',“&font”,'h=',&barH,'ct','m=(',x,',',y,')pct','c=',color,'bc=',颜色,'方框=1 bs=0 pct“”');调用执行(catx('','f=',“&font”,'h=',&rTextH,'ct','m=(+0.5,',y,')pct','c=黑色')||'“'||_fnlStr_||'”');计数=计数+1;如果完成,则调用execute(';');运行;%修正fnLegend;%宏集合模式(map);数据_全部_;集合↦cstr=小写(条带(颜色));如果cstr eq为“红色”,则调用execute('pattern'|strip(put(_pattern,best.))||'v=e color='||cstr||'重复=1;');其他的调用execute('pattern'|strip(put(_pattern,best.))||'v=s color='||cstr||'重复=1;');运行;%修补setPatterns;/***************************************************************//*结束宏定义*//***************************************************************//*恢复优先级信息,添加模式*/%let _palette='蓝-黄-橙-青-棕-黑-灰-绿';%colorIdex(res_var=_RESOURCE_,proj=bridge,palette=&_palette,输出=res_col_patn);proc-sql;将表schedgantt_ex1创建为选择a._SUCCESSOR_作为SUCCESSOR,b.*,c._pattern来自bridge ca、schedtime bridge b、res col patn c其中a._ACTIVITY_=b.ACTIVITY和a._RESOURCE_=c._RESOURGE_;退出;/*绘制甘特图*/%setPatterns(res_col_patn);title1 j=c h=3pct“PROC CLP-桥梁问题的解决方案:104天(最佳)”;%fnLegend(xStart=10,h=12,map=res_col_patn,nCol=4,nRow=2,rhs=110);过程甘特数据=sched_ganttexe1;id活动开始完成;label activity='Act';label start=“开始”;label finish=“完成”;图表/参考=0到110 x 10,100到105 x 1dur=持续时间cprec=灰色es=开始/*开始时间*/ef=完成/*完成时间*/心智=0最大日期=105增量=5比例=2.8高度=2.7介于=1之间跳过=2compress/*将图表压缩到单个页面上*/诺霍布努姆诺列根font='阿尔巴尼亚AMT'act=活动suc=继任者;运行;/*开始为桥梁项目输出网络图*/proc netdraw data=bridge_c out=bridge1节点显示;actnet/act=_activity_suck=_successor_;运行;proc-sql;将表act2zone创建为选择distinct _activity_,max(2,min(9,_y_))作为_zone_来自桥接1其中_pattern=1;将表bridge_zones创建为选择a.zone,b*来自act2zone a,bridgec b其中a._activity_=b.activity;退出;pattern1 v=e c=绿色;title1 j=c h=3.7%“桥梁建设项目”;脚注;proc netdraw data=bridge_zones out=bridge2;行动网/act=活动_succ=成功者_压缩id=(活动_源_)诺拉贝尔节点默认值箱宽=8x之间=12ybetween=1中心线htext=1.2箭头=2分离性的区域=区域_诺泽拉贝尔;运行;