내 모델을 gurobipy로 코딩 했으므로 제약 조건 및 비용 벡터의 행렬을 얻고 싶습니다. 액세스 할 수있는 방법이 있습니까?gurobipy에서 행렬 형식으로 제약 조건 가져 오기
답변
파이썬 API에서 Gurobi 모델의 행렬 계수를 구하는 함수는 하나도 없지만 직접 작성하는 것은 어렵지 않습니다.
변수 및 제약 조건 목록을 갖는 것이 편리합니다. 당신이 변수 m
에서 gurobi 모델을 사용하는 경우에는
dvars = m.getVars()
constrs = m.getConstrs()
당신에게 변수와 제약의 목록을 제공합니다. 그런 다음 m.getAttr을 사용하여 변수와 관련된 속성을 검색 할 수 있습니다. 목적 함수의 계수를 얻으려면, 당신은이 모델의 각 변수에 대해 당신에게 목적 계수의 목록을 제공합니다
obj_coeffs = m.getAttr('Obj', dvars)
'의 Obj'속성 쿼리합니다. 제약 조건 행렬에 대해서는 아마도 nonzeros 만 저장하려고 할 것입니다. 난 그냥 COOrdinate 형식
- 행 인덱스
- 열 인덱스
- 계수
Gurobi 파이썬에서 각 변수와 제약 객체가 인덱스가에 저장할 수 있습니다. 난 그냥 인덱스
var_index = {v: i for i, v in enumerate(dvars)}
constr_index= {c: i for i, c in enumerate(constrs)}
constrs
목록에있는 각 제약 객체 모델의 제약에 해당 할 개체를 매핑 사전을 만들 것이다. 좌측 식 - - 센스 (< = ==> =) - 각 제약이 포함 제약 행렬
상수 오른쪽 측면에는 좌측을 원한다. 모델의 getRow
메서드로 얻을 수있는 LinExpr
개체로 표시됩니다. Gurobi 6.x에서 현재로, 열 인덱스, 계수 튜플의 목록을 획득하는 행렬을 얻으려면 다음
def get_expr_coos(expr, var_indices):
for i in range(expr.size()):
dvar = expr.getVar(i)
yield expr.getCoeff(i), var_indices[dvar]
같은 기능이 필요합니다, 당신은 모든 제한 조건에 대해이 기능을 적용해야합니다.
def get_matrix_coo(m):
dvars = m.getVars()
constrs = m.getConstrs()
var_indices = {v: i for i, v in enumerate(dvars)}
for row_idx, constr in enumerate(constrs):
for coeff, col_idx in get_expr_cos(m.getRow(constr), var_indices):
yield row_idx, col_idx, coeff
이 기능을 사용하면이 구조에서을 팬더 dataframe
nzs = pd.DataFrame(get_matrix_coos(m),
columns=['row_idx', 'col_idx', 'coeff'])
같은 구조로 행렬을 저장할 수 있습니다, 당신은 제로가 아닌 패턴의 기본 플롯을 할 수 있습니다. miplib aflow40b 벤치 마크 문제의 문제점 사용.
import matplotlib.pyplot as plt
import pandas as pd
import gurobipy as grb
m = grb.read("miplib/instances/miplib2010/aflow40b.mps.gz")
nzs = pd.DataFrame(get_matrix_coo(m),
columns=['row_idx', 'col_idx', 'coeff'])
plt.scatter(nzs.col_idx, nzs.row_idx,
marker='.', lw=0)
- 1. 제약 조건 이름으로 테이블 이름 가져 오기
- 2. Java 스윙의 구성 요소에 대한 레이아웃 제약 조건 가져 오기
- 3. Java의 액세스 테이블에서 모든 제약 조건 이름 가져 오기
- 4. 조건부 제약 조건 또는 형식 제약 조건
- 5. Yii 가져 오기 조건
- 6. WebRTC - Chrome에서 '잘못된 제약 조건 객체'가져 오기
- 7. Excel에서 행렬 데이터 가져 오기
- 8. Mathematica와 Maple로 행렬 가져 오기
- 9. Redshift - 제약 조건 추출
- 10. MyISAM의 제약 조건과 같은 제약 제약 조건
- 11. 두 개의 변환 행렬 (XNA) 사이에서 회전 행렬 가져 오기
- 12. 동적 레이아웃 제약 조건?
- 13. 오브젝트를 i18n 형식으로 가져 오기
- 14. 모노 형식으로 파일 가져 오기
- 15. 형식으로 어린이 오류 가져 오기
- 16. ProtocolBuffer 형식으로 데이터 가져 오기
- 17. 데이터를 행렬 형식으로 변환
- 18. 큰 행렬 가져 오기 : 전체 또는 열 가져 오기? - MATLAB
- 19. 제네릭 규칙과 타입 제약 조건
- 20. Laravel에서 "무결성 제약 위반 : 1452"가져 오기
- 21. 제네릭에 대한 제약 조건 유형 C# - 여러 제약 조건
- 22. 무결성 제약 조건 위반 : NOT NULL 검사 제약 조건
- 23. 업데이트시 제약 조건 위반
- 24. Java에서 프로그래밍하는 제약 조건
- 25. 제약 조건 유효성 검사
- 26. FOREIGN_KEY 제약 조건 예외
- 27. SQL 제약 조건 질문
- 28. 그룹에 대한 제약 조건
- 29. 날짜에 제약 조건 확인
- 30. 참조 제약 조건 "FK__tbl8_update__HID__55F4C372"
당신은 목적 함수와 제약 조건을 제공 할 수 있습니까? for 변수를 사용하면 for 루프를 사용하여 model.getVars를 반복하여 모든 제약 조건을 얻을 수 있다고 생각합니다. 모델을 제공하면 모든 데이터를 모델에서 가져올 수 있으므로 자세한 출력을 제공 할 수 있습니다. – sb0709