コード例 #1
0
 private void AssignNextToCurrentIfBecameBetter()
 {
     if (_next.FitnessFuntionValue > _current.FitnessFuntionValue && IsValidDescendant(_next))
     {
         _current = _next;
         ++_successAmount;
     }
 }
コード例 #2
0
        public void AssignDescendant(DescendantFirst descendant)
        {
            var thisParticipant = Scheduler.Participants[descendant.ParticipantId];
            var thisRealization = Scheduler.Realizations[descendant.RealizationId];

            thisRealization.EnrolledParticipantAmount += 1;
            //thisParticipant.declarations.Add(thisRealization.courseTypeId, thisRealization.realizationId);
            thisParticipant.Declarations[thisRealization.CourseTypeId] = thisRealization.RealizationId;
        }
コード例 #3
0
        public void IsValidDescendantTest()
        {
            {
                // Arrange
                var current = new DescendantFirst(3, 3);
                var next    = new DescendantFirst(3, 3);


                // Act

                // Assert
            }
        }
コード例 #4
0
        private void TryGeneratingBetterDescendant()
        {
            for (var i = 0; i < _mIteration; i++)
            {
                _current = new DescendantFirst(RandomInitializer.Rand.Next(Scheduler.ParticipantsAmount),
                                               RandomInitializer.Rand.Next(Scheduler.RealizationsAmount));
                _current.CalculateFitnessFunction();

                if (!IsValidDescendant(_current))
                {
                    _current = null;
                }
            }
        }
コード例 #5
0
        public bool IsValidDescendant(DescendantFirst descendant)
        {
            var thisParticipant = Scheduler.Participants[descendant.ParticipantId];
            var thisRealization = Scheduler.Realizations[descendant.RealizationId];

            if ((!thisParticipant.Declarations.ContainsKey(thisRealization.CourseTypeId)))//Course has already  been chosen
            {
                return(false);
            }

            if (thisParticipant.Declarations[thisRealization.CourseTypeId] != -1)
            {
                return(false);
            }

            if ((thisRealization.MaxParticipantAmount - thisRealization.EnrolledParticipantAmount <= 0))
            {
                return(false);
            }
            // no available seats for realization

            return(true);
        }
コード例 #6
0
 private void GenerateNextDescendant(int newParticipantId, int newRealizationId)
 {
     _next = new DescendantFirst(newParticipantId, newRealizationId);
     _next.CalculateFitnessFunction();
 }