Esempio n. 1
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);
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        // Add v=expr to the tableau, update column cross indices
        // v becomes a basic variable
        // expr is now owned by ClTableau class,
        // and ClTableau is responsible for deleting it
        // (also, expr better be allocated on the heap!).
        protected void AddRow(ClAbstractVariable var, ClLinearExpression expr)
        {
            // for each variable in expr, add var to the set of rows which
            // have that variable in their expression
            _rows.Add(var, expr);

            // FIXME: check correctness!
            foreach (var clv in expr.Terms.Keys)
            {
                InsertColVar(clv, var);

                if (clv.IsExternal)
                {
                    ExternalParametricVars.Add((ClVariable)clv);
                }
            }

            if (var.IsExternal)
            {
                ExternalRows.Add((ClVariable)var);
            }
        }