addConstraint method

Result addConstraint(
  1. Constraint constraint
)

Attempts to add an individual Constraint to the solver.

Check the Result returned to make sure the operation succeeded. Any errors will be reported via the message property on the Result.

Possible Results:

Implementation

Result addConstraint(Constraint constraint) {
  if (_constraints.containsKey(constraint)) {
    return Result.duplicateConstraint;
  }

  final tag = _Tag(
    _Symbol(_SymbolType.invalid),
    _Symbol(_SymbolType.invalid),
  );

  final row = _createRow(constraint, tag);

  var subject = _chooseSubjectForRow(row, tag);

  _constraints[constraint] = tag;

  if (subject.type == _SymbolType.invalid && _allDummiesInRow(row)) {
    if (!_nearZero(row.constant)) {
      return Result.unsatisfiableConstraint;
    } else {
      subject = tag.marker;
    }
  }

  if (subject.type == _SymbolType.invalid) {
    if (!_addWithArtificialVariableOnRow(row)) {
      return Result.unsatisfiableConstraint;
    }
  } else {
    row.solveForSymbol(subject);
    _substitute(subject, row);
    _rows[subject] = row;
  }

  return _optimizeObjectiveRow(_objective);
}