Определение переменной PuLP из словаря - PullRequest
0 голосов
/ 19 марта 2020

Я хочу объявить набор переменных с PuLP, который содержит все возможные комбинации следующих списков:

month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
manufacturer = ['China', 'Mexico', 'Taiwan']
demand = ['London', 'Paris', 'Milan']

Тогда у меня будет словарь (например), как показано ниже: '1.China.London' , '1.China.Paris', ...

Я пытался использовать следующий код, но я не знаю, как сохранить все комбинации.

vlbs = {}
for key in month:
    for kay in manufacturer:
        for eyk in demand:
            vlbs = (str(key)+'.'+str(kay)+'.'+str(eyk))

Во-первых, я не получаю правильно словарь vlbs. И позже:

variables = {var: pl.LpVariable(var, lowBound = 0) for var in vlbs}

Как я могу решить это правильно ??

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете использовать кортеж в качестве словарного ключа. Я думаю, что это делает фильтрацию / поиск проще, чем объединение и разбиение строк.

months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
manufacturers = ['China', 'Mexico', 'Taiwan']
demands = ['London', 'Paris', 'Milan']

var_dict = {}

for month in months:
    for manufacturer in manufacturers:
        for demand in demands:
            combo = (month, manufacturer, demand)
            var_name = '.'.join([str(c) for c in combo])
            var_dict[combo] = LpVariable(var_name, lowBound=0) 

# add constraint for month 1
model += lpSum([k for k in var_dict if k[0] == 1]) <= 50

...