Пример #1
0
        /// <summary>
        /// Replace all occurrences of oldVar with expr, and update column cross indices
        /// oldVar should now be a basic variable.
        /// </summary>
        protected void SubstituteOut(ClAbstractVariable oldVar, ClLinearExpression expr)
        {
            var varset = _columns[oldVar];

            foreach (var v in varset)
            {
                var row = _rows[v];
                row.SubstituteOut(oldVar, expr, v, this);
                if (v.IsRestricted && row.Constant < 0.0)
                {
                    InfeasibleRows.Add(v);
                }
            }

            if (oldVar.IsExternal)
            {
                ExternalRows.Add((ClVariable)oldVar);
                ExternalParametricVars.Remove((ClVariable)oldVar);
            }

            _columns.Remove(oldVar);
        }
Пример #2
0
        /// <summary>
        /// Remove v from the tableau -- remove the column cross indices for v
        /// and remove v from every expression in rows in which v occurs
        /// </summary>
        protected void RemoveColumn(ClAbstractVariable var)
        {
            // remove the rows with the variables in varset

            HashSet <ClAbstractVariable> rows;

            if (_columns.TryGetValue(var, out rows))
            {
                _columns.Remove(var);

                foreach (var expr in rows.Select(clv => _rows[clv]))
                {
                    expr.Terms.Remove(var);
                }
            }

            if (var.IsExternal)
            {
                ExternalRows.Remove((ClVariable)var);
                ExternalParametricVars.Remove((ClVariable)var);
            }
        }