Пример #1
0
 /// <summary>
 /// Represents copy of variable
 /// </summary>
 /// <exception cref="NullReferenceException"></exception>
 public Variable(Variable variable)
 {
     _coefficient = new Fraction(variable._coefficient);
     SetLabel(variable.Label);
     Power = variable.Power;
 }
Пример #2
0
 /// <summary>
 /// Adds var to current variable
 /// </summary>
 /// <exception cref="NullReferenceException"></exception>
 public void Add(Variable var)
 {
     if (var.Label != Label || var.Power != Power)
         throw new FormatException("Input variable must be with same labels and powers");
     _coefficient += var._coefficient;
 }
Пример #3
0
        /// <summary>
        /// Multiplys Constraint(left and right sides) by number
        /// </summary>
        public void Multiply(int number)
        {
            for (var i = 0; i < _leftSide.Count; i++)
            {
                _leftSide[i] = new Variable(_leftSide[i]);
                _leftSide[i].Multiply(number);
            }

            if (number < 0)
                ChangeSign();

            _rightSide *= number;
        }
Пример #4
0
        /// <summary>
        /// Multiplys Constraint(left and right sides) by fraction
        /// </summary>
        /// <exception cref="NullReferenceException"></exception>
        public void Multiply(Fraction fraction)
        {
            for (var i = 0; i < _leftSide.Count; i++)
            {
                _leftSide[i] = new Variable(_leftSide[i]);
                _leftSide[i].Multiply(fraction);
            }
            //foreach (Variable var in this._leftSide)
            //    var.Multiply(fraction);

            if (fraction < 0)
                ChangeSign();

            _rightSide *= fraction;
        }
Пример #5
0
        /// <summary>
        /// Divides Constraint(left and right sides) by number
        /// </summary>
        /// <exception cref="DivideByZeroException"></exception>
        public void Divide(int number)
        {
            for (var i = 0; i < _leftSide.Count; i++)
            {
                _leftSide[i] = new Variable(_leftSide[i]);
                _leftSide[i].Divide(number);
            }
            //foreach (Variable var in this._leftSide)
            //    var.Divide(number);

            if (number < 0)
                ChangeSign();

            _rightSide /= number;
        }
Пример #6
0
        /// <summary>
        /// Adds variable with or without sign change
        /// </summary>
        /// <param name="var">Variable</param>
        /// <param name="withSignChange">If true change sign('>=' -> '=', if var.Coefficient less than 0)</param>
        public void AddVariable(Variable var, bool withSignChange)
        {
            if (withSignChange)
            {
                if (var.Coefficient > 0)
                    Sign = Sign == "<=" || Sign == "<" ? "=" : Sign;
                if (var.Coefficient < 0)
                    Sign = Sign == ">=" || Sign == ">" ? "=" : Sign;
            }

            for (var i = 0; i < _leftSide.Count; i++)
                if (_leftSide[i].Label == var.Label && _leftSide[i].Power == var.Power)
                {
                    var tmp = _leftSide[i];
                    _leftSide.Remove(tmp);
                    var newVar = new Variable(var.Coefficient + tmp.Coefficient, var.Label, var.Power);
                    _leftSide.Add(newVar);
                    return;
                }

            _leftSide.Add(new Variable(var));
        }
Пример #7
0
 /// <summary>
 /// Removes variable from target function by label
 /// </summary>
 public void RemoveVariable(string variableLabel)
 {
     var removedVariable = new Variable();
     foreach (var variable in _formula)
         if (variable.Label == variableLabel)
         {
             removedVariable = variable;
             break;
         }
     _formula.Remove(removedVariable);
     _arguments.Remove(variableLabel);
     if (_variablesWithMaxCoefficient.Contains(variableLabel))
         _variablesWithMaxCoefficient.Remove(variableLabel);
 }
Пример #8
0
 /// <summary>
 /// Adds variable to formula
 /// </summary>
 /// <exception cref="NullReferenceException"></exception>
 public void AddVariable(Variable var)
 {
     if (_arguments.Contains(var.Label))
     {
         for (var i = 0; i < _formula.Count; i++)
             if (_formula[i].Label == var.Label && _formula[i].Power == var.Power)
             {
                 var tmp = _formula[i];
                 _formula.Remove(tmp);
                 var newVar = new Variable(var.Coefficient + tmp.Coefficient, var.Label, var.Power);
                 _formula.Add(newVar);
                 return;
             }
     }
     _formula.Add(new Variable(var.Coefficient, var.Label, var.Power));
     _arguments.Add(var.Label);
 }
 /// <summary>
 /// Adds zero constrain for specified variable
 /// </summary>
 private void AddZeroConstraint(string variableLabel)
 {
     var variable = new Variable("1/1", variableLabel);
     ZeroConstraints.Add(new Constraint(new List<Variable> { variable }, ">=", "0/0"));
 }