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); }
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); }