소플렉스 (S순차o객체 지향 시뮬레이션플렉스)는 원시 및 이중 수정 심플렉스 알고리즘의 고급 구현을 기반으로 하는 선형 계획법 문제(LP)를 해결하기 위한 최적화 패키지입니다. SoPlex는 Zuse-Institute Berlin에서 개발되었습니다.
더 자세한 정보는 [를 참조하세요.73, 126, 87, 88, 74, 203] 및SoPlex 웹사이트.
사용법
SOPLEX 사용을 지정하기 위해 무료 슬롯 프로그램 내에서 다음 명령문을 사용할 수 있습니다.
옵션 LP = SOPLEX; 또는 RMIP
위 문은 Solve 문 앞에 나타나야 합니다. 무료 슬롯 설치 중에 SoPlex가 기본 솔버로 지정된 경우 위의 설명은 필요하지 않습니다.
SoPlex 옵션 사양
무료 슬롯/SoPlex는 무료 슬롯 매개변수를 지원합니다레스림그리고iterlim.
반복 제한 없이 실행되도록 허용하기 위해(SoPlex 기본값) 무료 슬롯/SoPlex 링크는 무료 슬롯 옵션 설정을 전달하지 않습니다.iterlim2147483647로.
무료 슬롯 옵션 설정정수10이 아닌 값으로 설정하면 자세한 솔루션 통계를 로그에 쓸 수 있습니다.
무료 슬롯 옵션 설정정수30이 아닌 값으로 설정하면 솔루션 프로세스를 시작하기 전에 모델 인스턴스를 LP 또는 MPS 형식의 파일에 기록하게 됩니다(정수3=1MPS 파일을 작성합니다.정수3=2LP 파일을 작성합니다.정수3=4SoPlex 상태 파일(.mps, .bas, .set)을 작성합니다. 여러 파일을 작성하려면 이 값을 합산하세요.) 출력 파일의 이름은 확장자를 가진 무료 슬롯 모델 파일의 이름으로 선택됩니다..gms교체되었습니다. 무료 슬롯 옵션 설정정수20이 아닌 값으로 설정하면 LP 또는 MPS 파일을 작성할 때 변수 및 방정식 이름을 사용할 수 있습니다. 이러한 옵션은 디버깅 목적으로 유용할 수 있습니다.
옵션은 SoPlex 옵션 파일로 지정할 수 있습니다. SoPlex 옵션 파일은 한 줄에 하나의 옵션 또는 설명으로 구성됩니다. 파운드 기호(#)을 줄 시작 부분에 추가하면 전체 줄이 무시됩니다. 그렇지 않으면 해당 줄은 등호()로 구분된 옵션 이름과 값으로 해석됩니다.=) 및 임의의 공백(공백 또는 탭).
soplex.opt 파일의 작은 예는 다음과 같습니다:
bool:rowboundflips = true 정수:알고리즘 = 0 진짜:축제 = 1e-5
무료 슬롯/SoPlex는 행 표현에도 바운드 뒤집기를 사용하고 원시 심플렉스를 사용하며 1e-5의 원시 실현 가능성 공차를 사용합니다.
SoPlex 옵션 목록
다음에서는 모든 SoPlex 옵션의 자세한 목록을 제공합니다.
| 옵션 | 설명 | 기본값 |
|---|---|---|
| bool:acceptcycling | 반복적 개선 중에 사이클링 솔루션을 허용해야 합니까? 범위: 부울 | 0 |
| bool:ensureray | 타당성 없음/무한성에 대한 증거(광선)를 얻기 위해 원래 문제를 다시 최적화하시겠습니까? 범위: 부울 | 0 |
| bool:forcebasic | 최적의 솔루션이 기본 솔루션임을 강제하려고 시도합니다 범위: 부울 | 0 |
| bool:완전 교란 | 섭동을 문제 전체에 적용해야 합니까? 범위: 부울 | 0 |
| bool:리프팅 | 0이 아닌 행렬 계수의 범위를 줄이기 위해 리프팅을 사용해야 합니까? 범위: 부울 | 0 |
| bool:지속적인 크기 조정 | 지속적인 확장을 사용해야 합니까? 범위: 부울 | 1 |
| bool:powerscaling | 2의 거듭제곱으로 반복적으로 개선하기 위한 라운드 배율 인수? 범위: 부울 | 1 |
| bool:rowboundflips | 행 표현에도 바운드 뒤집기를 사용하시겠습니까? 범위: 부울 | 0 |
| bool:simplifier_enable_domcol | PaPILO에서 사전 해결사 DominatingCols 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_dualfix | PaPILO에서 프리솔버 DualFix 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_fixcontinuous | PaPILO에서 프리솔버 FixContinuous 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_parallelcols | PaPILO에서 프리솔버 ParallelColDetection 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_parallelrows | PaPILO에서 프리솔버 ParallelRowDetection 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_propagation | PaPILO에서 프리솔버 ConstraintPropagation 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_singletoncols | PaPILO에서 프리솔버 SingletonCols 활성화 범위: 부울 | 1 |
| bool:simplifier_enable_stuffing | PaPILO에서 Presolver SingletonStuffing 활성화 범위: 부울 | 1 |
| bool:testdualinf | 원문제 해결이 불가능하더라도 쌍대 해를 반환하려고 시도하려면 쌍대 불가능성을 테스트해야 합니까? 범위: 부울 | 0 |
| int:알고리즘 | 알고리즘 유형(0 - 원시, 1 - 이중) 범위: 0, ..., 1 | 1 |
| int:displayfreq | 표시 빈도 범위: 1, ..., 무한대 | 200 |
| int:factor_update_max | 새 분해가 없는 최대 LU 업데이트 수(0 - 자동) 범위: 0, ..., 무한대 | 0 |
| int:factor_update_type | LU 업데이트 유형(0 - eta 업데이트, 1 - Forrest-Tomlin 업데이트) 범위: 0, ..., 1 | 1 |
| int:초과가격 | 초저밀도 가격 책정 모드(0 - 끄기, 1 - 자동, 2 - 항상) 범위: 0, ..., 2 | 1 |
| int:iterlimit | 반복 제한(-1 - 제한 없음) 범위: -1, ..., 무한대 | 무료 슬롯 iterlim |
| int:leastsq_maxrounds | 최소 제곱 스케일링에서 공액 기울기 반복의 최대 수 범위: 0, ..., 무한대 | 50 |
| 정수:가격 책정자 | 가격 책정 방법(0 - 자동, 1 - dantzig, 2 - parmult, 3 - devex, 4 - Quicksteep, 5 - 가파른) 범위: 0, ..., 5 | 0 |
| int:printbasismetric | 해결 중 기본 측정항목 인쇄(-1 - 끄기, 0 - 조건 추정, 1 - 추적, 2 - 행렬식, 3 - 조건) 범위: -1, ..., 3 | -1 |
| int:ratiotester | 비율 테스트 방법(0 - 교과서, 1 - 해리스, 2 - 빠름, 3 - 바운드플리핑) 범위: 0, ..., 3 | 3 |
| int:reflimit | 정밀도 제한(-1 - 제한 없음) 범위: -1, ..., 무한대 | -1 |
| int:표현 | 계산 형식 유형(0 - 자동, 1 - 열 표현, 2 - 행 표현) 범위: 0, ..., 2 | 0 |
| int:scaler | 스케일링(0 - 꺼짐, 1 - 단일 평형, 2 - 이중 평형, 3 - 기하, 4 - 반복 기하, 5 - 최소 제곱, 6 - 기하 평형) 범위: 0, ..., 6 | 2 |
| int:simplifier | 간소화자(0 - 끄기, 1 - 자동, 2 - PaPILO, 3 - 내부) 범위: 0, ..., 3 | 3 |
| int:stallreflimit | 정밀도 제한(-1 - 제한 없음) 범위: -1, ..., 무한대 | -1 |
| int:starter | 처음부터 시작할 때 충돌 기준이 생성됨(0 - 없음, 1 - 가중치, 2 - 합계, 3 - 벡터) 범위: 0, ..., 3 | 0 |
| int:stattimer | 통계 측정값, 예: 분해 시간(0 - 꺼짐, 1 - 사용자 시간, 2 - 벽시계 시간) 범위: 0, ..., 2 | 1 |
| int:타이머 | 타이머 유형(1 - CPUTime, 일명 usertime, 2 - 벽시계 시간, 0 - 타이밍 없음) 범위: 0, ..., 2 | 2 |
| int:상세 | 상세 수준(0 - 오류, 1 - 경고, 2 - 디버그, 3 - 정상, 4 - 높음, 5 - 전체) 범위: 0, ..., 5 | 3 |
| real:epsilon_factorization | 인수분해에 사용되는 제로 허용오차 범위: [0, 1] | 1e-20 |
| real:epsilon_pivot | 인수분해에 사용되는 피벗 제로 공차 범위: [0, 1] | 1e-10 |
| 실제:epsilon_update | 인수분해 업데이트에 사용되는 제로 허용오차 범위: [0, 1] | 1e-16 |
| 실제:epsilon_zero | 일반 무관용 범위: [0, 1] | 1e-16 |
| 리얼:페스톨 | 원초 타당성 공차 범위: [0, 1] | 1e-06 |
| real:fpfeastol | 반복적 개선 중 부동 소수점 솔버의 타당성에 대한 작업 허용 오차 범위: [0, 1] | 1e-09 |
| 실제:fpopttol | 반복적 개선 중 부동 소수점 솔버의 최적성을 위한 작업 허용 오차 범위: [0, 1] | 1e-09 |
| 실제:infty | 무한대 임계값 범위: [1e+10, ] | 무한 |
| real:leastsq_acrcy | 최소 제곱 스케일링에서 공액 기울기 방법의 정확도(값이 높을수록 더 많은 반복이 발생함) 범위: [1, ] | 1000 |
| 실제:liftmaxval | 리프팅의 낮은 임계값(절대값이 더 작은 0이 아닌 행렬 계수가 다시 작성됨) 범위: [10, ] | 1024 |
| 실제:liftminval | 리프팅의 낮은 임계값(절대값이 더 작은 0이 아닌 행렬 계수가 다시 작성됨) 범위: [0, 0.1] | 0.000976562 |
| 실제:maxscaleincr | 세분화 간 배율 인수 최대 증가 범위: [1, ] | 1e+25 |
| real:min_markowitz | LU 분해의 최소 Markowitz 임계값 범위: [0.0001, 0.9999] | 0.01 |
| 실제:minred | 단순화를 계속하기 위해 최소한의 축소(제거된 행/열의 합계) 범위: [0, 1] | 0.0001 |
| real:objlimit_lower | 객관값 하한값 범위: 실제 | 무료 슬롯 컷오프, 최대화하는 경우, 그렇지 않으면 - |
| real:objlimit_upper | 객관값의 상한선 범위: 실제 | 무료 슬롯 컷오프, 최소화하는 경우, 그렇지 않으면 + |
| 실제:opttol | 이중 타당성 공차 범위: [0, 1] | 1e-06 |
| real:repac_basis_nnz | 업데이트된 기저 행렬과 비교하여 마지막 인수분해된 기저 행렬의 0이 아닌 값에 대한 리팩터링 임계값 범위: [1, 100] | 10 |
| real:repac_mem_factor | 마지막 리팩토링 이후 인수분해의 메모리 증가에 대한 리팩터링 임계값 범위: [1, 10] | 1.5 |
| real:repac_update_fill | 마지막 인수분해의 채우기와 비교하여 현재 요소 업데이트의 채우기에 대한 리팩터링 임계값 범위: [1, 100] | 5 |
| real:representation_switch | 자동 모드에서 열에서 행 표현으로 전환하기 위한 행 수 및 열 수에 대한 임계값 범위: [0, ] | 1.2 |
| real:simplifier_modifyrowfac | 0이 아닌 값 또는 행의 수가 많아야 사전 해결 전 0이 아닌 값 또는 행의 수를 곱한 값일 때 제약 조건을 수정 범위: [0, 1] | 1 |
| real:sparsity_threshold | 희소 가격 책정 임계값(위반 < 차원 * SPARSITY_THRESHOLD는 희소 가격 책정을 활성화함) 범위: [0, 1] | 0.6 |
| 실제:시간제한 | 초 단위의 시간 제한 범위: [0, ] | 무료 슬롯 리슬림 |