Я разрабатываю нечеткую систему для прогнозирования увеличения цены полета в зависимости от расстояния поездки и количества активных пользователей.Таким образом, чем больше число пользователей будет выше, тем больше будет цена.
Для этого я определил Antecents (Входы) & Последовательные (Выходы) :
distance = ctrl.Antecedent(np.arange(1, 20000, 1), 'distance')
users = ctrl.Antecedent(np.arange(0, 50, 1), 'users')
price = ctrl.Consequent(np.arange(0, 10000, 1), 'price')
Я могу автоматически генерировать функции членства следующим образом:
distance.automf(3)
users.automf(3)
price.automf(5)
Но я хотел бы сделать пользовательские функции членства такими:
distance['low'] = fuzz.trimf(distance.universe, [50, 1000, 2000])
distance['medium'] = fuzz.trimf(distance.universe, [2000, 3000, 5000])
distance['high'] = fuzz.trimf(distance.universe, [5000, 10000, 20000])
И аналогичноа также для других.
Но при вычислениях я получаю:
ValueError: Crisp output cannot be calculated, likely because the system is too sparse. Check to make sure this set of input values will activate at least one connected Term in each Antecedent via the current set of Rules.
Полагаю, эта ошибка связана с неправильным выбором значений в пользовательских функциях членства.
Из-за отсутствия достаточного количества примеров в официальной документации я не могу найти основную причину или понять правильную методологию выбора значений x, y, z в функциях членства.
где,x, y, z:
distance['low'] = fuzz.trimf(distance.universe, [x, y, z])
.
.
users['low'] = fuzz.trimf(users.universe, [x, y, z])
.
.
Что мне здесь не хватает?