python - 根据python中的条件创建值列表
问题描述
我需要创建一个尊重字典规定的优先关系的工作列表。
dict_preced = {(1, 2): 0, (1, 3): 0, (2, 1): 1, (2, 3): 0, (3, 1): 1, (3, 2): 0}
Where (j1, j2) == 1 means that j1 requires j2, 0 otherwise.
假设我已经有了 start list: j_seq = [3, 2, 1]
,我需要创建一个new_list
其中 j_seq 中的所有值都将尊重优先关系,这意味着在所需的作业之前没有作业正在执行。(即,作业 3 和作业 2 不能在作业 1 之前执行)。
因此,有许多候选列表(即,new_list = [1, 2, 3]
或new_list = [1, 3, 2]
)。如何创建new_list
始终尊重这些优先关系的样本?
当每个值都需要尊重给定条件而不依赖于其他值时,我发现了许多列表理解示例。但是我没有找到任何例子,其中陈述的条件涉及同一列表的两个值。
编辑:我不需要得到所有关于优先约束的排列,一个就足够了。
解决方案
我正在回答我自己的问题,因为我找到了解决这个问题的方法。
当使用短列表时,@jarmod 提出的方法可以很方便。然而,当考虑长列表时,使用他的方法变得不切实际,因为排列的数量上升到 10^18。
对于那些可以从 IBM CPLEX(或其他约束规划求解器)访问 CP 优化器的人,一种可能的替代方法是使用约束传播方法来获取一些有效序列列表(尊重优先约束)。
在我的例子中,我通过 docplex 模块调用了 CP 优化器。您可以在此处查看脚本:https ://github.com/campioni1/CPO_Docplex_precedence_constraints
如果您遇到任何困难,请告诉我,
推荐阅读
- bash - 创建 VirtualBox 对象失败
- python-3.x - 我有 var name 和 var value 的输出组合,如 0= 、 1= 、 10= 等以随机顺序排列,我需要将其排序为 0= ,1= 、 2= 、 3= 等
- android - 如何在 Android 中使用 Retrofit 将复杂数据作为 MultiPart 发布?
- reactjs - 我可以在不违反 React Hooks 规则的情况下解构 React 上下文以在 useEffect 中使用吗?
- batch-file - 将文件从源复制到目标的批处理命令
- html - Angular 性能:DOM 事件导致不必要的函数调用
- excel - Excel过滤多个值
- python - 通过从熊猫中的不同数据框中附加列来创建列
- reactjs - 通过上下文将值从一个组件简单传递到另一个组件
- node.js - 如何阻止用户从同一帐户但不同的选项卡登录两次