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