OptimJ

OptimJ
OptimJ
패러다임객체 지향의
설계자아테지
처음 등장한2006년 (2006)
웹 사이트www.Ateji.com
영향을 받다
자바

OptimJ는 Java의 확장 기능으로 최적화 모델 작성 및 벌크 데이터 처리를 위한 추상화를 지원합니다.확장기능과 확장기능을 실장하는 독자제품은 2011년 [1]9월에 폐업한 Ateji에 의해 개발되었습니다.OptimJ는 최적화 모델링을 위한 명확하고 간결한 대수 표기법을 제공하고, 최적화 모델링과 애플리케이션 프로그래밍 도구 간의 호환성 장벽을 제거하며, 최적화 전문가에게 객체 지향 및 최신 IDE 지원과 같은 소프트웨어 엔지니어링 기술을 제공하는 것을 목표로 합니다.

OptimJ 모델은 Java 소스 코드, 데이터베이스 액세스, Excel 연결 또는 그래픽 인터페이스와 같은 기존 Java 라이브러리와 직접 호환됩니다.OptimJ는 Eclipse, CVS, JUnit 또는 JavaDoc과 같은 개발 도구와 호환됩니다.OptimJ는 lp_solve, glpk, LP 또는 MPS 파일 형식과 함께 무료로 사용할 수 있으며 MOSEK, IBM ILOG CPLEX Optimization Studio도 지원합니다.

언어 개념

OptimJ는 최적화 문제를 위해 객체 지향 명령어 개념과 대수 모델링 언어의 개념을 결합합니다.여기에서는 Java에 추가된 최적화 개념을 구체적인 예부터 검토하겠습니다.

지도 색칠의 예

지도 색칠 문제의 목적은 공통 경계를 공유하는 지역이 다른 색을 가지도록 지도에 색을 입히는 것입니다.OptimJ로 표현하면 다음과 같습니다.

패키지 ;  // 지도 수정 문제에 대한 간단한 모델 일반의 모델 심플 컬러링 해결사 lpsolve {   // 최대 색상 수   인트 nb컬러 = 4;    // 결정 변수는 각 국가의 색상을 보유합니다.   변화하다 인트 벨기에  1 .. nb컬러;   변화하다 인트 덴마크  1 .. nb컬러;   변화하다 인트 독일.  1 .. nb컬러;    // 인접국은 다른 색을 사용해야 합니다.   제약 {     벨기에 != 독일.;     독일. != 덴마크;   }    // 모델을 테스트하기 위한 주요 진입점   일반의 정적인 무효 주된(스트링[] args)   {     // 모델 인스턴스화     심플 컬러링 m = 신규 심플 컬러링();      // 해결     m.압축풀기();     m.풀다();      // 솔루션 인쇄     시스템..나가..인쇄("벨기에:" + m.가치(m.벨기에));     시스템..나가..인쇄("덴마크: " + m.가치(m.덴마크));     시스템..나가..인쇄("독일: " + m.가치(m.독일.));   } } 

Java에 익숙한 독자들은 이 언어와 매우 유사하다는 것을 알게 될 것이다.실제로 OptimJ는 Java의 보수적인 확장입니다. 유효한 Java 프로그램도 모두 유효한 OptimJ 프로그램이며 동일한 동작을 합니다.

이 맵 컬러링 예에서는 키워드에 의해 도입된 Java에 직접 대응하지 않는 최적화 고유의 기능도 보여 줍니다.model,var,constraints.

OR 고유의 개념

모델

모델은 필드 및 메서드뿐만 아니라 제약 조건 및 목적 함수를 포함할 수 있는 Java 클래스의 확장입니다.에 의해 도입되었습니다.model키워드 및 클래스 선언과 동일한 규칙을 따릅니다.비추상 모델은 키워드에 의해 도입된 솔버에 링크되어야 합니다.solver솔버의 능력에 따라 모델에서 표현될 수 있는 제약의 종류가 결정됩니다. 예를 들어 lp solve와 같은 선형 솔버는 선형 제약만 허용합니다.

일반의 모델 심플 컬러링 해결사 lpsolve 

의사결정 변수

Java와 같은 명령형 언어는 명령형 변수의 개념을 제공합니다.이것은 기본적으로 쓰기 및 읽기 가능한 메모리 위치를 나타냅니다.

