메가 슬롯 소스 코드가 GitHub에 게시됨

게시일: 2023년 12월 12일 뉴스 API 메가 슬롯 GitHub

2000년 8월 7일, 메가 슬롯의 첫 번째 버전은 GAMS 릴리스 19.4의 일부로 배포되었습니다. 20년 후, 마침내 메가 슬롯(GAMS Data eXchange)용 전문가 수준 API의 소스 코드를 GitHub에 게시하게 되어 기쁘게 생각합니다.2023년 11월 14일. 이 코드 출판물에는 다음과 함께 제공됩니다.MIT와 유사한 라이선스, 이는 효과적으로 메가 슬롯 API 오픈 소스 소프트웨어를 만들고 메가 슬롯 파일 형식의 내부 레이아웃을 암시적으로 문서화합니다. GAMS 기술의 중요한 핵심 부분을 무료로 설정한 것을 기념하기 위해 이 블로그 게시물에서는 메가 슬롯가 실제로 무엇인지(파일 형식과 API 모두), 왜 생성되었는지, 오늘날 GAMS 생태계에서 어떻게 사용되는지, 오픈 소스 릴리스를 위해 준비한 노력에 대해 좀 더 조명합니다. GitHub 저장소만 살펴보고 싶다면 다음을 따라야 합니다.링크 .

메가 슬롯 파일 형식 및 API

GAMS 모델링 언어는 모델러가 사용하는 대수 수학 표기법과 매우 유사한 방식으로 수학적 최적화 모델을 공식화하는 데 매우 적합합니다. 소규모 모델 인스턴스의 경우 언어는 다음과 같은 적절한 데이터 정의 지시문을 제공합니다.테이블 정의. 실제로 인스턴스는 대량의 데이터로 구성되는 경우가 많습니다. 데이터를 GAMS 모델에 쉽고 효율적으로 로드하기 위해 Paul van der Eijk의 주요 기여를 바탕으로 메가 슬롯 형식과 API가 개발되었습니다. 모델 데이터를 a에 저장하면 여러 가지 이점이 있습니다.메가 슬롯 파일CSV와 같은 텍스트 표현을 사용하는 대신데이터 정의 구문GAMS 언어로:

  • 공간 효율성: 메가 슬롯는 가능한 가장 작은 데이터 유형으로 기호 레코드를 저장하고 선택적 압축을 허용합니다. Erwin Kalvelagen은 자신의 블로그 “의 여러 게시물에서 CSV 또는 SQLite와 비교하여 압축되지 않은 메가 슬롯 파일과 압축된 메가 슬롯 파일의 상당한 크기 이점을 문서화했습니다.또 다른 수학 프로그래밍 컨설턴트” (참조1 , 2 , 3 ).
  • 성능 향상: 텍스트 데이터 인코딩을 구문 분석하는 것은 잘 정의된 구조를 가진 조밀한 바이너리 형식을 읽는 것보다 느립니다.
  • 지속성: 메가 슬롯는 지속적인 스테이징 데이터베이스이며 모델 데이터의 고정된 스냅샷을 나타냅니다. (관계형) 데이터베이스 시스템과 같은 다른 데이터 소스는 자주 변경될 수 있습니다. 따라서 메가 슬롯는 디버깅 중에 특정 상태를 재현하는 데 매우 유용할 수 있습니다.
  • 플랫폼 독립성: 파일은 이식 가능하며 임의 엔디안을 통해 Windows, Linux 및 macOS 시스템 간에 전달될 수 있습니다.
  • 로드 및 저장 용이성: 모델의 세트 및 매개변수는 종종 다음과 같은 방법으로 메가 슬롯 내부 데이터에서 채워질 수 있습니다.1-2줄의 코드필요합니다.
  • 유닉스 철학: GAMS가 직접 다양한 형식을 읽고 쓰는 대신, 메가 슬롯를 스테이징 데이터베이스로 사용하면 다양한 형식을 처리할 수 있는 전문화되고 고도로 매개변수화된 여러 도구를 사용할 수 있습니다.
  • 버전 관리: 각 메가 슬롯 파일은 버전 정보를 저장하므로 향후 GAMS 버전에서도 몇 년 전에 작성된 메가 슬롯 파일을 계속 읽고 이해할 수 있습니다.

