Sckikit-Fuzzy 并生成动态 CTRL.Rule()

问题描述 投票:0回答:0

我正在尝试使用 scikit-fuzzy 包创建模糊的 ctrl.ControlSystemSimulation。为此,我基于我的数据库创建了 Antecedents(Antecedents:Luminosité_intérieure 和 Antecedent:Luminosité_intérieure)、Consequent(Consequent:Ouverture)和成员函数。 问题是使用循环动态创建 ctrl.Rule() 。 这是我作为 python 字典的规则:

{'Ouverture:Fermé': [{'Chaud': Antecedent: Température_intérieure,
         'Fort': Antecedent: Luminosité_intérieure},
         {'Doux': Antecedent: Température_intérieure,
         'Fort': Antecedent: Luminosité_intérieure}],
'Ouverture:Mi-Hauteur': [{'Chaud': Antecedent: Température_intérieure,
              'Moyen': Antecedent: Luminosité_intérieure},
              {'Fort': Antecedent: Luminosité_intérieure,
              'Frais': Antecedent: Température_intérieure},
              {'Doux': Antecedent: Température_intérieure,
              'Moyen': Antecedent: Luminosité_intérieure}],
'Ouverture:Ouvert': [{'Froid': Antecedent: Température_intérieure,
          'Sombre': Antecedent: Luminosité_intérieure},
          {'Chaud': Antecedent: Température_intérieure,
          'Sombre': Antecedent: Luminosité_intérieure},
          {'Froid': Antecedent: Température_intérieure,
          'Moyen': Antecedent: Luminosité_intérieure},
          {'Fort': Antecedent: Luminosité_intérieure,
          'Froid': Antecedent: Température_intérieure},
          {'Frais': Antecedent: Température_intérieure,
          'Sombre': Antecedent: Luminosité_intérieure},
          {'Frais': Antecedent: Température_intérieure,
          'Moyen': Antecedent: Luminosité_intérieure},
          {'Doux': Antecedent: Température_intérieure,
          'Sombre': Antecedent: Luminosité_intérieure}]}

地点:

{'Ouverture:Fermé': [{'Chaud': Antecedent: Température_intérieure,
             'Fort': Antecedent: Luminosité_intérieure},
             {'Doux': Antecedent: Température_intérieure,
             'Fort': Antecedent: Luminosité_intérieure}], ...}

意义

Ferme = ctrl.Rule(antecedent=((Température_intérieure['Chaud'] & Luminosité_intérieure['Fort']) |
                              (Température_intérieure['Doux'] & Luminosité_intérieure['Fort'])),
                              consequent=Ouverture['Ferme']

我想知道如何使用 python 代码循环生成这种规则。 非常感谢。

编辑:

好的,所以也许我必须添加更多细节。 我需要将我的字典格式化为 skfuzzy.control.Term / TermAggregate,我真的不明白这个类对象。 但是,昨天我尝试了一些东西,我可以说这个:

使用此功能:

functools.reduce(lambda x, y: x & y, [antecedent[qualificatif] for k2,v2 in elt_list.items()])

我现在可以产生这个很好的输出:

{'Fermé': [Température_intérieure[Chaud] AND Luminosité_intérieure[Fort],
         Température_intérieure[Doux] AND Luminosité_intérieure[Fort]],
'Mi-Hauteur': [Luminosité_intérieure[Moyen] AND Température_intérieure[Chaud],
              Luminosité_intérieure[Fort] AND Température_intérieure[Frais],
              Température_intérieure[Doux] AND Luminosité_intérieure[Moyen]],
'Ouvert': [Température_intérieure[Froid] AND Luminosité_intérieure[Sombre],
          Température_intérieure[Chaud] AND Luminosité_intérieure[Sombre],
          Luminosité_intérieure[Moyen] AND Température_intérieure[Froid],
          Luminosité_intérieure[Fort] AND Température_intérieure[Froid],
          Température_intérieure[Frais] AND Luminosité_intérieure[Sombre],
          Luminosité_intérieure[Moyen] AND Température_intérieure[Frais],
          Température_intérieure[Doux] AND Luminosité_intérieure[Sombre]]}

最后一步是在元素列表之间生成“或”连接,如下所示:

{'Fermé': [Température_intérieure[Chaud] AND Luminosité_intérieure[Fort] OR
             Température_intérieure[Doux] AND Luminosité_intérieure[Fort]]

对于长度为 2 的列表,它适用于此功能:

functools.reduce(lambda x, y: x | y, list_of_rules_by_key)

但是这个产生了这个输出:

{'Fermé': (Température_intérieure[Chaud] AND Luminosité_intérieure[Fort]) OR (Température_intérieure[Doux] AND Luminosité_intérieure[Fort]),
'Mi-Hauteur': ((Luminosité_intérieure[Moyen] AND Température_intérieure[Chaud]) OR (Luminosité_intérieure[Fort] AND Température_intérieure[Frais])) OR (Température_intérieure[Doux] AND Luminosité_intérieure[Moyen]),
'Ouvert': ((((((Température_intérieure[Froid] AND Luminosité_intérieure[Sombre]) OR (Température_intérieure[Chaud] AND Luminosité_intérieure[Sombre])) OR (Luminosité_intérieure[Moyen] AND Température_intérieure[Froid])) OR (Luminosité_intérieure[Fort] AND Température_intérieure[Froid])) OR (Température_intérieure[Frais] AND Luminosité_intérieure[Sombre])) OR (Luminosité_intérieure[Moyen] AND Température_intérieure[Frais])) OR (Température_intérieure[Doux] AND Luminosité_intérieure[Sombre])}

Funtools.reduce 生成此输出语法(基于 https://docs.python.org/fr/3/library/functools.html : reduce(lambda x, y: x | y, [1, 2, 3, 4, 5]) 给出 ((((1|2)|3)|4)|5) 这不是我想要的。 我想要的是 (1 | 2 | 3 | 4 | 5) 其中每个值代表列表的每个元素

非常感谢

python dynamic-programming fuzzy-logic fuzzy skfuzzy
© www.soinside.com 2019 - 2024. All rights reserved.