Exemplo n.º 1
0
 private void readInProblemDefinition(ProblemDefinition pd)
 {
     foreach (var f0 in pd.f)
     {
         Add(f0);
     }
     foreach (var ineq in pd.g)
     {
         Add(ineq);
     }
     foreach (var eq in pd.h)
     {
         Add(eq);
     }
     NumConvergeCriteriaNeeded = pd.NumConvergeCriteriaNeeded;
     if (pd.ConvergenceMethods != null)
     {
         foreach (var cM in pd.ConvergenceMethods)
         {
             Add(cM);
         }
     }
     if (pd.SpaceDescriptor != null)
     {
         Add(pd.SpaceDescriptor);
     }
     if ((pd.xStart != null) && (pd.xStart.GetLength(0) > 0))
     {
         xStart = (double[])pd.xStart.Clone();
         n      = xStart.GetLength(0);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a problem definition object from the details loaded in the
        /// optimization routine. For use in saving the data to XML, etc.
        /// </summary>
        /// <returns>the problem definition</returns>
        internal ProblemDefinition createProblemDefinition()
        {
            var pd = new ProblemDefinition
            {
                ConvergenceMethods        = ConvergenceMethods,
                xStart                    = xStart,
                NumConvergeCriteriaNeeded = NumConvergeCriteriaNeeded,
            };

            foreach (IObjectiveFunction f0 in f)
            {
                pd.f.Add(f0);
            }
            foreach (IEquality eq in h)
            {
                pd.h.Add(eq);
            }
            foreach (IInequality ineq in g)
            {
                if (ineq.GetType() == typeof(lessThanConstant))
                {
                    var ub       = ((lessThanConstant)ineq).constant;
                    var varIndex = ((lessThanConstant)ineq).index;
                    pd.SpaceDescriptor[varIndex].UpperBound = ub;
                }
                else if (ineq.GetType() == typeof(greaterThanConstant))
                {
                    var lb       = ((greaterThanConstant)ineq).constant;
                    var varIndex = ((greaterThanConstant)ineq).index;
                    pd.SpaceDescriptor[varIndex].UpperBound = lb;
                }
                else
                {
                    pd.g.Add(ineq);
                }
            }
            return(pd);
        }