0

I (나는 계수를 편의상 생략) 등혼합 정수 선형 프로그래밍 : 제약 조건 생성 방법은 무엇입니까?

enter image description here

으로 목적 함수를 갖는다.

나는 다음과 같은 제약 intlinprog를 사용하여이 기능을 최소화하려는 :

enter image description here

모든 X의 바이너리

enter image description here

. 이 금액이 4 개 불평등을 초래할 : constaints 매트릭스 내가 수동으로이 행렬을 만들 경우 잘 작동

enter image description here

인 것은 분명하다

enter image description here

. 이제는 내 목적 함수와 제약 조건 (같은 패턴)에서 4 대신 6 또는 8 또는 10 개의 변수가 있다고 가정합니다. MATLAB을 사용하여 이러한 큰 문제에 대해이 제약 조건 행렬을 생성하는 방법은 무엇입니까?

+0

복잡한 모델의 경우 쉽지 않습니다 (예 : [[link] (http://yetanothermathprogrammingconsultant.blogspot.com/2016/10/matlab-vs-gams-integer-programming.html) 참조). –

답변

1

다른 사례를 약간 적어 두는 것이 좋습니다. 따라서 모든 행 합계와 모든 열 합계를 제한하고자하는 것 같습니다.

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 정체성 행렬의를 쌓아 수평 크기의 각 N
: 행의

아래쪽은 다음과 같이 구성

열의 상반부에는 단위 : N-1 행 벡터

  • 블록 대각 행렬 N의 크기의 각

최종 매트릭스는 두 성분의 수직 적층이다

전체 희소 매트릭스 파이썬 예 (미안 여긴 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이됩니다.

+1

우수! 그것은 매력처럼 작동합니다. 감사! –

관련 문제