Как зациклить только определенные элементы словаря в переменной с несколькими индексами / массивами? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть двоичная переменная решения, которая берет один элемент из 5 словарей (день, время, команда, месяц, стадион), чтобы создать оптимальное расписание для спортивной команды. Как указать определенные значения в каждом словаре, чтобы они всегда были равны 1 в ограничениях?

По сути, я пытаюсь создать ограничения для спортивного расписания, которое оптимизируется с помощью целевой программы. Я хочу написать ограничение, чтобы в 8:00 в январе была только одна игра для всех команд в городе x и дне y.

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 голосов
/ 24 марта 2019

Прежде всего, я бы использовал itertools, чтобы избежать слишком частого размещения моих циклов.Затем я заменяю исходные массивы, которые я перебираю, меньшими подмножествами, где это необходимо.Вот пример:

import itertools

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

time_filtered = ["8:00", ]
month_filtered = ["Jan", ]

for i, j, k, l, m in itertools.product(
                        day, time_filtered, team, month_filtered, city):
    model += z[i,j,k,l,m] <= 0

Проблема с вашим кодом.когда вы используете «для x в итерируемом», вы получаете элементы этого итерируемого в x.Например, «for i in day» вернул бы «Mon» на первой итерации, а не 0. Итак, я бы сказал, что z [i, 1, k, 0, m] на самом деле z [i, «8:00»,k, "Jan", m].

Если вы хотите иметь индексы вместо значений, вы можете использовать range (len (iterable)).и [1,], [0,] для отфильтрованных значений.

что такое модель и что такое z, неясно из вашего кода.Ни один из них не похож на словари (вы ссылаетесь на словарь в заголовке).Вы имеете в виду списки в шапке?или есть какой-то скрытый дикт?? 1008 *

...