Exemplo n.º 1
0
        private static List <Relative> AddDescendantRelationship(List <Relative> relativesList, int relativeNumber,
                                                                 int coordX, int coordY,
                                                                 bool isFirstIteration, bool isLastIteration,
                                                                 bool descendantOfProband, double probabilityOfNotCreatingNewRelative)
        {
            if (isFirstIteration)
            {
                if (relativesList[0].ChildsList.Count != 0 && random.NextDouble() <= probabilityOfNotCreatingNewRelative)
                {
                    relativesList.Add(relativesList[0].ChildsList[GetNextRandomValue(0, relativesList[0].ChildsList.Count)]);
                }
                else
                {
                    relativesList.Add(new Relative(
                                          relativeNumber,
                                          RelationshipDegreesDictionary[RelationshipDegreesDictionary.First(x => x.Value.X == coordX && x.Value.Y == coordY).Key],
                                          new List <Relative>(),
                                          new List <Relative>()));

                    relativesList[relativesList.Count - 1].ParentsList.Add(relativesList[0]);
                    relativesList[0].ChildsList.Add(relativesList[relativesList.Count - 1]);
                }
            }
            else
            {
                List <Relative> cleanChildsList = relativesList[relativesList.Count - 1].ChildsList.Where(child => child.RelationshipDegree.X != 0).ToList();

                if (((descendantOfProband && relativesList[relativesList.Count - 1].ChildsList.Count != 0) || (!descendantOfProband && cleanChildsList.Count != 0)) &&
                    random.NextDouble() <= probabilityOfNotCreatingNewRelative && !isLastIteration)
                {
                    if (descendantOfProband)
                    {
                        relativesList.Add(relativesList[relativesList.Count - 1].ChildsList[GetNextRandomValue(0, relativesList[relativesList.Count - 1].ChildsList.Count)]);
                    }
                    else
                    {
                        relativesList.Add(cleanChildsList[GetNextRandomValue(0, cleanChildsList.Count)]);
                    }
                }
                else
                {
                    relativesList.Add(new Relative(
                                          relativeNumber,
                                          RelationshipDegreesDictionary[RelationshipDegreesDictionary.First(x => x.Value.X == coordX && x.Value.Y == coordY).Key],
                                          new List <Relative>(),
                                          new List <Relative>()));

                    relativesList[relativesList.Count - 1].ParentsList.Add(relativesList[relativesList.Count - 2]);
                    relativesList[relativesList.Count - 2].ChildsList.Add(relativesList[relativesList.Count - 1]);
                }
            }

            return(relativesList);
        }
Exemplo n.º 2
0
        public static List <Relative> AddParentalRelationship(List <Relative> relativesList, int relativeNumber,
                                                              int coordX, int coordY,
                                                              bool isFirstIteration, bool isLastIteration,
                                                              double probabilityOfNotCreatingNewRelative)
        {
            if (isFirstIteration)
            {
                if (relativesList[0].ParentsList.Count != 0 && random.NextDouble() <= probabilityOfNotCreatingNewRelative)
                {
                    relativesList.Add(relativesList[0].ParentsList[GetNextRandomValue(0, relativesList[0].ParentsList.Count)]);
                }
                else
                {
                    relativesList.Add(new Relative(
                                          relativeNumber,
                                          RelationshipDegreesDictionary[RelationshipDegreesDictionary.First(x => x.Value.X == coordX && x.Value.Y == coordY).Key],
                                          new List <Relative>(),
                                          new List <Relative>()));

                    relativesList[0].ParentsList.Add(relativesList[relativesList.Count - 1]);
                    relativesList[relativesList.Count - 1].ChildsList.Add(relativesList[0]);
                }
            }
            else
            {
                if (relativesList[relativesList.Count - 1].ParentsList.Count != 0 && random.NextDouble() <= probabilityOfNotCreatingNewRelative && !isLastIteration)
                {
                    relativesList.Add(relativesList[relativesList.Count - 1].ParentsList[GetNextRandomValue(0, relativesList[relativesList.Count - 1].ParentsList.Count)]);
                }
                else
                {
                    relativesList.Add(new Relative(
                                          relativeNumber,
                                          RelationshipDegreesDictionary[RelationshipDegreesDictionary.First(x => x.Value.X == coordX && x.Value.Y == coordY).Key],
                                          new List <Relative>(),
                                          new List <Relative>()));

                    relativesList[relativesList.Count - 2].ParentsList.Add(relativesList[relativesList.Count - 1]);
                    relativesList[relativesList.Count - 1].ChildsList.Add(relativesList[relativesList.Count - 2]);
                }
            }

            return(relativesList);
        }