ÐÏࡱá>þÿ þÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ*0_šîÏ»òÀð^€ 3F )ÆþÿÿÿContentsÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !"#þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ*0_šîÏ»òÀð^ ûÇö(ÆþÿÿÿContentsÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‹{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fmodern\fprq2 Courier New;}{\f3\fmodern Courier New;}{\f4\fswiss\fprq2 System;}{\f5\fmodern Courier New;}} {\colortbl\red0\green0\blue0;\red0\green0\blue255;\red0\green175\blue0;} \deflang1033\pard\plain\f2\fs20\cf1 MODEL\plain\f2\fs20\cf0 : \par \plain\f2\fs20\cf2 ! Uses Lingo's programming capability to do \par on-the-fly column generation for a \par cutting-stock problem;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 SETS\plain\f2\fs20\cf0 : \par PATTERN: COST, X; \par FG: WIDTH, DEM, PRICE, Y, YIELD; \par FXP( FG, PATTERN): NBR; \par \plain\f2\fs20\cf1 ENDSETS\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 DATA\plain\f2\fs20\cf0 : \par PATTERN = 1..20; \plain\f2\fs20\cf2 ! Allow up to 20 patterns;\plain\f2\fs20\cf0 \par RMWIDTH = 45; \plain\f2\fs20\cf2 ! Raw material width;\plain\f2\fs20\cf0 \par FG = F34 F24 F15 F10 F18;\plain\f2\fs20\cf2 !Finished goods...;\plain\f2\fs20\cf0 \par WIDTH= 34 24 15 10 18;\plain\f2\fs20\cf2 !their widths...;\plain\f2\fs20\cf0 \par DEM = 350 100 800 1001 377;\plain\f2\fs20\cf2 !and demands;\plain\f2\fs20\cf0 \par BIGM = 999; \par \plain\f2\fs20\cf1 ENDDATA\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 SUBMODEL\plain\f2\fs20\cf0 MASTER_PROB: \par [MSTROBJ] \plain\f2\fs20\cf1 MIN\plain\f2\fs20\cf0 = \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par COST( J)*X( J)); \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( I): \par [R_DEM] \par \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par NBR( I, J) * X( J)) >= DEM( I); \par ); \par \plain\f2\fs20\cf1 ENDSUBMODEL\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 SUBMODEL\plain\f2\fs20\cf0 INTEGER_REQ: \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( PATTERN: \plain\f2\fs20\cf1 @GIN\plain\f2\fs20\cf0 ( X)); \par \plain\f2\fs20\cf1 ENDSUBMODEL\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 SUBMODEL\plain\f2\fs20\cf0 PATTERN_GEN: \par [SUBOBJ] \plain\f2\fs20\cf1 MAX\plain\f2\fs20\cf0 = \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( FG( I): PRICE( I)* Y( I)); \par \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( FG( I): WIDTH( I)*Y( I)) <= RMWIDTH; \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( I): \plain\f2\fs20\cf1 @GIN\plain\f2\fs20\cf0 (Y( I))); \par \plain\f2\fs20\cf1 ENDSUBMODEL\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 CALC\plain\f2\fs20\cf0 : \par \par \plain\f2\fs20\cf2 ! Set parameters;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @SET\plain\f2\fs20\cf0 ( 'DEFAULT'); \par \plain\f2\fs20\cf1 @SET\plain\f2\fs20\cf0 ( 'TERSEO', 2); \par \par \plain\f2\fs20\cf2 ! Max number of patterns we'll allow;\plain\f2\fs20\cf0 \par MXPATS = \plain\f2\fs20\cf1 @SIZE\plain\f2\fs20\cf0 ( PATTERN); \par \plain\f2\fs20\cf2 ! Make first pattern an expensive super pattern;\plain\f2\fs20\cf0 \par COST( 1) = BIGM; \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( I): NBR( I, 1) = 1); \par \par \plain\f2\fs20\cf2 ! Loop as long as the reduced cost is \par attractive and there is space;\plain\f2\fs20\cf0 \par NPATS = 1; \par RC = -1; \plain\f2\fs20\cf2 ! Clearly attractive initially;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @WHILE\plain\f2\fs20\cf0 ( RC #LT# 0 #AND# NPATS #LT# MXPATS: \par \plain\f2\fs20\cf2 ! Solve for current best pattern runs;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @SOLVE\plain\f2\fs20\cf0 ( MASTER_PROB); \par \plain\f2\fs20\cf2 ! Copy dual prices to PATTERN_GEN submodel;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( I): PRICE( I) = -\plain\f2\fs20\cf1 @DUAL\plain\f2\fs20\cf0 ( R_DEM( I))); \par \plain\f2\fs20\cf2 ! Generate the current most attractive pattern;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @SOLVE\plain\f2\fs20\cf0 ( PATTERN_GEN); \par \plain\f2\fs20\cf2 ! Marginal value of current best pattern;\plain\f2\fs20\cf0 \par RC = 1 - SUBOBJ; \par \plain\f2\fs20\cf2 ! Add the pattern to the Master;\plain\f2\fs20\cf0 \par NPATS = NPATS + 1; \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( I): NBR( I, NPATS) = Y( I)); \par COST( NPATS) = 1; \par ); \par \par \plain\f2\fs20\cf2 ! Finally solve Master as an IP;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @SOLVE\plain\f2\fs20\cf0 ( MASTER_PROB, INTEGER_REQ); \par \par \plain\f2\fs20\cf1 ENDCALC\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf2 ! This following calc section displays the \par solution in a tabular format;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 CALC\plain\f2\fs20\cf0 : \par \plain\f2\fs20\cf2 ! Compute yield of each FG;\plain\f2\fs20\cf0 \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( F): YIELD( F) = \par \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par NBR( F, J) * X(J)) \par ); \par \plain\f2\fs20\cf2 ! Compute some stats;\plain\f2\fs20\cf0 \par TOTAL_FT_USED = \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( PATTERN: X) * RMWIDTH; \par TOTAL_FT_YIELD = \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 ( FG: YIELD * WIDTH); \par PERC_WASTE = 100 * ( 1 - ( TOTAL_FT_YIELD / TOTAL_FT_USED)) ; \par \plain\f2\fs20\cf2 ! Display the table of patterns and their usage;\plain\f2\fs20\cf0 \par FW = 6; \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( ' Total raws used: ì‹{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fmodern Courier New;}{\f3\fswiss\fprq2 System;}{\f4\fmodern Courier New;}{\f5\fmodern\fprq2 Courier New;}} {\colortbl\red0\green0\blue0;\red0\green0\blue255;\red0\green175\blue0;} \deflang1033\pard\plain\f5\fs20\cf1 MODEL\plain\f5\fs20\cf0 : \par \plain\f5\fs20\cf2 ! Uses Lingo's programming capability to do \par on-the-fly column generation for a \par cutting-stock problem;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 SETS\plain\f5\fs20\cf0 : \par PATTERN: COST, X; \par FG: WIDTH, DEM, PRICE, Y, YIELD; \par FXP( FG, PATTERN): NBR; \par \plain\f5\fs20\cf1 ENDSETS\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 DATA\plain\f5\fs20\cf0 : \par PATTERN = 1..20; \plain\f5\fs20\cf2 ! Allow up to 20 patterns;\plain\f5\fs20\cf0 \par RMWIDTH = 45; \plain\f5\fs20\cf2 ! Raw material width;\plain\f5\fs20\cf0 \par FG = F34 F24 F15 F10 F18;\plain\f5\fs20\cf2 !Finished goods...;\plain\f5\fs20\cf0 \par WIDTH= 34 24 15 10 18;\plain\f5\fs20\cf2 !their widths...;\plain\f5\fs20\cf0 \par DEM = 350 100 800 1001 377;\plain\f5\fs20\cf2 !and demands;\plain\f5\fs20\cf0 \par BIGM = 999; \par \plain\f5\fs20\cf1 ENDDATA\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 SUBMODEL\plain\f5\fs20\cf0 MASTER_PROB: \par [MSTROBJ] \plain\f5\fs20\cf1 MIN\plain\f5\fs20\cf0 = \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par COST( J)*X( J)); \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( I): \par [R_DEM] \par \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par NBR( I, J) * X( J)) >= DEM( I); \par ); \par \plain\f5\fs20\cf1 ENDSUBMODEL\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 SUBMODEL\plain\f5\fs20\cf0 INTEGER_REQ: \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( PATTERN: \plain\f5\fs20\cf1 @GIN\plain\f5\fs20\cf0 ( X)); \par \plain\f5\fs20\cf1 ENDSUBMODEL\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 SUBMODEL\plain\f5\fs20\cf0 PATTERN_GEN: \par [SUBOBJ] \plain\f5\fs20\cf1 MAX\plain\f5\fs20\cf0 = \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( FG( I): PRICE( I)* Y( I)); \par \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( FG( I): WIDTH( I)*Y( I)) <= RMWIDTH; \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( I): \plain\f5\fs20\cf1 @GIN\plain\f5\fs20\cf0 (Y( I))); \par \plain\f5\fs20\cf1 ENDSUBMODEL\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 CALC\plain\f5\fs20\cf0 : \par \par \plain\f5\fs20\cf2 ! Set parameters;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @SET\plain\f5\fs20\cf0 ( 'DEFAULT'); \par \plain\f5\fs20\cf1 @SET\plain\f5\fs20\cf0 ( 'TERSEO', 2); \par \par \plain\f5\fs20\cf2 ! Max number of patterns we'll allow;\plain\f5\fs20\cf0 \par MXPATS = \plain\f5\fs20\cf1 @SIZE\plain\f5\fs20\cf0 ( PATTERN); \par \plain\f5\fs20\cf2 ! Make first pattern an expensive super pattern;\plain\f5\fs20\cf0 \par COST( 1) = BIGM; \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( I): NBR( I, 1) = 1); \par \par \plain\f5\fs20\cf2 ! Loop as long as the reduced cost is \par attractive and there is space;\plain\f5\fs20\cf0 \par NPATS = 1; \par RC = -1; \plain\f5\fs20\cf2 ! Clearly attractive initially;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @WHILE\plain\f5\fs20\cf0 ( RC #LT# 0 #AND# NPATS #LT# MXPATS: \par \plain\f5\fs20\cf2 ! Solve for current best pattern runs;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @SOLVE\plain\f5\fs20\cf0 ( MASTER_PROB); \par \plain\f5\fs20\cf2 ! Copy dual prices to PATTERN_GEN submodel;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( I): PRICE( I) = -\plain\f5\fs20\cf1 @DUAL\plain\f5\fs20\cf0 ( R_DEM( I))); \par \plain\f5\fs20\cf2 ! Generate the current most attractive pattern;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @SOLVE\plain\f5\fs20\cf0 ( PATTERN_GEN); \par \plain\f5\fs20\cf2 ! Marginal value of current best pattern;\plain\f5\fs20\cf0 \par RC = 1 - SUBOBJ; \par \plain\f5\fs20\cf2 ! Add the pattern to the Master;\plain\f5\fs20\cf0 \par NPATS = NPATS + 1; \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( I): NBR( I, NPATS) = Y( I)); \par COST( NPATS) = 1; \par ); \par \par \plain\f5\fs20\cf2 ! Finally solve Master as an IP;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @SOLVE\plain\f5\fs20\cf0 ( MASTER_PROB, INTEGER_REQ); \par \par \plain\f5\fs20\cf1 ENDCALC\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf2 ! This following calc section displays the \par solution in a tabular format;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 CALC\plain\f5\fs20\cf0 : \par \plain\f5\fs20\cf2 ! Compute yield of each FG;\plain\f5\fs20\cf0 \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( F): YIELD( F) = \par \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( PATTERN( J)| J #LE# NPATS: \par NBR( F, J) * X(J)) \par ); \par \plain\f5\fs20\cf2 ! Compute some stats;\plain\f5\fs20\cf0 \par TOTAL_FT_USED = \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( PATTERN: X) * RMWIDTH; \par TOTAL_FT_YIELD = \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 ( FG: YIELD * WIDTH); \par PERC_WASTE = 100 * ( 1 - ( TOTAL_FT_YIELD / TOTAL_FT_USED)) ; \par \plain\f5\fs20\cf2 ! Display the table of patterns and their usage;\plain\f5\fs20\cf0 \par FW = 6; \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( ' Total raws used: ', \plain\f2\fs20\cf1 @SUM\plain\f2\fs20\cf0 (PATTERN: X) , \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 2), \par ' Total feet yield: ', TOTAL_FT_YIELD , \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1), \par ' Total feet used: ', TOTAL_FT_USED , \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 2), \par ' Percent waste: ', \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( PERC_WASTE, '#5.2G'), '%', \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1), 24*' ', 'Pattern:', \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( ' FG Demand Yield'); \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( PATTERN( I) | I #LE# NPATS: \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( I, '6.6G'))); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( ' ',FW*( NPATS+3)*'=', \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FG( F): \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ((FW - \plain\f2\fs20\cf1 @STRLEN\plain\f2\fs20\cf0 ( FG( F)))*' ', FG( F), ' ', \par \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( DEM( F), '6.6G'), \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( YIELD( F), '6.6G')); \par \plain\f2\fs20\cf1 @FOR\plain\f2\fs20\cf0 ( FXP( F, P) | P #LE# NPATS: \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @IF\plain\f2\fs20\cf0 ( NBR( F, P) #GT# 0, \par \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( NBR( F, P), "6.6G"), ' .'))); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)) \par ); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( ' ',FW*( NPATS+3)*'=', \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( 2*FW*' ', ' Usage:'); \par \plain\f2\fs20\cf1 @WRITEFOR\plain\f2\fs20\cf0 ( PATTERN( P) | P#LE# NPATS: \plain\f2\fs20\cf1 @FORMAT\plain\f2\fs20\cf0 ( X( P), '6.6G')); \par \plain\f2\fs20\cf1 @WRITE\plain\f2\fs20\cf0 ( \plain\f2\fs20\cf1 @NEWLINE\plain\f2\fs20\cf0 ( 1)); \par \plain\f2\fs20\cf1 ENDCALC\plain\f2\fs20\cf0 \par \par \plain\f2\fs20\cf1 END\plain\f2\fs20\cf0 \par \par \par } \par \plain\f2\fs20\cf ', \plain\f5\fs20\cf1 @SUM\plain\f5\fs20\cf0 (PATTERN: X) , \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 2), \par ' Total feet yield: ', TOTAL_FT_YIELD , \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1), \par ' Total feet used: ', TOTAL_FT_USED , \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 2), \par ' Percent waste: ', \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( PERC_WASTE, '#5.2G'), '%', \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1), 24*' ', 'Pattern:', \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( ' FG Demand Yield'); \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( PATTERN( I) | I #LE# NPATS: \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( I, '6.6G'))); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( ' ',FW*( NPATS+3)*'=', \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FG( F): \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ((FW - \plain\f5\fs20\cf1 @STRLEN\plain\f5\fs20\cf0 ( FG( F)))*' ', FG( F), ' ', \par \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( DEM( F), '6.6G'), \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( YIELD( F), '6.6G')); \par \plain\f5\fs20\cf1 @FOR\plain\f5\fs20\cf0 ( FXP( F, P) | P #LE# NPATS: \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @IF\plain\f5\fs20\cf0 ( NBR( F, P) #GT# 0, \par \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( NBR( F, P), "6.6G"), ' .'))); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)) \par ); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( ' ',FW*( NPATS+3)*'=', \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( 2*FW*' ', ' Usage:'); \par \plain\f5\fs20\cf1 @WRITEFOR\plain\f5\fs20\cf0 ( PATTERN( P) | P#LE# NPATS: \plain\f5\fs20\cf1 @FORMAT\plain\f5\fs20\cf0 ( X( P), '6.6G')); \par \plain\f5\fs20\cf1 @WRITE\plain\f5\fs20\cf0 ( \plain\f5\fs20\cf1 @NEWLINE\plain\f5\fs20\cf0 ( 1)); \par \plain\f5\fs20\cf1 ENDCALC\plain\f5\fs20\cf0 \par \par \plain\f5\fs20\cf1 END\plain\f5\fs20\cf0 \par \par \par }