关于从两个列表(最小值和最大值)中选择最佳选项的建议python

Suggestion on picking the best options of two lists (minimum and maximum )python

我有三个列表,每个列表有 200,000 个项目。标题为 'config' 的第一个列表是配置名称列表(这些是 window 盲配置)。第二个列表具有每个配置的照度性能(相同顺序,意味着 config_a001 产生 350 的照度值)。最后一个列表对每个配置都有一个值(同样的顺序,所以 config_002 的值为 0.24)

config = ['config_a001', 'config_a002', ......]
illuminnace = [350, 376, 260, 500, 450,......]
LUR_value = [0.3,0.24,.7,.1,.....]

我需要选择产生最高照度和最低 LUR 值的最佳 5 种配置。如果这不可能,我需要选择具有最低 LUR 值的最佳 5 个配置,但它们的照度应高于特定阈值,比如 450。

我知道像这样的事情应该使用遗传算法来解决,但我在这方面很有经验,如果有人能提供建议,我将不胜感激。

您可以考虑将数据组织成一个 pandas DataFrame:

import pandas as pd

config = ['config_a001', 'config_a002', 'config_a003', 'config_a004', 'config_a005', 'config_a006']
il = [350, 376, 310, 340, 290, 375]
lur = [0.3, 0.24, 0.21, 0.31, 0.24, 0.28]

创建列表字典

d = {'config': config, 'il': il, 'lur': lur}

从您的字典创建一个 DataFrame 对象

df = pd.DataFrame(d)

使用 sort_values() 并从 config 列切出前 5 个结果:

res = df.sort_values(['il', 'lur'], ascending=[False, True])[:5]['config'].values

这提供了一个带有配置值的 numpy 数组。

list(res)
# Result: ['config_a002', 'config_a006', 'config_a001', 'config_a004', 'config_a003']

给定:

config = ['config_a001', 'config_a002', 'config_a003', 'config_a004','config_a005']
illuminnace = [350, 376, 260, 500, 450]
LUR_value = [0.3,0.24,.7,.1,.3]

如果 'optimization' 最高 illuminnace 最低 LUR_value 您可以将列表压缩在一起以形成数据元组:

>>> list(zip(config,illuminnace,LUR_value))
[('config_a001', 350, 0.3), ('config_a002', 376, 0.24), ('config_a003', 260, 0.7), ('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]

然后使用 key 函数对它们进行排序:

>>> sorted(zip(config,illuminnace,LUR_value),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3), ('config_a002', 376, 0.24), ('config_a001', 350, 0.3), ('config_a003', 260, 0.7)]

如果要过滤,请在 zip 之后但在 sorted 之前添加表达式以根据相关条件进行过滤:

>>> sorted((t for t in zip(config,illuminnace,LUR_value) if t[1]>=450),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]

如果您有更复杂的分组条件,请编写一个自定义的排序键函数来表达它,或者考虑使用 itertools.groupby。您当前的示例数据不够完整,无法举例。