OptimJ는 기본적으로 값이 검색되는 미지의 양을 나타내는 의사결정 변수의 개념도 도입했습니다.최적화 문제에 대한 해결책은 문제의 제약을 존중하는 모든 의사결정 변수의 값 집합입니다. 의사결정 변수가 없다면 최적화 문제를 표현할 수 없습니다."결정 변수"라는 용어는 최적화 커뮤니티에서 유래했지만 OptimJ의 결정 변수는 Prolog와 같은 논리 언어의 논리 변수와 동일한 개념입니다.

의사결정 변수에는 키워드에 의해 도입된 특수한 유형이 있습니다.var.가 있습니다.var를 입력합니다.

  // Java 프리미티브 유형의 var 유형   변화하다 인트 x;    // 사용자 정의 클래스의 var 유형   변화하다 마이클래스 y; 

지도 색칠 예에서는 의사결정 변수가 취할 수 있는 값의 범위와 함께 도입되었다.

  변화하다 인트 독일.  1 .. nb컬러; 

이것은 변수에 제약을 가하는 것과 같은 단순한 줄임말입니다.

제약

제약조건은 문제의 모든 해결책에서 참이어야 하는 조건을 나타냅니다.제약조건은 의사결정 변수를 포함하는 임의의 Java 부울식일 수 있습니다.

지도 색칠 예에서 이 일련의 제약조건은 지도 색칠 문제에 대한 어떤 해결책에서도 벨기에의 색상은 독일의 색상과 달라야 하며 독일의 색상은 덴마크의 색상과 달라야 한다고 규정하고 있다.

  제약 {     벨기에 != 독일.;     독일. != 덴마크;   } 

오퍼레이터!=는 표준 Java 부정 연산자입니다.

제약조건은 일반적으로 일괄적으로 제공되며 다음과 같이 수량화할 수 있습니다.forall교환입니다.예를 들어, 소스코드에 모든 국가와 그 인접국들을 명시적으로 나열하는 것이 아니라, 국가 배열, 각 국가의 색상을 나타내는 결정 변수 배열 및 배열이 있을 수 있습니다.boolean[][] neighboring또는 술어(부울 함수)boolean isNeighbor().

제약 {   전면적으로(나라 c1 : 나라들., 나라 c2 : 나라들., :네이버(c1,c2)) {     색.[c1] != 색.[c2];   } } 

Country c1 : countries생성기: 반복c1컬렉션의 모든 값에 대해countries.

:isNeighbor(c1,c2)필터: 술어가 참인 생성된 값만 유지합니다(기호).:"if"로 읽힐 수 있습니다.

