Итак, всего один быстрый вопрос - я пытаюсь реализовать в CPLEX проблему SOS типа 1.
Когда я смотрю документацию, я вижу функцию добавления
add(self, type='1', SOS=SparsePair(ind = [0], val = [0.0]), name='')
Adds a special ordered set constraint to the problem.
Когда я смотрю документацию, я понимаю все, кроме val. Моя идея об этой проблеме SOS1 состоит в том, что вы действительно добавляете ограничение (предполагая, что все переменные являются двоичными {0,1}, что сумма всех переменных меньше или равна 1. То есть либо все переменные равны 0 или не более одного 1. Итак, поскольку это сумма, все веса val равны 1? Как бы это было еще? Я упоминаю об этом, потому что я нашел фрагмент исходного кода, который делает эти веса 25,18, как показано ниже
def setproblemdata(p):
p.objective.set_sense(p.objective.sense.maximize)
p.linear_constraints.add(rhs=[20.0, 30.0, 0.0], senses="LLE")
obj = [1.0, 2.0, 3.0, 1.0]
lb = [0.0, 0.0, 0.0, 2.0]
ub = [40.0, cplex.infinity, cplex.infinity, 3.0]
cols = [[[0, 1], [-1.0, 1.0]],
[[0, 1, 2], [1.0, -3.0, 1.0]],
[[0, 1], [1.0, 1.0]],
[[0, 2], [10.0, -3.5]]]
p.variables.add(obj=obj, lb=lb, ub=ub, columns=cols,
types="CIII", names=["0", "1", "2", "3"])
p.SOS.add(type="1", SOS=[["2", "3"], [25.0, 18.0]])
p.order.set([(1, 8, p.order.branch_direction.up),
("3", 7, p.order.branch_direction.down)])
p.order.write("mipex3.ord")
return