У меня проблема с линейным программированием, когда я пытаюсь найти оптимальный набор инвестиций для максимизации чистой приведенной стоимости с учетом бюджетных ограничений. Большинство из этих инвестиционных решений являются целочисленными (0/1), но некоторые из них могут быть частично профинансированы (непрерывно между 0 и 1). Я использую PuLP в Python и установил решения в качестве переменной словаря x, вместо того, чтобы иметь другую переменную, соответствующую решению для каждой переменной. Я не уверен, как назначить категории для x с помощью LpVariable.dicts, чтобы категория для целочисленных переменных была Integer, а для частично финансируемых переменных - Continuous.
У меня есть словарь целочисленных / непрерывных строк, сохраненных как переменная 'types', и переменная 'items', содержащая ключи словаря.
# Define dictionary keys
gc1=dict(zip(data['Investment ID'], data['Cost']))
items = list(gc1.keys())
# Define variable types
types=dict(zip(data['Investment ID'], np.where(data['Partial']==1, 'Continuous', 'Integer')))
# Define lp variable
x = LpVariable.dicts('x', items, lowBound=0, upBound=1, cat=types)
Оптимизация проходит успешно, однако некоторые решения, которые должны быть целочисленными (0/1), являются непрерывными.