목차
메가 슬롯 API는 다양한 프로그래밍 환경의 애플리케이션 내에서 메가 슬롯 모델의 원활한 통합 및 자동화를 촉진합니다. 메가 슬롯는 서로 다른 사용자 요구사항과 프로그래밍 환경에 맞춰 각각의 모듈로 분류된 체계적이고 유연한 API를 제공합니다.
참조다른 환경에서 메가 슬롯 실행API를 사용하지 않고 애플리케이션에서 직접 메가 슬롯를 실행하려는 경우.
메가 슬롯 API
메가 슬롯 API는 명확하게 정의된 모듈로 나누어져 있으며 각 모듈은 특정 기능을 제공합니다.
제어
메가 슬롯 모델 실행을 제어하고 자동화하기 위한 높은 수준의 객체 지향 인터페이스입니다. 입력 데이터를 교환하고 결과를 검색하고, 메모리 내 데이터 구조를 관리하고, 유연하고 효율적인 방식으로 모델을 실행할 수 있는 편리한 메커니즘을 제공합니다.
사용 가능 대상:.NET, C++, 자바, 파이썬, 매트랩
이전
메가 슬롯와 외부 데이터 소스 간에 데이터를 읽고 쓰는 간단하고 효율적인 방법을 제공합니다. 이를 통해 사용자는 메가 슬롯 기호를 추가할 수 있을 뿐만 아니라 기호를 조작하고 다양한 데이터 엔드포인트에서 읽기/쓰기 작업을 수행할 수 있습니다. 주요 목표는이전프로세스를 최대한 간단하게 유지하면서 메가 슬롯와 대상 프로그래밍 언어 간의 매우 효율적인 데이터 교환을 촉진하는 것입니다.
코어
안전문가 수준 API다음과 같은 핵심 메가 슬롯 개체에 대한 직접 액세스 제공GDX, GMO및 기타. 고급 및 성능이 중요한 사용 사례에 적합합니다. 이는 더 깊은 기술적 이해가 필요하며 Control API가 구축되는 기본 계층입니다.
사용 가능 대상: C, C#, Delphi, Fortran, Java, Python, Visual Basic
마법(베타)
Jupyter 노트북 내에 메가 슬롯를 원활하게 통합하여 대화형 모델 개발, 데이터 분석 및 시각화를 향상합니다.
사용 가능 대상:파이썬
Python API에는 다음과 같은 추가 모듈이 포함되어 있습니다.연결, 엔진및도구데이터 교환, 원격 작업 실행 및 유틸리티 기능을 위한 향상된 기능을 제공합니다. 전체 개요를 보려면 다음을 참조하세요.Python API 문서.
*GAMSPy는 메가 슬롯 실행 시스템과 Python 언어를 결합한 Python 기반 수학적 최적화 라이브러리입니다.
지원되는 프로그래밍 언어
| API | .NET | C++ | 자바 | 파이썬 | 매트랩 | R | C | C# | 델파이 | 포트란 | 비주얼 베이직 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 제어 | ✔ | ✔ | ✔ | ✔ | ✔ | ||||||
| 이전 | ✔ | ✔ | ✔ | ||||||||
| 코어 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
| 마법 | ✔ |
지원되는 플랫폼
원칙적으로 위에 나열된 모든 상위 수준 API는 모든 플랫폼에서 사용할 수 있습니다. 그러나 메가 슬롯 Matlab Control API는 해당 플랫폼에 대한 Matlab의 제한된 지원으로 인해 ARM 64비트 Linux와 호환되지 않습니다.
제어 API - 지원되는 플랫폼:
| x86 64비트 MS 윈도우 | x86 64비트 리눅스 | 암 64비트 리눅스 | x86 64비트 맥OS | 암 64비트 맥OS | |
|---|---|---|---|---|---|
| 메가 슬롯 C++ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 메가 슬롯 자바 | ✔ | ✔ | ✔ | ✔ | ✔ |
| 메가 슬롯NET | ✔ | ✔ | ✔ | ✔ | ✔ |
| 메가 슬롯 파이썬 | ✔ | ✔ | ✔ | ✔ | ✔ |
| 메가 슬롯 Matlab | ✔ | ✔ | ✔ | ✔ |
핵심(전문가 수준) API에 대해 지원되는 플랫폼에 대한 개요는 다음을 참조하세요.여기.
시작하기
메가 슬롯 API 문서는 튜토리얼, 포괄적인 참조 매뉴얼 및 실제 예를 포함하여 각 API 및 모듈에 대한 자세한 지침을 제공합니다.
제어 API 예
Control API는 지원되는 모든 언어에 걸쳐 균일한 예를 제공하므로 이러한 예의 개요가 아래에 제공되어 선택하는 언어에 관계없이 일관된 지침을 보장합니다. 또한 각 언어 섹션에는 참조할 수 있는 예시 목록이 포함되어 있습니다.
메가 슬롯는 GAMS 배포판에서 사용할 수 있습니다.[경로/대상/메가 슬롯]/apifiles/디렉토리. 해당 디렉토리에서 파일readme.txt이러한 예제를 빌드하고 실행하는 방법을 설명합니다. 각 예제를 컴파일하고 실행하는 메가 슬롯 스크립트는 다음에서 사용할 수 있습니다.[경로/대상/메가 슬롯]/apilib_ml/디렉토리목차.
별칭
객체 지향 API에는 GAMS 별칭 개념이 없습니다. 별칭은 API 메소드로 GAMSDatabase에 입력할 수 없습니다. 그럼에도 불구하고 GAMSDatabase가 GDX 컨테이너(예: GAMSJob.OutDB)에서 로드되는 경우 데이터베이스에 별칭이 포함될 수 있습니다. 이러한 별칭은 GAMSSet으로 검색할 수 있으며 별칭 집합의 요소로 구성됩니다. GAMSDatabase의 GAMSSet이 실제로 별칭인지 확인하는 방법은 기호 이름이 조회 이름과 다른지 확인하는 것입니다(예: bool isAlias = db.GetSet("ii").Name != "ii"). 메가 슬롯시 모델은 객체 지향 API에서 별칭이 처리되는 방식의 논리를 살펴봅니다.
[의 별칭 예시 보기.NET, 자바, 파이썬, 매트랩].
벤더스2스테이지
메가 슬롯는 확률론적 선형 프로그램을 위한 간단한 Benders 분해 방법을 구현합니다. 기본 모델은 확률론적 수요 데이터를 사용하여 간단한 분배 시스템을 구현합니다. 메가 슬롯제는 실제로 순차 구현과 병렬 구현이라는 두 가지 프로그램으로 구성됩니다. 순차 버전에서 마스터 및 하위 문제는 모델을 재생성하지 않고도 수정된 입력으로 모델을 해결할 수 있는 GAMSModelInstance 객체로 구현됩니다. GAMSModelInstance에는 고정된 모델 림이 있으므로 매 반복마다 마스터에 새로운 제약 조건(Benders 컷)이 추가되므로 이는 Benders 마스터 문제에 대한 문제를 제공합니다. 고정된 수의 빈(즉, 바인딩되지 않은) 자리 표시자 제약 조건으로 마스터의 GAMSModelInstance를 초기화하고 알고리즘 실행 중에 이러한 자리 표시자 제약 조건을 유효한 Benders 컷으로 전환하여 GAMSModelInstance의 이러한 제한을 해결합니다. 병렬 버전은 독립적인 하위 문제를 병렬로 해결하여 Benders2Stage 예제를 확장합니다. 이를 위해서는 각 병렬 작업자에 대해 별도의 GAMSModelInstance를 인스턴스화해야 합니다. 효율적인 GAMSModelInstance를 사용합니다. CopyInstance 메서드를 사용하면 가장 효과적인 방법으로 이를 수행할 수 있습니다. 수요 시나리오의 수는 병렬 작업자의 수보다 클 수 있습니다. 작업 배포는 작업 대기열을 통해 처리됩니다. 하위 문제의 병렬 실행은 별도의 스레드에서 수행되므로(예제 이름의 MT는 멀티 스레딩을 나타냄) 디스크 활동으로 인한 오버헤드가 거의 없습니다.
[의 Bender2Stage 예를 참조하세요..NET, 자바, 파이썬, 매트랩] 및 [의 Bender2StageMT 예.NET, 자바, 파이썬].
클래드
메가 슬롯는 GAMS/Cplex를 사용하여 어려운 MIP에 대한 복잡한 종료 기준을 구현하는 방법을 보여줍니다. 우리는 전체적으로 최적의 솔루션(상대적 간격 0%)을 달성하고 싶지만 솔루션 시간이 n1초보다 커지면 10% 간격으로 절충할 수 있고, 이것이 n2초 후에도 달성되지 않으면 20% 간격으로 절충하고, 다시 n3초 내에 달성되지 않으면 솔버가 지금까지 수행한 모든 작업을 취하고 해결을 종료합니다. 이는 독립 스레드에서 GAMSJob.run을 실행하고 새 GAMS/Cplex 옵션 파일을 제공하여 기본 스레드의 상대적 간격에 대한 새 허용 오차를 제공함으로써 구현되며 GAMSJob.Interrupt 메서드를 통해 GAMS/Cplex에 의한 새 허용 오차 옵션 처리를 트리거합니다.
컷스톡
메가 슬롯에는 절단 재고 문제를 해결하기 위해 열 생성 접근 방식을 구현하는 두 개의 프로그램이 포함되어 있습니다. SimpleCutsock 프로그램에서는 열 생성 체계가 GAMS로 구현되었습니다. 또한 입력 및 출력 데이터가 포함된 GAMS 모델은 구동 애플리케이션에서 GAMS와의 모든 상호 작용을 분리하는 클래스로 래핑되었습니다. 두 번째 예에서 열 생성 접근 방식은 마스터에 GAMSJob을 사용하고 가격 문제에 GAMSModelInstance를 사용하여 프로그램에서 완전히 구현되었습니다. GAMS는 마스터 및 가격 문제를 구축하는 데 사용됩니다. 컬럼 생성 방식의 로직은 응용프로그램에 있습니다.
[의 컷스톡 모델 예를 참조하세요..NET, 자바, 파이썬, 매트랩], [의 SimpleCustock 예.NET, 자바, 파이썬, 매트랩] 및 [의 Custock 예.NET, 자바, 파이썬, 매트랩].
도메인 확인
GAMS 용어에서 도메인 검사라고도 알려진 참조 무결성을 시행하는 것은 GAMS의 필수적이고 중요한 부분입니다. 객체 지향 API는 기호의 지연된 도메인 검사를 수행합니다. 따라서 GAMSSet i에 아직 라벨이 포함되어 있지 않더라도 도메인 제어 매개변수(예: p(i))에 레코드를 추가할 수 있습니다. 사용자는 GAMSDatabase.CheckDomains(또는 GAMSSymbol.CheckDomains)를 호출하여 참조 무결성에 대한 명시적인 검사를 실행할 수 있습니다. 객체 지향 API는 참조 무결성을 위반하는 레코드에 액세스하는 방법을 제공합니다(자세한 내용은 GAMSDatabaseDomainViolation 참조). 도메인 검사는 GAMSDatabase.Export 메소드를 통해 또는 GAMSJob.Run 메소드에 제공된 데이터베이스에 대해 GAMSDatabase를 GDX 파일로 내보낼 때 암시적으로 수행됩니다. GAMSDatabase.SuppressAutoDomainChecking 속성을 통해 암시적 도메인 확인을 억제할 수 있습니다(데이터를 가져올 때 GAMS에 맡김). 메가 슬롯에서는 도메인 확인을 트리거하는 방법과 참조 무결성을 위반하는 레코드에 액세스하는 방법을 보여줍니다.
[의 도메인 확인 예를 참조하세요..NET, C++, 자바, 파이썬, 매트랩].
GUI 예
Microsoft의 Visual Studio, Python 및 Java와 같은 최신 개발 프레임워크를 사용하면 그래픽 사용자 인터페이스를 빠르게 구축할 수 있습니다. 모든 예시는 데이터 입력을 제공하고 GAMSJob을 실행하며 메가 슬롯 모델의 결과를 그래픽으로 표현하는 간단한 GUI로 구성됩니다.
- 컷스톡GUI: 메가 슬롯에서는 데이터베이스에서 데이터를 로드하거나 수동으로 데이터를 입력할 수 있습니다. 절단 재고 문제는 분해 접근 방식을 구현하기 위해 GAMSJob 및 GAMSModelInstance 클래스를 모두 사용하여 해결됩니다. 또한 참조하세요CutStock 예. [에서 메가 슬롯를 참조하세요..NET].
- 인터럽트GUI: 이 작은 예는 그래픽 사용자 인터페이스에서 메가 슬롯 모델을 실행하는 방법을 보여줍니다. 여기에는 작업 시작, 창에서 메가 슬롯 로그 캡처, 중단 버튼 제공 등 메가 슬롯 Studio에서 알고 있는 모든 기본 기능이 포함되어 있습니다. 작업을 중단하는 기본 메커니즘은 다음과 유사합니다.인터럽트 예(GAMSJob.Interrupt), 그러나 트리거 메커니즘은 매우 다릅니다. [에서 메가 슬롯를 참조하세요..NET, 자바,interrupt_gui.py].
- 팜GUI: 이 농업 모델의 경우 입력 데이터를 여러 테이블에 직접 입력할 수 있습니다. GAMS 모델 자체는 하나의 단일 GAMSJob 인스턴스를 사용하여 실행됩니다. 결과는 다양한 차트와 표로 표시됩니다. [에서 메가 슬롯를 참조하세요..NET].
- 운송GUI: 메가 슬롯에서는 GAMSModelInstance를 사용하여 일련의 운송 문제를 해결합니다. 데이터는 테이블에 입력되거나 데이터베이스에서 로드될 수 있습니다. 테이블에 데이터를 입력하면 관련 테이블이 자동으로 업데이트됩니다. 결과는 표 및/또는 막대 차트로 표시됩니다. 또한 참조하세요운송 모델 시퀀스 예. [에서 메가 슬롯를 참조하세요..NET, 자바].
메가 슬롯 원격 개체
메가 슬롯는 간단한 GAMS 서버를 구현하는 방법을 보여줍니다. 메가 슬롯는 GAMSServer와 GAMSClient라는 두 부분으로 구성됩니다. 메가 슬롯제는 클라이언트와 서버를 동일한 시스템에서 실행하도록 구성되었지만 다른 시스템에서 실행되도록 쉽게 변경할 수 있습니다. 클라이언트와 서버 모두 서버를 구현하는 GAMSRemoteClass에 액세스해야 합니다. 의사소통 방법은 매우 간단합니다. 클라이언트는 GAMSJob의 구성요소(모델 텍스트, GDX 입력, 매개변수)를 설정하고 이를 직렬화된(GDX 및 매개변수 파일의 바이트 표현을 통해) 서버에 보냅니다. 서버는 직렬화된 표현에서 GAMS 개체를 다시 생성하고 모델을 실행하며 추가 처리를 위해 직렬화된 GAMSJob.OutDB를 클라이언트에 다시 전달합니다.
[의 GAMSServer 예를 참조하세요..NET] 및 [의 GAMSClient.NET].
인터럽트
일반 콘솔 응용프로그램에서 Ctrl-C를 누르면 전체 작업이 중단됩니다. GAMS 사용자는 Ctrl-C가 해결을 중단한 다음 나머지 GAMS 작업 실행을 계속한다는 사실에 익숙합니다. 메가 슬롯에서는 Ctrl-C의 이러한 동작을 얻기 위해 일부 콘솔 속성을 변경하는 방법을 보여줍니다.
[의 인터럽트 예를 참조하세요..NET, 자바, 파이썬].
마코위츠
이것은 두 가지 목표 수익과 위험을 사용하여 Markowitz의 포트폴리오 선택 문제의 효율적인 경계를 표시하는 작은 그래픽 프로그램입니다. 메가 슬롯에서는 GAMSModelInstance 클래스를 활용하여 매개변수화된 목표 최대 람다*반환 - (1-람다)*위험을 가장 효율적인 방법으로 해결합니다.
[의 Markowitz 예를 참조하세요..NET, 파이썬].
MessageReceiver 창
작은 예는 사용자 정의 시각적 로그를 구현하는 방법을 보여줍니다. 메가 슬롯에서는 put_utility "winmsg"를 통해 이 프로그램이 시작한 양식으로 메시지를 보낼 수 있습니다. 또한 양식은 양식의 내용을 저장하거나 내용을 클립보드에 넣거나 프로그램을 종료하기 위한 일부 명령(@으로 시작하는 메시지)을 이해합니다. MessageReceiverWindow는 사용할 준비가 된 메가 슬롯 시스템 디렉터리에 실행 파일로도 배포됩니다. 메가 슬롯 테스트 라이브러리의 모델 mrw01은 프로그램 사용을 보여줍니다.
[의 MessageReceiver 창 예를 참조하세요..NET].
특수 값
메가 슬롯는 프로그래밍 언어의 특수 값(예: 무한대)이 어떻게 GAMS까지 침투하는지 보여줍니다. Infinity와 NaN(숫자가 아님)은 잘 정의되어 있습니다. GAMS 정의되지 않음 및 EPS는 특별한 고려사항이 필요합니다.
[의 특수 값 예를 참조하세요..NET, 자바, 파이썬, 매트랩].
운송 모델 시퀀스
메가 슬롯시 세트는 단순 전송 모델에서 객체 지향 API의 사용을 보여줍니다.[trn스포츠]. 다양한 예시에 대한 자세한 설명은 메가 슬롯 문서의 객체 지향 API 튜토리얼에서 제공됩니다.
[의 운송 모델 예를 참조하세요..NET, C++, 자바, 파이썬, 매트랩].
여행하는 세일즈맨 문제
메가 슬롯는 GAMSModelInstance를 사용하여 TSP(여행하는 외판원 문제) 문제에 대한 하위 투어 제거 알고리즘을 구현하는 방법을 보여줍니다. 와 유사함Benders2Stage 예, 알고리즘의 각 반복에서 생성되는 하위 투어 제거 제약 조건에 대한 자리 표시자가 있습니다. Benders 예제와 달리 여기서는 원래 자리 표시자 수가 충분히 크지 않은 경우 GAMSModelInstance를 다시 생성합니다. 모든 하위 투어가 제거될 때까지 이 프로세스를 계속합니다.
[의 여행하는 세일즈맨 문제 예를 참조하세요..NET, 자바, 파이썬, 매트랩].
단위 테스트
메가 슬롯에는 .Net 객체 지향 API에서 실행하는 모든 단위 테스트가 포함되어 있습니다. [의 단위 테스트 예시를 참조하세요..NET].
창고
메가 슬롯는 다양한 데이터 세트에 대해 매장을 창고에 병렬로 할당하기 위해 간단한 GAMS 모델을 해결하는 방법을 보여줍니다. 모델이 매개변수화되었습니다. 데이터는 창고 수, 매장 수, 일부 고정 비용 스칼라 등 몇 가지 숫자에서 파생될 수 있습니다. 모델의 결과는 뮤텍스를 통해 병렬 스레드 전체에서 보호되는 단일 결과 데이터베이스에 기록됩니다.