VectorSet RecursFill(VectorTable table, int n, int b) { Vector nullVector = new Vector(-1, -1); VectorSet nullVectorSet = new VectorSet(nullVector); if ((table[n][b][0].X != nullVectorSet[0].X) && (table[n][b][0].Y != nullVectorSet[0].Y)) { return(table[n][b]); } else { VectorSet tmpVectorSet = new VectorSet(); VectorSet tmpVectorSet2 = new VectorSet(); tmpVectorSet.Set(RecursFill(table, n - 1, b)); tmpVectorSet2.Set(GetPrevious(table, b, n)); foreach (Vector vect in tmpVectorSet2) { tmpVectorSet.Add(vect); } VectorSet filtered = new VectorSet(); filtered.Set(VectorsFilter(tmpVectorSet)); table[n][b].Set(filtered); return(table[n][b]); } }
VectorSet GetPrevious(VectorTable table, int x, int y) { Vector zeroVector = new Vector(0, 0); VectorSet zeroVectorSet = new VectorSet(zeroVector); if (x - task.LimitationCoefficients[y] >= 0) { Vector retVector = new Vector(task.FirstCriterion[y], task.SecondCriterion[y]); VectorSet recurs = new VectorSet(); recurs.Set(RecursFill(table, y - 1, x - task.LimitationCoefficients[y])); return(VectorsSum(recurs, retVector)); } else { return(zeroVectorSet); } }
public override void GlobalSetup() { this.regularStringSerializer = FlatBufferSerializer.Default.Compile <VectorTable <string> >(); this.sharedStringSerializer = FlatBufferSerializer.Default.Compile <VectorTable <SharedString> >() .WithSettings(new SerializerSettings { SharedStringReaderFactory = () => SharedStringReader.Create(this.CacheSize), SharedStringWriterFactory = () => new SharedStringWriter(this.CacheSize), }); this.sharedStringThreadSafeSerializer = FlatBufferSerializer.Default.Compile <VectorTable <SharedString> >() .WithSettings(new SerializerSettings { SharedStringReaderFactory = () => SharedStringReader.CreateThreadSafe(this.CacheSize), SharedStringWriterFactory = () => new SharedStringWriter(this.CacheSize), }); Random random = new Random(); List <string> guids = Enumerable.Range(0, this.VectorLength) .Select(i => Guid.NewGuid().ToString()).ToList(); List <string> randomGuids = Enumerable.Range(0, this.VectorLength) .Select(i => guids[random.Next(0, guids.Count)]).ToList(); List <string> guassianGuids = Enumerable.Range(0, this.VectorLength) .Select(i => guids[NextGaussianInt(random, 0, guids.Count - 1)]).ToList(); nonSharedStringVector = new VectorTable <string> { Vector = randomGuids.ToList() }; randomSharedStringVector = new VectorTable <SharedString> { Vector = randomGuids.Select(SharedString.Create).ToList() }; nonRandomSharedStringVector = new VectorTable <SharedString> { Vector = guassianGuids.Select(SharedString.Create).ToList() }; int nonSharedSize = this.Serialize_RandomStringVector_WithRegularString(); int cacheSize = this.Serialize_NonRandomStringVector_WithSharing(); Console.WriteLine($"NonSharedSize = {nonSharedSize}"); Console.WriteLine($"DirectMapSize = {cacheSize}"); }
public void Run(ref VectorTable vectorsTable, ref SigmaTable sigmaTable, ref VectorSet nonDominatedVectors) { Vector nullVector = new Vector(-1, -1); Vector zeroVector = new Vector(0, 0); VectorSet nullVectorSet = new VectorSet(nullVector); VectorSet zeroVectorSet = new VectorSet(zeroVector); //prepare table for (int i = 0; i < task.Dimension; i++) { Row nullRow = new Row(); for (int j = 0; j < task.Limit; j++) { nullRow.Add(new VectorSet(new Vector(-1, -1))); } vectorsTable.Add(nullRow); } for (int i = 0; i < task.Limit; i++) { if (task.LimitationCoefficients[0] <= i + 1) { Vector tmpVector = new Vector(task.FirstCriterion[0], task.SecondCriterion[0]); VectorSet tmpVectorSet = new VectorSet(tmpVector); vectorsTable[0][i].Set(tmpVectorSet); } else { vectorsTable[0][i].Set(new VectorSet(new Vector(0, 0))); } } //fill table RecursFill(vectorsTable, task.Dimension - 1, task.Limit - 1); nonDominatedVectors.Set(vectorsTable[task.Dimension - 1][task.Limit - 1]); //fill sigma-table for (int i = 0; i < task.Dimension; i++) { for (int j = 0; j < task.Limit; j++) { if ((vectorsTable[i][j][0].X != zeroVectorSet[0].X) && (vectorsTable[i][j][0].Y != zeroVectorSet[0].Y) && (vectorsTable[i][j][0].X != nullVectorSet[0].X) && (vectorsTable[i][j][0].Y != nullVectorSet[0].Y)) { for (int k = 0; k < vectorsTable[i][j].Count; k++) { Sigma newSigma = new Sigma(vectorsTable[i][j][k], i + 1, j + 1); if (newSigma.Vector.X != 0 || newSigma.Vector.Y != 0) //check not empty { bool notExist = true; foreach (Sigma oldSigma in sigmaTable) { if ((oldSigma.Vector.X == newSigma.Vector.X) && (oldSigma.Vector.Y == newSigma.Vector.Y)) { notExist = false; } } if (notExist) { sigmaTable.Add(newSigma); } } } } } } }