Determining Slack

In the second example above, Demand Site B was able to receive a higher percentage of its demand than Demand Site A, due to the tributary inflow between the two withdrawal points for the two demand sites. In order for WEAP to determine which coverages are constrained from going higher due to unavailability of supply (e.g., 60% for Demand Site A), and which can get more water (e.g., 100% for Demand Site B), a new variable, epsilon, is defined for each demand site and added to the coverage constraints:

CoverageFinal =CoverageDS1 + EpsilonDS1

CoverageFinal =CoverageDS2 + EpsilonDS2

The epsilons are also added to the objective function, but with a negative sign, so that they are minimized.

Maximize: CoverageFinal - k * EpsilonDS1 - k * EpsilonDS2

The values for each epsilon must be between 0 and 0.0001. The value for k is chosen to insure that the values for the epsilons will never overwhelm the value for CoverageFinal. The value chosen is 1 / (n + 1), where n = the number of demand sites.

The effect of the epsilons is to determine which demand sites are supply limited and which are not. In the second example above, here are the values of the variables after the first iteration of the LP:

CoverageDS1 = 0.6

EpsilonDS1 = 0.0001

CoverageDS2 = 0.6001

EpsilonDS2 = 0

CoverageFinal = 0.6001

Objective function = 0.6001 - (1/3) * 0.0001 - (1/3) * 0 = 0.60006666

Because EpsilonDS1 = 0, we know that DS1 cannot get any more water than 0.6. Assume DS1 could get more than 0.6, say 0.6001. In that case, the following values

CoverageDS1 = 0.6001

EpsilonDS1 = 0.0001

CoverageDS2 = 0.6001

EpsilonDS2 = 0.0001

CoverageFinal = 0.6002

Objective function = 0.6002 - (1/3) * 0.0001 - (1/3) * 0.0001 = 0.60013333

would yield a better value for the objective function and hence would have been the solution. Therefore, DS1 cannot get more than 0.6, while DS2 can get more than 0.6.