Modeling Lean and Agile Approaches: A Western Canadian Forest Company Case Study
Appendix A
The mathematical formulations aim to solve the lumber planning problem emulating our MEs, keeping in mind that the BC Coastal forest SC has 3 nodes: forest cut-block, sort-yards, and sawmills. First, the objective functions were stated: for lean (1L), for agile (1A), and for BC-SC, the problem was divided in timber procurement (1T), and lumber production (1W). Second, a set of common constraints for all problems were stated, with the full formulation as follows:
Table A1. Model's sub-index.
I | Cut-block |
J | Growth |
K | Species |
L | Sort-yard |
M | Bucking policy |
N | Log grade |
O | Sawmill |
P | Sawing policy |
Q | Sawn-woods products |
R | Periods |
Table A2. Operational and inventory costs.
C Hi, C Stu kj | Harvesting cost ($/m3) at stand i, and stumpage cost ($/m3) for species k, growth j. |
C SCBi, Ci SYSl | Cost of keeping 1 m3 of stem at cut-block i, and cost of keeping 1 m3 of stem at sort-yard l. |
Ci Sly, Ci SALo | Cost of keeping 1 m3 of logs at sort-yard l, and sawmill o. |
Ci SAPo | Cost of keeping 1 m3 of sawn wood products at sawmill o. |
C T1 il, C T2 lo | Transportation cost ($/m3) from stand i to sort yard l, and from sort yard l to sawmill o. |
CT3 o oo | Transportation cost in $/m3 of lumber from sawmill o to sawmill oo. |
C SYl, C SWo | Sort-yard production cost ($/m3) in sort-yard l, and sawmilling cost ($/m3) in sawmill o. |
C Setup kno | Sawmill setup cost in $, charged when a sawmill changes species and log grade. |
C SWOUTo | Outsourced sawmilling cost in $/m3, for sawmill o. |
L_Pkqor, C_Pkr | Lumber and chips price ($/m3) of species k, product q, sold by sawmill o, in period r. |
l_p knlr | Log price ($/m3) of species k, grade n, sort-yard l, in period r. |
Table A3. Yields, capacities and productivities.
Y_fIjk | Forest yield (m3/ha) in stand i, of growth jand species k. |
Y_syjkmn | Bucking yield (%) of product n by stem growth j, species k, by applying bucking policy m. |
Y_swknpq | Sawing yield (%) of product q by log grade n, species k, by applying sawing policy p. |
Y_chk | Chipping yield (%) of sawing sub-products species k. |
C_fr,C_syr, C_swr | Harvesting, sort-yarding and sawmilling capacity (hours) on period r. |
P_fj | Logging productivity (hour/m3) in a stand predominantly of growth j. |
P_syjkl | Bucking-sorting productivity (hour/m3) for stems of growth j, species k, at sort-yard l. |
P_swjkl | Sawing productivity (in hour/m3) when sawing species k, log grade n, at sawmill o. |
io_sysjkl | Zero inventory of stems of growth j, species k at sort-yard l |
io_syl knl | Zero inventory of logs of species k, log grade n, at sort-yard l. |
io_salkno | Zero inventory of logs of species k, log grade n, at sawmill o. |
io_sapkqo | Zero inventory of sawn-wood of species k, product q, at sawmill o. |
Dkqor | Lumber demand (m3) of species k, product q, in sawmill o, for period r. |
Log_Dknlr | Logs demand (m3) of species k, log grade n, in sort-yard l, for period r. |
Table A4. Allowable quantities to penalize lumber production, capacity usage, and economic penalties.
%O_1kqor, %B_1kqor | Max. % for over/below production defined in function of the demand of lumber product species k, product q, produced/sold by sawmill o, period r. |
%O_LOr, %B_LOr | Max. over/below hours usage for logging in period r, defined as percentage of the hours available in period r. |
%O_SYlr, %B_SYlr | Max. over/below hours usage for sort-yarding in sort-yard l, period r, defined as percentage of the hours available in period r. |
%O_SWor, %B_SWor | Max. over/below hours usage for sawmilling in sawmill o, period r, defined as percentage of the hours available in period r. |
PO_1kqor, PB_1kqor | Pct. of the lumber price of lumber product species k, product q, produced-sold by sawmill o, period r, to penalize 1 m3 produced over/below the lumber demand. |
PB_2knlr | Pct. of the log price species k, log grade n, produced-sold by sort-yard l, period r, to penalize 1 m3 produced below the log demand. |
PO_LOr, PB_LOr | Pct. of the logging cost charged for every over/below hour usage in logging in period r. |
PO_SYl r, PB_SYlr | Pct. of the sort-yarding cost charged for every over/below hour usage in sort-yard l period r. |
PO_SWor, PB_SWor | Pct. of the sawing cost charged for every over/below hour usage in sawing in sawmill o, period r. |
Table A5. Decision variables.
Hir | Land harvested (ha.) at stand i, in period r. |
Tijk r | Harvested volume (m3) at stand i, growth type j, species k in period r. |
ISCBIjkr | Inventory of stems (m3) at cub-block i, of growth j, species k, in period r. |
Uijklr | Vol. of stems (m3) of growth j, species k sent from stand i to sort-yard l, in period r. |
Vjklmr | Sort-yard l input of stems (m3) of growth j, species k, bucked with policy m, period r. |
ISYSjklr | Inventory of stems (m3) of growth j, species k, at sort-yard l, in period r. |
Wknlr | Vol. of logs (m3) of species k, grade n, produced in sort-yard l in period r. |
Yknopr | Vol. of logs (m3) of species k, grade n, sawn with sawing policy p, at sawmill o, in period r. |
YOknopr | Vol. of logs (m3) of species k, grade n, sawn with sawing policy p, at the outsourcing sawmill of sawmill o, in period r. |
ISALknor, ISYLknlr | Inventory of logs (m3) of species k, grade n at sawmill o and at the sort yard l, in period r. |
Xknlor | Vol. of logs (m3) of species k, grade n, sent from sort-yard l to sawmill o, in period r. |
Zkqor | Vol. of lumber (m3) of species k, product q, produced-sold by sawmill o, in period r. |
ZOkqor | Vol. of lumber (m3) of species k, product q, produced-sold by outsourced sawmill of sawmill o, in r. |
ZI O_OOkqor | Vol. of lumber (m3) of species k, product q, arrived in interchanges to sawmill o, in period r. |
ZI OO_Okqor | Vol. of lumber (m3) of species k, product q, sent in interchanges to sawmill o, in period r. |
DO_1kqor, DB_1kqor | Vol. (m3) of over, below demand lumber production of species k, product q, produced-sold by sawmill o, in period r. |
DB1knlr | Vol. (m3) of below demand log production of species k, log grade n, produced-sold by sort yard l, in period r. |
DO_LOr, DB_LOr | Quantity of over/below cap. Usage (hours) in logging operation in period r. |
DO_SYlr, DB_SYlr | Quantity of over/below cap. Usage (hours) in sort-yarding operation at sort-yard l in period r. |
DO_SWor, DB_SWor | Quantity of over/below cap. Usage (hours) in sawmilling operation at sawmill o in period r. |
BAkqor | Lumber balance (m3) for species k, product q, produced-sold by sawmill o, in period r. |
Ckr | Produced chips (m3) of species k in period r. |
ISAPkqor | Inventory of sawn-wood products (m3) of species k, sawn-wood products q, in period r. |
LOTr, SYTlr,SWTor | Logging time, Sort yard l processing time, and Sawmill o processing time in hours for period r. |
BYknor | Binary variable, 1 if sawmill o consumes logs species k, grade n, in period r, 0 otherwise. |
Table A6.
Objective functions.
Notation | Description |
Minimization of costs (1l) | =Logging costs + sort yarding costs + sawmilling costs + cost to penalize below demand satisfaction + logging penalization cost + sort yarding penalization cost + sawmilling penalizations costs |
Maximization of profit (1a) | =Lumber and chips incomes-logging costs − sort yarding costs − sawmilling costs − cost to penalize below demand satisfaction − logging penalization cost − sort yarding penalization cost − sawmilling penalizations costs |
Minimization of timber procurement costs (1T) | =Logging costs + sort yarding costs + cost to penalize below log demand satisfaction + logging penalization cost + sortyarding penalization cost |
Maximization of lumber profits (1W) | =Lumber and chips incomes − cost of buying logs − sawmilling costs − cost to penalize below lumber demand satisfaction − sawmilling penalizations costs |
=Logging costs: harvesting costs, stumpage costs, primary transportation cost, and stems inventory costs | |
Sort yarding costs: sort yard processing cost, transportation cost, and stems and logs costs | |
Sawmilling costs, including processing cost at internal and outsourced sawmill, lumber production swat, and logs and lumber inventory costs | |
Cost to penalize below lumber demand satisfaction | |
Logging penalization costs | |
Sort yarding penalization costs | |
Sawmilling penalization costs | |
Lumber and chips incomes: includes lumber incomes, chips incomes, and over demand production incomes | |
Cost to penalize below log demand satisfaction | |
Cost to penalize below lumber demand satisfaction | |
Costs of buying logs |
Constraint
1 ensures that all period cut-block harvests do not exceed the
cut-block area. Constraint 2 computes the cut-block volume harvested,
and constraint 3 limits the time expended in logging. As I constrained
the rate of capacity usage between periods, constraint 4 computes the
time used for logging per period and constraint 5 adds slack variables
to track logging time deviations between periods. The same principle was
applied for sort-yards and sawmills (constraints 5–11). Several flow
balance constraints were applied on the: logging side, sort-yard side,
and internal and outsourced sawmills side (12, 13, 18, and 19).
Constraint 14 determined log productions at the sort-yards. Constraint
15 limits the time expended in sort-yarding. Constraint 16 calculated
the time used at sort-yards per period, and constraint 17 works in the
same fashion as constraint 5. Constraints 20-21 determined the lumber
production at internal and outsourced sawmills. A setup cost was applied
when sawmills changed log species and grades; thus, a binary variable,
which is 1 if log species and grades are changed, and zero otherwise
(constraint 22).
The chips produced are determined by constraint 23.
Constraint 24 limits the time expended in sawmilling. Constraint 25
limits the time expended in outsourcing sawmilling to 20% of the
available period's sawmilling capacity, and constraint 27 ensures that
internal sawmill production will not be exceeded by outsourced sawmill
production. As I constrained the deviations of capacity usage between
periods, constraint 26 computes the time used on sawmilling per period.
Constraint 28 limited the sawmilling time deviations between periods by
adding slack variables. A market constraint 29 ensured that lumber
demand would be satisfied with all sources of lumber production. Balance
constraint 30 determined the volume of lumber to be considered for
order fulfillment parameter calculations. Constraints 31–32 determined
the volume of lumber that arrived in interchanges from other sawmills to
sawmill "o" and determined the lumber that is sent to other sawmills
from sawmill "o". Constraint 33 ensured that the amount of lumber
produced over demand will not exceed a given [%] of the lumber demand.
Constraint 34 ensured that the amount of lumber produced below the
demand will not exceed a given [%] of the lumber demand. Constraints
35–38 ensured that the final inventories are positive.
The agile objective function (1A) maximizes profit and the lean objective function (1L) minimizes costs. Both objective functions operate on the same feasible region (convex hull defined by Equations (2–35)). Therefore, 1A will always dominate 1L. However, this dominance is minimized by the use of penalty coefficients for over/under production and order fulfillment. The penalty values are important components of the models and strongly influence how they behave. They were discussed further when the results were presented.