public static void runSynchronousAnalysisForTestDataListWithWeights(ref List <TestDataAndFields> listOfTestDataAndFields, ref DMU.Math.Matrix weightsMatrix, bool isWeightsMatrixSymetric = true, List <PointAnalysisResult> pointAnalysisResults = null) { for (int j = 0; j < listOfTestDataAndFields.Count; j++) { TestDataAndFields currentTestDataAndFields = listOfTestDataAndFields[j]; cleanResultDataStructures(ref currentTestDataAndFields); for (int i = 0; i < 8; i++) { DMU.Math.Matrix previousStepMatrix = currentTestDataAndFields.currentValue.Clone(); SingleIterationResult iterationResult = new SingleIterationResult(); currentTestDataAndFields.currentValue = DMU.Math.Matrix.Multiply(weightsMatrix, currentTestDataAndFields.currentValue); iterationResult.matrixResult = DMU.Math.Matrix.Add(currentTestDataAndFields.currentValue, matrixI); currentTestDataAndFields.currentValue = currentTestDataAndFields.currentValue.ToBiPolar(); iterationResult.matrixResultBiPolar = currentTestDataAndFields.currentValue; iterationResult.energy = calculateEnergySynchronous(weightsMatrix, currentTestDataAndFields.currentValue, previousStepMatrix, matrixI); currentTestDataAndFields.iterationHistory.Add(iterationResult); if (previousStepMatrix.Equals(iterationResult.matrixResultBiPolar)) { if (i == 0) { currentTestDataAndFields.resultType = ResultType.Static; } else { currentTestDataAndFields.resultType = ResultType.GoesToPoint; } LayoutGenerationHelpers.setMatrixValuesToListOfLabels(iterationResult.matrixResultBiPolar, currentTestDataAndFields.resultValueLabels); break; } if (isWeightsMatrixSymetric && i != 0) { double previousStepEnergy = currentTestDataAndFields.iterationHistory[i - 1].energy; if (previousStepEnergy == iterationResult.energy) { if (currentTestDataAndFields.startingValue.Equals(currentTestDataAndFields.currentValue)) { currentTestDataAndFields.resultType = ResultType.CreatesCycle; } else { currentTestDataAndFields.resultType = ResultType.GoesToCycle; } LayoutGenerationHelpers.setMatrixValuesToListOfLabels(iterationResult.matrixResultBiPolar, currentTestDataAndFields.resultValueLabels); if (currentTestDataAndFields.iterationHistory.Count != 1) { currentTestDataAndFields.foundPattern.Add(currentTestDataAndFields.iterationHistory[currentTestDataAndFields.iterationHistory.Count - 2]); } else { SingleIterationResult initialValue = new SingleIterationResult(); initialValue.matrixResultBiPolar = currentTestDataAndFields.startingValue; currentTestDataAndFields.foundPattern.Add(initialValue); } currentTestDataAndFields.foundPattern.Add(currentTestDataAndFields.iterationHistory[currentTestDataAndFields.iterationHistory.Count - 1]); break; } } if (i == 7) { LayoutGenerationHelpers.setMatrixValuesToListOfLabels(iterationResult.matrixResultBiPolar, currentTestDataAndFields.resultValueLabels); } currentTestDataAndFields.currentValue = iterationResult.matrixResultBiPolar; } if (pointAnalysisResults != null) { fillPointAnalysisData(ref pointAnalysisResults, currentTestDataAndFields.resultType, j); } currentTestDataAndFields.resultLabel.Content = DataConverters.resultTypeToString(currentTestDataAndFields.resultType); } }