/// <summary> /// Cria uma instância de objectos do tipo <see cref="LinearDecompositionInput{ConstraintsType, ObjectiveCoeffType}"/> /// </summary> /// <param name="initialDecompositionPoints">As estimativas iniciais relativas ao problema da decomposição.</param> /// <param name="objectiveFunction">A função objectivo.</param> /// <param name="cost">O custo inicial.</param> /// <param name="masterConstraints">As restrições do problema principal.</param> /// <param name="decomposedConstraints">As restrições dos vários problemas decompostos.</param> /// <param name="inverseBasisMatrix">A matriz de base inversa.</param> public LinearDecompositionInput( IMathVector <ObjectiveCoeffType>[] initialDecompositionPoints, IMathVector <ObjectiveCoeffType> objectiveFunction, ObjectiveCoeffType cost, LinearConstraintsInput <ConstraintsType> masterConstraints, LinearConstraintsInput <ConstraintsType>[] decomposedConstraints, ISquareMathMatrix <ConstraintsType> inverseBasisMatrix) { this.ValidateArguments( initialDecompositionPoints, objectiveFunction, cost, masterConstraints, decomposedConstraints, inverseBasisMatrix); this.initialDecompositionPoints = initialDecompositionPoints; this.objectiveFunction = objectiveFunction; this.cost = cost; this.masterConstraints = masterConstraints; this.decomposedConstraints = decomposedConstraints; this.inverseBasisMatrix = inverseBasisMatrix; }
/// <summary> /// Valida a integridade dos dados nos argumentos. /// </summary> /// <param name="initialDecompositionPoints">As estimativas iniciais relativas ao problema da decomposição.</param> /// <param name="objectiveFunction">A função objectivo.</param> /// <param name="cost">O custo inicial.</param> /// <param name="masterConstraints">As restrições do problema principal.</param> /// <param name="decomposedConstraints">As restrições dos vários problemas decompostos.</param> /// <param name="inverseBasisMatrix">A matriz de base inversa.</param> private void ValidateArguments( IMathVector <ObjectiveCoeffType>[] initialDecompositionPoints, IMathVector <ObjectiveCoeffType> objectiveFunction, ObjectiveCoeffType cost, LinearConstraintsInput <ConstraintsType> masterConstraints, LinearConstraintsInput <ConstraintsType>[] decomposedConstraints, ISquareMathMatrix <ConstraintsType> inverseBasisMatrix) { if (initialDecompositionPoints == null) { throw new ArgumentNullException("initialDecompositionPoints"); } else if (objectiveFunction == null) { throw new ArgumentNullException("objectiveFunction"); } else if (cost == null) { throw new ArgumentNullException("cost"); } else if (masterConstraints == null) { throw new ArgumentNullException("masterConstraints"); } else if (decomposedConstraints == null) { throw new ArgumentNullException("decomposedConstraints"); } else if (inverseBasisMatrix == null) { throw new ArgumentNullException("inverseBasisMatrix"); } else if (initialDecompositionPoints.Length != decomposedConstraints.Length) { throw new ArgumentException( "The number of initial problem points must match the number of decomposition problem constraints."); } else { var length = decomposedConstraints.Length; for (int i = 0; i < length; ++i) { var currentDecomposedConstraint = decomposedConstraints[i]; var currentPoint = initialDecompositionPoints[i]; if (currentDecomposedConstraint == null) { throw new ArgumentException("Null decomposition constraints aren't allowed."); } else if (currentPoint == null) { throw new ArgumentException("Null initial points aren't allowed."); } else { var constraintColumnsLength = currentDecomposedConstraint.ConstraintsMatrix.GetLength(1); if (initialDecompositionPoints.Length != constraintColumnsLength) { throw new ArgumentException( "The number of initial points coordinates must match the number of columns of the decomposition problem constraints matrix."); } } } } }