Example #1
0
        public VectorEquation CalculateVectorsOperations(VectorEquation vector1, EOperation operation, VectorEquation vector2)
        {
            VectorEquation result = new VectorEquation(new Dictionary <string, double>(), 0);

            if (vectorHelper.isEqualVariableVectors(new List <VectorEquation> {
                vector1, vector2
            }))
            {
                List <string> vars = vector1.VectorBody.Keys.ToList();

                foreach (string var in vars)
                {
                    switch (operation)
                    {
                    case EOperation.Addition:
                        result.VectorBody.Add(var, vector1.VectorBody[var] + vector2.VectorBody[var]);
                        break;

                    case EOperation.Subtraction:
                        result.VectorBody.Add(var, vector1.VectorBody[var] - vector2.VectorBody[var]);
                        break;

                    case EOperation.Multiplication:
                        result.VectorBody.Add(var, vector1.VectorBody[var] * vector2.VectorBody[var]);
                        break;

                    case EOperation.Division:
                        result.VectorBody.Add(var, vector1.VectorBody[var] / vector2.VectorBody[var]);
                        break;
                    }
                }

                result.Constant = CalculateOperations(vector1.Constant, operation, vector2.Constant);
            }

            return(result);
        }
Example #2
0
        public IEnumerable <Constraint> StandarizeConstraint(IEnumerable <Constraint> constraints, out List <string> header)
        {
            List <Constraint> result = new List <Constraint>();

            header = new List <string>();

            if (_vectorHelper.isEqualVariableVectors(constraints))
            {
                int hVar = constraints.Where(c => (c.ComparatorOperator == EComparator.LessThan || c.ComparatorOperator == EComparator.LessEqualThan)).Count();
                int eVar = constraints.Where(c => (c.ComparatorOperator == EComparator.GreaterThan || c.ComparatorOperator == EComparator.GreaterEqualThan)).Count();
                int aVar = constraints.Where(c => c.ComparatorOperator == EComparator.EqualThan).Count();

                header = constraints.FirstOrDefault().VectorBody.Keys.ToList();

                for (int i = 1; i <= hVar; i++)
                {
                    header.Add(string.Format("S{0}", i.ToString()));
                }

                for (int i = 1; i <= eVar; i++)
                {
                    header.Add(string.Format("e{0}", i.ToString()));
                }

                for (int i = 1; i <= eVar + aVar; i++)
                {
                    header.Add(string.Format("A{0}", i.ToString()));
                }

                int eqSCount = 1;
                int eqeCount = 1;

                foreach (Constraint constraint in constraints)
                {
                    Constraint constraintstandarize = new Constraint(constraint.VectorBody, EComparator.EqualThan, constraint.Constant);

                    if (!string.IsNullOrWhiteSpace(constraint.Name))
                    {
                        constraintstandarize.Name = constraint.Name;
                    }

                    List <string> headerVoid = header.Except(constraint.VectorBody.Keys).ToList();

                    if (constraint.ComparatorOperator == EComparator.LessThan || constraint.ComparatorOperator == EComparator.LessEqualThan)
                    {
                        foreach (string head in headerVoid)
                        {
                            if (head.Equals(string.Format("S{0}", eqSCount.ToString())))
                            {
                                constraintstandarize.VectorBody.Add(head, 1);
                            }
                            else
                            {
                                constraintstandarize.VectorBody.Add(head, 0);
                            }
                        }

                        eqSCount++;
                    }
                    else if (constraint.ComparatorOperator == EComparator.GreaterThan || constraint.ComparatorOperator == EComparator.GreaterEqualThan)
                    {
                        foreach (string head in headerVoid)
                        {
                            if (head.Equals(string.Format("e{0}", eqeCount.ToString())))
                            {
                                constraintstandarize.VectorBody.Add(head, -1);
                            }
                            else if (head.Equals(string.Format("A{0}", eqeCount.ToString())))
                            {
                                constraintstandarize.VectorBody.Add(head, 1);
                            }
                            else
                            {
                                constraintstandarize.VectorBody.Add(head, 0);
                            }
                        }
                        eqeCount++;
                    }

                    result.Add(constraintstandarize);
                }
            }

            return(result);
        }