cplex sos type 1 add - PullRequest
       55

cplex sos type 1 add

1 голос
/ 28 июня 2019

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

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

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

1 Ответ

0 голосов
/ 28 июня 2019

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

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

...