private TFuzzySet CreatSpeedFuzzySet() { TFuzzySet Result = new TFuzzySet(); Result.Add(new Graphic(LowSpeed, "низкая")); Result.Add(new Graphic(MediumSpeed, "средняя")); Result.Add(new Graphic(FastSpeed, "высокая")); return(Result); }
private TFuzzySet CreatDistanceFuzzySet() { TFuzzySet Result = new TFuzzySet(); Result.Add(new Graphic(DistanceSmall, "близко")); Result.Add(new Graphic(DistanceMiddle, "средне")); Result.Add(new Graphic(DistanceLarge, "далеко")); return(Result); }
public Vector GiveSpeed(int MinSpeed, int MaxSpeed, List <Car> Cars, TFuzzySet SpeedSet, TFuzzySet DistanceSet, List <Rule> Rules) { double NormalizedDist; // Определяем расстояние до ближайшего автомобиля double Distance = DistanceBeforeNextCar(); // Преобразуем расстояние if (Distance == int.MaxValue) { NormalizedDist = 90.0; } else { NormalizedDist = NormalizeDistance(Distance); if (NormalizedDist > 90.0) { NormalizedDist = 90.0; } } // Фаззифицируем расстояние Parameter[] Parameters = DistanceSet.Fuzzy(NormalizedDist); // Выводим скорость по правилам OutWithRules(Rules, Parameters); // Получаем скорость double NormalizedSpeed = SpeedSet.Defuzzy(Parameters); // Преобразуем скорость double Result = UnnormalizedSpeed(NormalizedSpeed, MinSpeed, MaxSpeed); if (Result > Speed) { Result = Speed; } Reorganize(); // Возвращаем скорость return(new Vector(Result, 0)); }