如何在具有多个索引/数组的变量中仅循环字典的某些元素?

时间:2019-03-23 21:17:41

标签: python linear-programming pulp

我有一个二元决策变量,它从5个字典(天,时间,球队,月份,体育场)中选取一个元素来为运动队创建最佳时间表。如何在约束中将每个字典中的某些值指定为始终等于1?

本质上,我正在尝试为运动时间表创建约束,该约束已使用目标程序进行了优化。我想写一个约束,以便在x月份和y月份的所有球队在1月8:00仅有1场比赛。

day = ["Mon", "Tue", "Wed"]
time = ["7:00", "8:00", "9:00"]
team = ["Lakers", "Warriors", "Kings"]
month = ["Jan", "Feb", "Mar"]
city = ["LA", "SF", "Sac"]

for i in day:
  for j in time:
    for k in team:
      for l in month:
        for m in city:
          model += z[i,1,k,0,m] <= 1

我希望在最终结果中限制每本词典中的某些元素。

1 个答案:

答案 0 :(得分:0)

首先,我将使用itertools避免循环太嵌套。 然后,在需要的地方用较小的子集替换要迭代的原始数组。这是示例:

$viedeolaenge = $file['playtime_string']; // $videolaenge is now string 00:06
var_dump($viedeolaenge); // string(4) "0:06"
$minuten_sekunden = explode(":",$videolaenge);
var_dump($minuten_sekunden); // array(1) { [0]=> string(0) "" }

您的代码有问题。当您使用“ for x in iterable”时,您将在x中获得该可迭代元素。例如,“ for day”将在第一次迭代中返回“ Mon”,而不是0。 因此,我想说z [i,1,k,0,m]实际上是z [i,“ 8:00”,k,“ Jan”,m]。

如果您确实希望使用索引而不是值,则可以使用range(len(iterable))。 和[1,],[0,]用于过滤值。

什么是模型,什么是z尚不清楚。它们都不像字典(您在标题中引用字典)。您是说标题中的列表吗?还是有一些隐藏的字典?