0

CPLEX를 사용하여 비 지향성 그래프에 대해 steiner 트리의 한 변형을 사용하고 있습니다. 내 용액에 다차원 결정 변수가 지시 그래프의 사이클을 처리합니다.

이 때문에, 그래프는 방향 그래프로서 표현되고, ( Yuijv 불림) 내 desicion 변수 중 하나의 경로의 방향을 제어한다 :

Yuijv = 1 에지 경우를 (i, j)는 U → i → j → V 방향으로 u에서 v까지의 한 경로에서 사용됩니다.
Yuijv = 0 else. 여기

Yuijv 선언하는 방법이다 (그리고 몇몇 보조 코드) : 난

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

:

//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]; 

하지만 난 값에 액세스하려면이 sintax와 함께 사용하는 경우 이 오류가 발생합니다 :

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

공식 문서 및이 사이트에서이 문제에 대한 도움을 찾을 수 없으며,이 변수에 대한 구현을 다시 정의하기위한 제안을하거나 정말로 제안을 사과합니다.

감사합니다.

답변

0

boolean 유형의 의사 결정 변수에 int 값 0을 할당하려는 것 같습니다. 대신 제약 조건을 추가하여 값을 수정하십시오.

+0

sum (in aristas) yuijv [u, , v]> = xi [u] + xi [v] -1; –

+0

마지막 코멘트를 잊어 버리면 지울 수 없습니다. 위 예제는 실제로 만들어 졌으므로 모든 것을 설명하지 않고 여기에 게시 할 수 있으며 읽기 쉽도록 만들 수 있습니다. 에러가 내 진짜 제한의 하나는이다 : _sum (가장자리에서 ) Yuijv는 [U, , V]> = XI [U] + XI는 [V] -1] _ _xi_ 다른 인 변수 desicion. CPLEX 최적화 스터디 (ide)는 _Yuijv [u, , v] ._ 의 첫 번째 _u_를 강조 표시하고 제안 사항을 보여줍니다. ", v : int>. " 답변 해 주셔서 감사합니다. –

관련 문제