public static NodeServer <NodeType> Create( Vector[] initVectors, int numOfNodes, int vectorLength, GlobalVectorType globalVectorType, ApproximationType approximation, MonitoredFunction monitoredFunction, ResolveNodesFunction <NodeType> resolveNodes, Func <Vector, ConvexBound, int, int, NodeType> createNode) { initVectors = initVectors.Map(v => v.Clone()); var globalVector = globalVectorType.GetValue(initVectors); var(lowerBound, upperBound) = approximation.Calc(monitoredFunction.Function(globalVector)); var upperConvexBound = monitoredFunction.UpperBound(globalVector, upperBound); var lowerConvexBound = monitoredFunction.LowerBound(globalVector, lowerBound); var upperNodes = ArrayUtils.Init(numOfNodes, i => createNode(globalVector.Clone(), upperConvexBound, i, vectorLength)); var lowerNodes = ArrayUtils.Init(numOfNodes, i => createNode(globalVector.Clone(), lowerConvexBound, i, vectorLength)); NodeServer <NodeType> ReCreate(Vector[] newInitVectors) => Create(newInitVectors, numOfNodes, vectorLength, globalVectorType, approximation, monitoredFunction, resolveNodes, createNode); return(new NodeServer <NodeType>(initVectors, numOfNodes, vectorLength, globalVectorType, upperBound, lowerBound, monitoredFunction.Function, approximation, upperNodes, lowerNodes, resolveNodes, ReCreate)); }
public NodeServer(Vector[] nodesVectors, int numOfNodes, int vectorLength, GlobalVectorType globalVectorType, double upperBound, double lowerBound, Func <Vector, double> function, ApproximationType approximation, NodeType[] upperNodes, NodeType[] lowerNodes, ResolveNodesFunction <NodeType> resolveNodes, Func <Vector[], NodeServer <NodeType> > reCreate) : base(nodesVectors, numOfNodes, vectorLength, globalVectorType, upperBound, lowerBound, function, approximation) { UpperNodes = upperNodes; LowerNodes = lowerNodes; ResolveNodes = resolveNodes; ReCreate = reCreate; }