GAMS 생태계의 핵심 구성요소인 메가 슬롯

앞서 나열된 장점으로 인해 GAMS는 메가 슬롯를 집중적으로 사용하고 메가 슬롯 파일을 처리하는 데 유용한 도구를 제공합니다. GAMS 언어는 이러한 작업에 대한 여러 명령을 제공하므로 GAMS 모델 내부에서 메가 슬롯 파일을 읽고 쓰는 것은 매우 쉽습니다. 따라서 메가 슬롯는 모델 인스턴스에 대한 데이터 또는 최적화 실행 결과를 저장하는 데 매우 적합합니다. GAMS는 또한 메가 슬롯 파일에 특정 기호의 하위 집합만 쓰거나 선택적으로 읽는 것만 지원합니다.

쉽습니다메가 슬롯 파일 검사명령줄에서gdxdump(참조여기) 및 내부에 '메가 슬롯 Viewer'라는 그래픽 사용자 인터페이스가 포함되어 있습니다.GAMS 스튜디오. 또한 GAMS 배포판은 다음과 같이 제공됩니다.여러 도구다양한 형식의 데이터를 메가 슬롯로 또는 그 반대로 변환합니다.GAMS 연결내부에서 메가 슬롯로 변환할 수 있는 데이터 처리 파이프라인을 구축하는 매우 일반적인 방법을 제공합니다. GAMS 생태계의 많은 작업 흐름은 한 지점 또는 다른 지점에서 메가 슬롯 파일을 사용합니다. 예를 들어, 메가 슬롯 파일은 대량의 데이터를 제출하는 좋은 방법입니다.GAMS 엔진일자리.

모든 사람이 메가 슬롯 소스 코드를 사용할 수 있도록 만들기

GAMS는 전통적으로 현재 널리 사용되는 C(및 C++) 대신 Pascal(및 객체 지향 확장 Delphi)로 많은 소프트웨어 구성 요소를 구축했습니다. Pascal과 그 파생 언어는 덜 간결한 구문과 강력한 타이핑으로 인한 안전성 향상으로 인해 더 나은 가독성을 제공하지만, C 언어와 그 파생 언어가 성능이 중요한 응용 프로그램을 프로그래밍하는 데 지배적인 언어라는 것은 부인할 수 없습니다. 따라서 오픈 소스 메가 슬롯를 향한 첫 번째 단계는 Delphi 소스 코드를 C++17로 번역하는 것이었습니다.

결과적으로 포팅된 라이브러리가 런타임 및 메모리 소비 증가 없이 올바른 방식으로 메가 슬롯 파일을 쓰고 읽는지 확인하기 위해 우리는 이기종 메가 슬롯 파일의 대규모 라이브러리에 대한 검증 테스트와 벤치마크를 실행했습니다. 또한 메가 슬롯 라이브러리에 대한 새로운 단위 테스트 모음을 작성했습니다.

메가 슬롯의 오픈 소스 출판물에는 지원되는 모든 플랫폼(Windows, macOS, Linux)에서 메가 슬롯 라이브러리를 구축하고, 메모리 누수 검사를 통해 단위 테스트 모음을 실행하고, Delphi 메가 슬롯 라이브러리와 성능을 비교하고, HTML 문서를 생성하여 제공하는 GitLab용 지속적인 통합 파이프라인도 포함되어 있습니다.GitHub 페이지 .

GAMS 배포판 내부 및 외부의 많은 도구에서 사용되는 동적 라이브러리를 구축하는 데 필요한 단계와 함께 메가 슬롯의 소스 코드를 공개적으로 사용할 수 있게 함으로써 이제 모든 사람이 자신의 수정된 메가 슬롯 라이브러리를 구축하고 GAMS와 독립적으로 유지할 수 있습니다. 파일 레이아웃을 암시적으로 문서화하는 것 외에도 오픈 소스 출판물은 향후 플랫폼이나 시스템에서 메가 슬롯 파일을 사용하지 못할 위험을 크게 줄입니다.