Exemplo n.º 1
0
 /// <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;
 }
Exemplo n.º 2
0
 /// <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.");
                 }
             }
         }
     }
 }