Многомерная переменная решения для обработки циклов в ориентированных графах

Я работаю с одним вариантом дерева Штейнера для неориентированных графов с использованием CPLEX.

В моем решении граф представлен в виде ориентированного графа, и одна из переменных моего решения (называемая Yuijv) управляет направлением пути, поэтому:

Yuijv = 1, если ребро (i,j) используется в одном пути из u в v в направлении U->i->j->V.
Yuijv = 0 иначе.

Вот как объявляется Yuijv (и некоторый вспомогательный код):

//structure
tuple edge {
    int i; //node
    int j; //node
}

tuple path {
    int u;
    edge e;
    int v;
}

setof(path) paths= {<i,<k,l>,j> | i,j in nodes : i!=j, <k,l> in edges: k!=l};

//decicion variable
dvar boolean Yuijv[paths];

Но когда я использую его с этим синтаксисом для доступа к значению:

Yuijv[u,<j,v>,v] = 0;

Я получаю эту ошибку:

Can't use type int for <u:int,a:<i:int,j:int>,v:int>.

При поиске в официальной документации и на этом сайте я не могу найти помощь по этой проблеме, и я действительно ценю некоторые или, может быть, предложения по переопределению реализации для этой переменной.

Спасибо в совете.


person Popper PopperTwo    schedule 22.10.2016    source источник


Ответы (1)


Похоже, вы пытаетесь присвоить значение int 0 переменной решения логического типа. Вместо этого попробуйте добавить ограничение, чтобы зафиксировать значение.

person TimChippingtonDerrick    schedule 23.10.2016
comment
сумма (‹u,i› в аристах) yuijv[u,‹u,i›,v] ›= xi[u] + xi[v] -1; - person Popper PopperTwo; 23.10.2016
comment
Забудьте последний комментарий, я не могу его стереть. Пример, который я привел выше, на самом деле был придуман, поэтому я могу опубликовать его здесь, не объясняя всего и облегчив чтение. Одно из моих реальных ограничений, в котором есть ошибка: sum (‹u, i› по ребрам) Yuijv [u, ‹u, i›, v]› = xi [u] + xi [v] - 1; Где xi — еще одно переменное решение. Студия оптимизации CPLEX (ide) выделяет первый u в Yuijv [u, ‹u, i›, v]. и показывает это предложение: Невозможно использовать тип int for ‹u: int, to: ‹i: int, j: int›, v: int›. Спасибо за ответ! - person Popper PopperTwo; 23.10.2016