При определении задачи смешанного целочисленного линейного программирования с использованием целлюлозы можно определить sos следующим образом:
x1 = LpVariable('x1', cat = LpInteger)
x2 = LpVariable('x2', cat = LpInteger)
prob.sos1['sos'] = x1 + 2*x2
(«sos» или специально упорядоченный набор - это специальное ограничение, указывающее, что только одна переменная в наборе может быть ненулевой).
Мы видим, что это позволяет указать веса для переменных sos (в данном случае 1,2). Предположительно, они определяют приоритет каждой переменной, то есть, каким переменным разрешить ненулевое значение в первую очередь при ветвлении.
Но как точно определяются веса?
Базовый решатель - coin-or-cbc, и я не смог найти ничего о том, как они используют веса SOS.