cplex sos тип 1 добавить

Итак, всего один быстрый вопрос - я пытаюсь реализовать в CPLEX проблему SOS типа 1.

Когда я смотрю документацию, я вижу функцию добавления

add(self, type='1', SOS=SparsePair(ind = [0], val = [0.0]), name='')
Adds a special ordered set constraint to the problem.

найдено здесь https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.7.0/ilog.odms.cplex.help/refpythoncplex/html/cplex._internal._subinterfaces.SOSInterface-class.html#add

Когда я смотрю документацию, я понимаю все, кроме 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

person Eigenvalue    schedule 28.06.2019    source источник


Ответы (1)


Позвольте процитировать CPLEX документация

Членам SOS должны быть присвоены уникальные веса, которые, в свою очередь, определяют порядок переменных в наборе. (Эти уникальные веса также называются значениями ссылочной строки.) Каждый из этих способов объявления членов SOS позволяет вам определять веса.

person Alex Fleischer    schedule 28.06.2019
comment
так что он будет ветвиться, начиная с наименьшего веса до наибольшего веса? - person Eigenvalue; 28.06.2019
comment
Вы могли видеть: Использование весов элементов в специальном упорядоченном наборе (SOS) www-01.ibm.com/support/docview.wss?uid=swg21399945 - person Alex Fleischer; 28.06.2019
comment
Выполняет ли SOS1 в CPLEX sum = 1 или sum ‹= 1. Я бы подумал, что это должна быть сумма ‹= 1, но ваша документация наводит меня на мысль, что это сумма = 1? - person Eigenvalue; 28.06.2019
comment
Hi SOS Тип 1 - это набор переменных, в котором не более одной переменной может быть отличным от нуля. С Уважением . - person Alex Fleischer; 28.06.2019