다른 사례를 약간 적어 두는 것이 좋습니다. 따라서 모든 행 합계와 모든 열 합계를 제한하고자하는 것 같습니다.
N = 3 인 경우, 9 개의 변수가 있습니다. 여기에는 정사각형으로 가정하고 완전한 정보를 제공하지 않았습니다.
꽤 일반의
x00 x01 x02 | x10 x11 x12 | x20 x21 x22
---------------------------------------
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
:
x00 x01 x02
x10 x11 x12
x20 x21 x22
이제 제약 매트릭스처럼 보인다. matlab의 행렬 생성 함수를 확인하지 않아도됩니다.슬프게도 나는 MATLAB 사용자의 많은 아니지만 :
: 행의
아래쪽은 다음과 같이 구성
열의 상반부에는 단위 : N-1 행 벡터
최종 매트릭스는 두 성분의 수직 적층이다
전체 희소 매트릭스 파이썬 예 (미안 여긴 MATLAB; 같을 것이다 더 명확하게하기 위해) : 1 매핑 :하지만 거의 1이 있어야
import numpy as np
import scipy.sparse as sp
N = 3
component_a = sp.hstack([sp.eye(N) for i in range(N)])
row_full_1 = sp.csr_matrix(np.ones(N))
component_b = sp.block_diag([row_full_1 for i in range(N)]) # matlab: blkdiag?
matrix = sp.vstack((component_b, component_a))
print(matrix.todense())
출력 :
이 [[ 1. 1. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 1. 1.]
[ 1. 0. 0. 1. 0. 0. 1. 0. 0.]
[ 0. 1. 0. 0. 1. 0. 0. 1. 0.]
[ 0. 0. 1. 0. 0. 1. 0. 0. 1.]]
비고 :N
에 따라 사용에 대해 생각해야 고밀도 또는 희소 행렬. N
이 주어지면 행렬에있는 0이 아닌 비율은 1/N
이됩니다.
복잡한 모델의 경우 쉽지 않습니다 (예 : [[link] (http://yetanothermathprogrammingconsultant.blogspot.com/2016/10/matlab-vs-gams-integer-programming.html) 참조). –