
Figure 2.9, suppose we had signed a contract promising that 200 chairs would be deliv-
ered to a single large customer, as part of the product mix. Adding the requirement
C ≥ 200 to the other constraints of the model creates an inconsistency. (The implied
machining requirement would be 1800 hours, which exceeds the capacity available.)
Presented with a set of inconsistent constraints, Solver detects the inconsistency and
delivers the following result message in the solution log as well as at the bottom of
the task pane:
Solver could not find a feasible
solution.
Whenever this message appears, there must have been an inconsistency in the set of
constraints.
For the model builder, the task is to locate the inconsistency when confronted with
the infeasibility message. There are potentially two levels to this task: (1) finding the
offending constraint or constraints, and (2) identifying the source of the inconsistency.
Sometimes, the offending constraint can be discovered by “eyeballing” the model—
scanning for visual clues to the location of an error. For example, a parameter could
be entered incorrectly. (Perhaps the chair contract calls for only 20 units, but 200
has been entered inadvertently.) Alternatively, a constraint could be entered backward,
as a LT constraint when it should have been a GT constraint. However, the more stan-
dard way to search for an inconsistency is to remove constraints from the model, one
at a time, and to rerun Solver each time. (In large problems, it might make more sense
to remove several constraints at a time.) If the model remains infeasible, restore the
constraint and try removing a different one. If the model reaches an optimal solution,
then we know that something about the constraint we removed was a partial cause of
the infeasibility.
Identifying the source of an inconsistency refers to the part of the task that lies at
the interface between model and problem. If the inconsistency resulted from a ty po,
then it is a simple matter to repair it. However, a more subtle difficulty arises when
the formulation contains too many constraints. This result can occur if, during the
modeling process, there was a thorough attempt to include all the considerations men-
tioned by various parties. Isolated desires and secondary considerations could wind up
being expressed as model constraints, contributing to a logical conflict. In th ese situ-
ations, it makes sense to eliminate some of the constraints, so that the model is at least
feasible. Thereafter, various additional considerations can be revisited, to see whether
they can be accommodated without causing infeasibility.
The second kind of modeling error occurs when there is no limit to the objective
function in the direction of optimization. An unbounded objective function occurs if,
with a set of feasible decisions, the objective can grow infinitely positive in a maximi-
zation problem or infinitely negative in a minimization problem. The most common
cause of an unbounded objective is failure to invoke the Assume Non-Negative
option. For example, in the trail mix example of Figure 2.11, suppose we had forgotten
to set the option to True. Then it would be mathematically possible to make the objec-
tive function as negative as we wish by taking negative quantities for some of the
ingredients. Consider the mix corresponding to R ¼ 115, P ¼ –40, and W ¼ –50.
54
Chapter 2 Linear Programming: Allocation, Covering, and Blending Models