어레이가 다음과 같이 되어 있는 경우countries포함하다belgium,germany그리고.denmark, 그리고 술어는isNeighbor돌아온다true부부용(Belgium ,Germany( ) 및 ( )Germany,Denmark이 코드는 원래 맵컬러링 예의 구속 블록과 동일합니다.

목적

선택적으로 모델이 최적화 문제를 기술할 때 모델에 최소화 또는 최대화하는 목적 함수를 기술할 수 있다.

일반주의 개념

일반론 개념은 OR 문제에 고유하지 않은 프로그래밍 개념으로, 모든 종류의 응용 프로그램 개발에 적합합니다.OptimJ에 의해 Java에 추가된 일반주의 개념은 OR 모델을 보다 쉽게 또는 보다 간결하게 표현합니다.이들은 종종 오래된 모델링 언어로 나타나기 때문에 OR 전문가들에게 익숙한 모델 표현 방법을 제공합니다.

어소시에이션 어레이

Java 배열은 0 기반의 정수만 인덱싱할 수 있지만 OptimJ 배열은 모든 유형의 값으로 인덱싱할 수 있습니다.이러한 어레이를 보통 연관 어레이 또는 맵이라고 합니다.이 예에서는 어레이가age에는 이름으로 식별되는 사람의 연령이 기재되어 있습니다.

  인트[스트링] 나이; 

종류int[String]배열을 나타내다int에 의해 색인화된.String표준 Java 구문을 사용하여 OptimJ 어레이에 액세스:

  나이[스테판] = 37;   x = 나이["린다']; 

지금까지 어소시에이션 어레이는 최적화 문제를 나타낼 때 많이 사용되었습니다.OptimJ 관련 어레이는 특정 초기화 구문에 관련지어 매우 편리합니다.초기값은 다음과 같이 집중 정의로 지정할 수 있습니다.

인트[스트링] 나이 = {    스테판 -> 37,   "린다'   -> 29  }; 

또는 다음과 같이 확장 정의로 지정할 수 있습니다.

  인트[스트링] 길이[스트링 이름. : 이름] = 이름..길이(); 

각 엔트리는 다음과 같습니다.length[i]에 의해 초기화됩니다.names[i].length().

확장 초기화

튜플

튜플은 컴퓨팅에 어디에나 있지만 Java를 포함한 대부분의 주류 언어에는 없습니다.OptimJ는 언어 수준에서 튜플 개념을 제공하며 관련 배열과 함께 인덱스로 매우 유용할 수 있습니다.

  (: 인트, 스트링 :) 마이튜플 = 신규 (: 3, '셋' :);   스트링 s = 마이튜플#1; 

태플 타입과 태플 값은 모두 다음 사이에 기술됩니다.(:그리고.:).

범위

이해

집약 연산 또는 축소라고도 하는 통합은 주어진 이진 연산을 값 집합으로 확장하는 OptimJ 표현식입니다.일반적인 예는 다음과 같습니다.

  // 1 ~ 10의 모든 정수의 합계   인트 k =  { i   인트 i  1 .. 10}; 

이 구조는 수학에서 사용되는 빅 시그마 합산 표기법과 매우 유사하며, Java 언어와 호환되는 구문을 가지고 있습니다.

목록, 세트, 멀티셋 또는 맵과 같은 컬렉션을 구축하기 위해서도 컴프레션을 사용할 수 있습니다.

  // 1 ~ 10의 모든 정수 집합   해시 세트< >정수> s = `해시 세트(){ i   인트 i  1 .. 10}; 

이해 표현식은 다음과 같이 임의의 표현식을 대상으로 지정할 수 있습니다.

  // 1 ~ 10의 모든 정수의 제곱합   인트 k =  { i*i   인트 i  1 .. 10}; 

또한 임의의 수의 생성기와 필터를 가질 수도 있습니다.

  // 0에 대한 모든 f(i,j)의 합계 <=i <10,1 <=j <=10 및 i!=j   인트 k = { f(i,j)   인트 i : 10, 인트 j : 1 .. 10, :i!=j } 

이해는 숫자 값에만 적용될 필요는 없습니다.특히 문자열의 튜플과 조합하여 집합을 설정 또는 다중 구성하면 SQL 데이터베이스 쿼리와 매우 유사한 쿼리를 표현할 수 있습니다.

  // 18세 이상의 사람 중에서 이름을 선택합니다.   `멀티 세트(){ p.이름.   사람인 p : 사람, :p.나이 > 18 } 

최적화 모델의 맥락에서 이해식은 입력 데이터를 전처리 및 정리하고 출력 데이터를 포맷하는 간결하고 표현적인 방법을 제공합니다.

개발 환경

OptimJ는 Eclipse 플러그인으로 사용할 수 있습니다.컴파일러는 OptimJ에서 표준 Java로의 소스 투 소스 변환을 구현하여 Java 생태계의 대부분의 개발 도구와 즉각적인 호환성을 제공합니다.

OptimJ GUI 및 신속한 프로토타이핑

OptimJ 컴파일러는 모델에 사용되는 모든 데이터의 구조를 알고 있기 때문에 컴파일 시에 이 데이터의 구조화된 그래픽 뷰를 생성할 수 있습니다.이는 컴파일러가 다양한 차원의 인덱스에 사용되는 컬렉션을 알고 있는 어소시에이션 어레이의 경우에 특히 중요합니다.

컴파일러에 의해 생성되는 기본적인 그래픽 뷰는 OLAP 큐브를 연상시킵니다.그런 다음 단순한 색칠에서 데이터 요소를 표시하기 위한 새로운 위젯 제공까지 다양한 방법으로 사용자 정의할 수 있습니다.

컴파일러에서 생성된 OptimJ GUI를 사용하면 OR 전문가가 그래픽 라이브러리를 데이터에 매핑할 때 필요한 글루 코드를 모두 쓸 필요가 없습니다.데이터 구조에 대한 즉각적인 시각적 힌트를 제공하여 신속한 프로토타이핑을 가능하게 합니다.

OptimJ GUI의 또 다른 부분은 솔버로부터 실시간으로 퍼포먼스 통계 정보를 보고합니다.이 정보는 성능 문제를 이해하고 해결 시간을 단축하는 데 사용할 수 있습니다.현시점에서는 lp_solve에만 사용할 수 있습니다.

지원되는 솔버

OptimJ는 다음과 같은 솔버 lp_solve, glpk, LP 또는 MPS 파일 형식으로 무료로 사용할 수 있으며 다음과 같은 상용 솔버도 지원합니다.Mosek, IBM ILOG CPLEX Optimization Studio.

외부 링크

레퍼런스

  1. ^ "Ateji is closed". Retrieved 2012-01-11.