コード例 #1
0
ファイル: Program.cs プロジェクト: badamiak/MO_QAP
        static DataMatrices ReadData(string path)
        {
            int[,] ParseMatrix(int size, IEnumerable <string> rawData)
            {
                int[,] matrix = new int[size, size];

                int x = 0;

                foreach (var line in rawData)
                {
                    var values = line.Split(' ');
                    int y      = 0;
                    foreach (var value in values.Where(v => !string.IsNullOrEmpty(v)))
                    {
                        matrix[x, y] = int.Parse(value);
                        y++;
                    }
                    x++;
                }
                return(matrix);
            }

            var data   = File.ReadAllLines(path).Where(x => !string.IsNullOrEmpty(x)).ToArray();
            var result = new DataMatrices(int.Parse(data[0].Trim()));

            data = data.Skip(1).ToArray();

            var rawMatrixA = data.Take(result.MatricesSize);
            var rawMatrixb = data.Skip(result.MatricesSize);

            result.MatrixA = ParseMatrix(result.MatricesSize, rawMatrixA);
            result.MatrixB = ParseMatrix(result.MatricesSize, rawMatrixb);

            return(result);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: badamiak/MO_QAP
        static float Score <T>(DataMatrices data, IEnumerable <T> permutation)
        {
            var permutationArray = permutation.Cast <int>().Select(x => x - 1).ToArray();
            var score            = 0f;
            var maxIndex         = permutation.Count() - 1;

            foreach (var i in QapMath.Range(0, maxIndex))
            {
                foreach (var j in QapMath.Range(0, maxIndex))
                {
                    score += data.MatrixA[i, j] * data.MatrixB[permutationArray[i], permutationArray[j]];
                }
            }
            return(score);
        }