Пример #1
0
 public int CompareTo(MemoryNetwork <T> other)
 {
     return(Mathf.RoundToInt(other.Fitness - Fitness));
 }
Пример #2
0
        /// <summary>
        /// Transform the current network into a child of multiple other networks
        /// </summary>
        /// <param name="parents"></param>
        public void Transform(List <MemoryNetwork <T> > parents)
        {
            int parentsCount = parents.Count, eventTypesCount = eventTypes.Count,
                inputSize = data.inputSize, similarEventTypesCount;
            MemoryNetwork <T> root = parents[data.random.Next(0, parentsCount)];
            List <EventType>  similarEventTypes = new List <EventType>(parentsCount);
            EventType         eventType, rootEventType;
            Random            random = data.random;

            double[] instance;

            Fitness = 0;

            for (int i = eventTypesCount - 1; i >= 0; i--)
            {
                RemoveEventType(eventTypes[i]);
            }

            eventTypesCount = root.eventTypes.Count;

            for (int i = 0; i < eventTypesCount; i++)
            {
                eventType     = AddEventType();
                rootEventType = root.eventTypes[0];
                similarEventTypes.Clear();

                similarEventTypes.Add(rootEventType);

                // Get all similarly structured EventTypes
                foreach (MemoryNetwork <T> parent in parents)
                {
                    if (parent != root)
                    {
                        foreach (EventType similarEvent in parent.eventTypes)
                        {
                            if (rootEventType.GetOffset(similarEvent.instances[0]) < data.maximumOffset)
                            {
                                similarEventTypes.Add(similarEvent);
                            }
                            break;
                        }
                    }
                }

                similarEventTypesCount = similarEventTypes.Count;

                // Set offset to random in eventtypes
                for (int j = 0; j < inputSize; j++)
                {
                    eventType.offsetMultipliers[j] = similarEventTypes[data.random.Next(0, similarEventTypesCount)].offsetMultipliers[j];
                }

                // Add a single comparable instance
                instance = GetAvailableInstance();

                for (int j = 0; j < inputSize; j++)
                {
                    instance[j] = rootEventType.instances[0][j];
                }

                eventType.Add(instance);
            }
        }