1

pyomo.environ 패키지로 작업하고 있습니다. 나는 http://imgur.com/a/pWJ79과 같은 제약 조건을 추가하려고 시도했다. i와 j는 노드의 인덱스입니다.pyomo 환경에서 제약 조건을 추가했습니다.

node_set에는 총 N0에서 N5 개의 노드가 포함됩니다. Arc_set은 [N1, N2]와 같은 노드 사이에 링크를 저장하는 집합이며 [N1, N1]과 같은 자체 루프 호를 포함하지 않습니다. F 세트가

그래서,이 같은 짓 [, F2, F3 F1]을 포함하지만

def c1_rule(m, j): 
    return sum(m.X[e[0], j, f] for e in m.arc_set if e[1] != 'N0' for f in m.f_set) == 1 
m.c1_cons = pe.Constraint(m.node_set, rule= c1_rule) 

을, 나는 나의 j는 내가 같을 때이 전자 인 오류를 트리거 할 것을 깨달았다 [ 0] 여기서, mX [i, j, k]의 인덱스는 [N1, N1, F1]과 같지 않기 때문에. 하나의 아이디어는 호 세트에 자기 루프 호를 추가하는 것입니다. 이 오류를 피할 수있는 다른 방법이 있습니까?

답변

1

첫째, 경고 : 그렇지 않으면

constraint

, 그것은 그런 식으로 묘사되었을 것이다 : 당신이 보여 제약 X는 [내가, j는, F] 모든 i와 j가 있다고 가정 : 당신이 엄격이 제약 조건을 다음과 같은 경우

constraints

그래서, 당신의 코드가 올바른지, 당신은해야 할 모든 항목을 확인합니다 (포함시 i == j) 매개 변수/변수 X의 EXI에 대한 성. 당신의 제약 규칙에 관계없이 arc_set에 무엇 jf 모든 생성되기 때문에


지금, 당신은 오류가 발생합니다.

m.X[e[0], j, f] 

하는 것 :

그래서 당신이 arc_set에서 [N1, N2를]이있는 경우 일 것이다 변수 e가 [N1, N2] 및 j = N1f = F1 다음과 같은 규칙에 해당된다는 발생 로 번역 : X이 존재하지 않는 모델과 엔트리 X[N1, N1, F1]의 매개 변수 인 경우

m.X[N1, N1, F1] 

이 오류를 트리거 할 수 있습니다.

이이 제약 규칙 목록의 이해에 e[0] != j을 포함하는 것입니다 해결 방법 :

def c1_rule(m, j): 
    return sum(m.X[e[0], j, f] for e in m.arc_set for f in m.f_set 
           if e[1] != 'N0' and e[0] != j) == 1 
m.c1_cons = pe.Constraint(m.node_set, rule= c1_rule)