如何将多值真值表转换为 if 条件或表达式

How to convert multi-valued truth table to if-conditions or expressions

提问人:Saif 提问时间:10/12/2023 更新时间:10/12/2023 访问量:56

问:

我有一张这样的表:

Location    Weather Temperature Time of Day Activity
Indoors Sunny   Hot Morning Reading
Indoors Sunny   Hot Evening Watching TV
Indoors Sunny   Cool    Morning Reading
Indoors Sunny   Cool    Evening Watching TV
Indoors Rainy   Hot Morning Reading
Indoors Rainy   Hot Evening Watching TV
Indoors Rainy   Cool    Morning Reading
Indoors Rainy   Cool    Evening Watching TV
Outdoors    Sunny   Hot Morning Gardening
Outdoors    Sunny   Hot Evening Barbecue
Outdoors    Sunny   Cool    Morning Playing Sports
Outdoors    Sunny   Cool    Evening Barbecue
Outdoors    Rainy   Hot Morning Shopping
Outdoors    Rainy   Hot Evening Barbecue
Outdoors    Rainy   Cool    Morning Shopping
Outdoors    Rainy   Cool    Evening Barbecue
None    Sunny   Hot Morning Reading
None    Sunny   Hot Evening Barbecue
None    Sunny   Cool    Morning Reading
None    Sunny   Cool    Evening Shopping
None    Rainy   Hot Morning Reading
None    Rainy   Hot Evening Barbecue
None    Rainy   Cool    Morning Shopping
None    Rainy   Cool    Evening Shopping

在此表中,每个输入(如“位置”、“天气”、“温度”和“一天中的时间”)只能具有特定值。例如,“位置”只能是以下选项之一:室内、室外或无。该表包括这些输入值的所有可能组合的行。

我知道如何为布尔真值表创建函数,但我正在寻找有关处理非布尔真值表(如此)的指导。我想基于此表创建一个 Python 函数,该函数采用这些特定的输入条件并生成相应的“活动”作为输出。该函数应该是高效的,没有冗余代码或条件。有没有一种简单的方法、一种算法或一种工具可以帮助我把这个表变成一个 Python 函数?我正在寻找一些指导来自己创建它。

Python 算法 Karnaugh-Map

评论

0赞 AlpacaMax 10/12/2023
是什么阻止你只是将这个表存储为字典,然后简单地查找这个表?
1赞 Matt Timmermans 10/12/2023
en.wikipedia.org/wiki/ID3_algorithm
0赞 Saif 10/12/2023
@AlpacaMax 有效的解决方案,但是当可以通过几个输入确定输出时,它可能需要存储许多值。简单来说,如果第一列是影响输出的唯一变量,则可以省略其他列。如果存在非随机逻辑,则会将表达式简化为只需进行几次检查。但是,为了可读性,我会避免这样做。
0赞 user3386109 10/12/2023
如果要手动进行转换,第一步是按 (稳定)对列表进行排序。然后进行 Karnaugh 消除,例如 两者都映射到相同的活动,因此它们可以组合在一起,其中 X 表示“不在乎”。ActivityIndoors Sunny Hot EveningIndoors Sunny Cool EveningIndoors Sunny X Evening
0赞 AlpacaMax 10/13/2023
@Saif 另一种选择是将此表存储在数据库中,然后只查询数据库。这样可以避免将表存储在内存中,并允许您在将来更新真值表。

答: 暂无答案