public byte[] Call(byte[] memento) { while (true) { if (_controlBroadcastReceiver.Receive() == ControlMessage.STOP) { break; } Centroids centroids = _dataBroadcastReceiver.Receive(); // we compute the loss here before data is relabled, this does not reflect the latest clustering result at the end of current iteration, // but it will save another round of group communications in each iteration _logger.Log(Level.Info, "Received centroids from master: " + centroids); _dataPartition.LabelData(centroids); ProcessedResults partialMeans = new ProcessedResults(ComputePartialMeans(), ComputeLossFunction(centroids, _dataPartition.DataVectors)); _logger.Log(Level.Info, "Sending partial means: " + partialMeans); _partialMeansSender.Send(partialMeans); } return(null); }
public byte[] CallWithWritingToFileSystem(byte[] memento) { string centroidFile = Path.Combine(_kMeansExecutionDirectory, Constants.CentroidsFile); _centroids = new Centroids(DataPartitionCache.ReadDataFile(centroidFile)); _dataPartition.LabelData(_centroids); _partialMeans = ComputePartialMeans(); // should be replaced with Group Communication using (StreamWriter writer = new StreamWriter( File.OpenWrite(Path.Combine(_kMeansExecutionDirectory, Constants.DataDirectory, Constants.PartialMeanFilePrefix + _dataPartition.Partition)))) { for (int i = 0; i < _partialMeans.Count; i++) { writer.WriteLine(_partialMeans[i].ToString()); } writer.Close(); } return(null); }