Exclusive Accounts

Exclusive accounts are responsible for deciding which destinations receive the products harvested from a block in a multiple destination situation. The effect of an exclusive account is that products harvested from a block are exclusively sent to one destination out of a list of options. The scheduler will choose the destination in order to best fulfill the active targets. If multiple products are being harvested from a block (for example, sawlogs and pulp) it is possible that they can be sent to different destinations, depending on targets and costs.

The exclusive decision is the starting point that determines the route products that a particular block will take. Once a destination has been chosen then hauling, building and maintenance costs can be calculated for the route that connects the block to the mill.

You must use exclusive accounts if your model has a product that goes to more than one destination. Exclusive accounts are not required when multiple destinations each receive different products. In this case set the model up as a series of 'single product to single destination' accounts (as in the previous example using duplicate accounts).

You define an exclusive account by specifying the input account and the output account options (see Figure 40, “Multiple destination accounts”). Patchworks automatically creates an account with a name that starts with 'exclusive' and ends with the input account name.

The following example shows two destination accounts. Exclusive accounts are defined in the PIN file in Target Initialization section. The PIN Builder will automatically create an exclusive account if you add the same product account to more than one destination. (see the section called “Defining product eligibility by destination”).

Figure 40. Multiple destination accounts


control.addExclusiveAccount("product.Yield.Managed.Conif", "destination.MILL1");
control.addExclusiveAccount("product.Yield.Managed.Conif", "destination.MILL2");
control.duplicateAccount("product.Yield.Managed.Decid", "destination.MILL1");


Exclusive accounts are required when a product account is assigned to more than one destination. The exclusive account will assure that the products from a block will only be assigned to a single destination, and the scheduler will choose the destination that will contribute to reducing the objective function. In this example, conifer volumes are allowed to go to either MILL1 or MILL2, and the exclusive accounts makes the choice. Deciduous volume only goes to MILL1, so product values are duplicated to this destination.

This account will hold the name of the output account that the scheduler has decided to send the product to. This account is dynamic and the value can vary between periods.

The value of the exclusive account will be the name of the output account that the scheduler has decided to send the product to. This value is dynamic and can vary between periods.


The block attribute table will contain a field for each exclusive account. Using this field you can determine what destination was chosen for each block in the dataset. See Figure 41, “Exclusive account information in block attribute table” below.

Figure 41. Exclusive account information in block attribute table

The exclusive accounts are added to the block attribute table, and contain the output account name the scheduler has decided to send the product to for each block.


The destination account totals the product reaching the destination and cannot distinguish the multiple products that were fed to the destination. If you would like to keep track of the specific products entering the destination account seperately you will need to insert a Duplicate Account. See the following example for more details on how to set up this account structure.

Figure 42. Duplicate accounts for tracking mill quotas

control.addExclusiveAccount("product.Yield.managed.Conif", "product.Mill1.Yield.Conif");
control.duplicateAccount("product.Yield.managed.Decid", "product.Mill1.Yield.Decid");
control.duplicateAccount("product.Mill1.Yield.Conif", "destination.MILL1", 1);
control.duplicateAccount("product.Mill1.Yield.Decid", "destination.MILL1", 1);

control.addExclusiveAccount("product.Yield.managed.Conif", "product.Mill2.Yield.Conif");
control.duplicateAccount("product.Mill2.Yield.Conif", "destination.MILL2", 1);


In the previous examples we could observe the total volume of products going to MILL1, but there was no account that described just the amount of conifer volume going to MILL1, and thus there was no way to set a target or quota on the amount of conifer required by MILL1. We can remedy this using a duplicate account statement to have the conifer volume that is destined for MILL1 go into an intermediate account, and then have these values duplicated into the destination. Mill quotas can now be set on the account named product.Mill1.Yield.Conif

Once we have set up the model to decribe products and destinations, we can then add commands to create the accounts that track the costs of hauling wood and building and maintaining active road segments.