Переменные 2D решения в PuLP - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в PuLP, и я пытаюсь запустить задачу оптимизации, в которой одна из моих переменных решения - 2D. Я немного смущен тем, как можно объявить переменные 2D-решения как часть plp.LpVariable? На данный момент я объявляю переменную так:

a = { k : plp.LpVariable(name='a', lowBound=np.array([0, 0]), \
                         upBound=np.array([2, 3]), \
                         cat=plp.LpContinuous) for k in range(10)}

Спасибо!

1 Ответ

1 голос
/ 29 мая 2020

Добро пожаловать в SO! То, что вы ищете, - это метод dicts класса LpVariable. Это позволяет вам передавать многомерные индексы для создания набора переменных M x N или M x N x O (et c.).

Его использование показано в примере документации по целлюлозе решение головоломки судоку: https://coin-or.github.io/pulp/CaseStudies/a_sudoku_problem.html?highlight=dicts

И сам метод описан здесь: https://coin-or.github.io/pulp/technical/pulp.html?highlight=dicts#pulp .LpVariable.dicts

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

up_bounds = [2,3]
a = pulp.LpVariable.dicts('a', range(2), lowBound=0)
for i in range(2):
    prob += a[i] <= up_bounds[i]
...