다슬롯 커뮤니티 최적화(음)

소개

다슬롯 커뮤니티 최적화(MOO)에는 하나 이상의 슬롯 커뮤니티 함수가 있으며 모든 슬롯 커뮤니티 함수를 동시에 최적화하는 단일 최적 솔루션은 없습니다. MOO에서는 최적성의 개념이 다음으로 대체됩니다.파레토효율성 또는 최적성. 파레토 효율적(또는 최적, 비지배 등) 솔루션은 다른 목표 중 적어도 하나를 악화시키지 않으면서 한 목표를 개선할 수 없는 솔루션입니다. 효율적인 솔루션의 수학적 정의는 다음과 같습니다.

일반성을 잃지 않고 \(k=1,...,p\)를 포함한 모든 슬롯 커뮤니티 함수 \(f_k\)가 최소화를 위한 것이라고 가정합니다. MOO 문제의 실현 가능한 솔루션 \(x\)은 하나 이상의 엄격한 부등식을 갖는 \(k=1,...,p\)에 대해 \(f_k(x') \leq; f_k(x)\)와 같은 실현 가능한 솔루션 \(x'\)이 없는 경우 (강하게) 효율적입니다. \(k=1,...,p\)에 대해 \(f_k(x') < f_k(x)\)와 같이 실현 가능한 솔루션 \(x'\)이 없는 경우 실현 가능한 솔루션 \(x\)은 약하게 효율적입니다.

볼록하지 않은 실현 가능 목표 및 결정 공간(예: MIP)의 경우 효율적인 솔루션 세트는 지원되는 효율적인 솔루션과 지원되지 않는 효율적인 솔루션으로 더 분할될 수 있습니다. 지원되는 효율적인 솔루션은 음수가 아닌 가중치(실행 가능한 공간의 코너 솔루션)에 대한 가중합 단일 목표 문제의 최적 솔루션입니다. 지원되는 효율적인 솔루션과 지원되지 않는 효율적인 솔루션의 차이점을 보여주는 다음 그래프를 참조하세요.

객관 공간 Z에서 지원 및 비지원 효율적인 솔루션. Li, Chendong & Park, Chulwoo & Pattipati, Krishna & Kleinman, David에서 가져온 그래프. (2011). Biobjective 할당 문제에 대한 분산 알고리즘. 결정 및 통제에 관한 IEEE 회의 진행. 5893-5898. 10.1109/CDC.2011.6161434.

간단한 MOO 방법은사전편찬 최적화. 사전 편찬 최적화는 의사 결정자가 다음을 수행했다고 가정합니다.사전식 환경설정, a에 대한 효율적인 솔루션 순위 지정사전순서슬롯 커뮤니티 함수. 사전식 최소화 문제는 다음과 같이 작성할 수 있습니다.

\(lex\) \(분\) \(f_1(x),f_2(x),...,f_p(x)\)
s.t.
\(x \in S\)

여기서 \(x\)는 결정 슬롯 커뮤니티의 벡터이고, \(S\)는 실현 가능한 영역이며, \(f_1(x),f_2(x),...,f_p(x)\)는 가장 중요한 것부터 가장 덜 중요한 것 순으로 정렬된 \(p\) 목적 함수입니다. \(p\) 목적 함수의 사전 편찬식 최소화 문제는 다음과 같이 일련의 \(p\) 단일 목적 최적화 문제를 사용하여 풀 수 있습니다.

\(i=1,...,p\)

  • 단일 목표 최적화 문제 해결:

    \(분\) \(z_i\)
    s.t.
    \(f_k(x)=z_k\) \(\forall k=1,...,i-1\)
    \(x \in S\)

    여기서 \(z_k\)는 목적 함수 슬롯 커뮤니티입니다.

  • 다음 반복에 대한 목적 함수 슬롯 커뮤니티 \(z_i\)의 값 수정

다음으로 종료

이 LibInclude 파일에서 제공하는 Payoff 방법은 사전 편찬 최적화를 사용하여 다음을 계산합니다.보수테이블. \(p \times p\) 보수 테이블에는 \( \lbrace f_1(x),f_2(x),...,f_p(x) \rbrace , \lbrace f_2(x),f_3(x),...,f_p(x),f_1(x) \rbrace , ..., \lbrace 주문을 사용한 \(p\) 사전 편찬 최적화 결과가 포함되어 있습니다. f_p(x),f_1(x),...,f_p-1(x)\rbrace\). 이 LibInclude 파일에서 제공하는 다른 MOO 방법은 Payoff 방법을 사용하여 예를 들어 목표 범위입니다.

이 LibInclude 파일은 MOO 슬롯 커뮤니티을 위한 파레토 효율적인 솔루션을 생성하는 방법 모음을 제공합니다. 구현된 모든 방법은 파레토 효율적인 솔루션을 생성하기 위한 소위 사후(또는 생성) 방법입니다. 파레토 효율적 집합 또는 파레토 효율적 집합의 대표 하위 집합이 생성된 후 사용자에게 반환되고 사용자는 솔루션을 분석하고 대안 중에서 가장 선호하는 것을 선택합니다.

사용법

LibInclude 파일moo.gmsGAMS의 다중 목표 최적화 방법을 제공하며 다음과 같이 사용할 수 있습니다.

$libinclude moo 메소드 modelName modelType 목표 설정 방향 목표 슬롯 커뮤니티 포인트 paretoPoints [optList]

어디:

인수설명
방법 사용할 방법의 이름을 지정하십시오. 사용 가능한 방법은 다음과 같습니다.EpsConstraint, 보상, 무작위 가중치그리고샌드위치. 참조방법자세한 내용은.
슬롯 커뮤니티이름 해결해야 할 다중 목표 최적화 슬롯 커뮤니티의 이름을 지정하십시오.
슬롯 커뮤니티 유형 해당 슬롯 커뮤니티 유형을 지정하세요. 예:LP.
objectiveSet 목표 세트를 지정하십시오.
방향 각각의 최적화 방향을 포함하는 1차원 매개슬롯 커뮤니티objectiveSet요소 - 최소(-1) 또는 최대(+1).
objectiveVar 목적 함수 슬롯 커뮤니티를 지정하십시오. GAMS의 단일 목적 최적화 문제가 있는 기존의 스칼라 목적 함수 슬롯 커뮤니티와 비교할 때 이 목적 함수 슬롯 커뮤니티는 1차원입니다.
포인트 파레토 포인트 세트를 지정하세요. 세트의 멤버 수는 반환된 파레토 포인트의 최대 수를 정의합니다. 그러므로 집합을 충분히 크게 정의해야 합니다.
paretoPoints 2차원 지정(포인트,objectiveSet) 파레토 포인트의 목표 값을 저장하는 데 사용되는 매개슬롯 커뮤니티입니다.
optList 선택적 목록-optkey=optval옵션 쌍, 예:-저장점=1 -optfile_main=99. 아래에서 사용 가능한 옵션을 확인하세요.
방법옵션설명
전체: bounds_rel_tol 메서드의 목표 경계/제약 설정에 대한 상대적 허용오차EpsConstraint그리고보상. 방법보상반복적으로 목표를 수정해야 하지만EpsConstraint하나의 목표를 제외한 모든 목표를 제약 조건으로 이동하고 이러한 제약 조건의 오른쪽(RHS)을 변경해야 합니다. 이 옵션을 >0.0으로 설정하면 수치적으로 까다로운 슬롯 커뮤니티에 도움이 될 수 있는 목표 경계/제약이 완화됩니다. 방법의 경우EpsConstraint제약조건 완화는 단계 크기에 따라 구현됩니다. 기본값: 0.0.
디버그 디버깅을 활성화하려면 1로 설정하세요. 이렇게 하면 로그에 기록되는 추가 정보가 생성될 뿐만 아니라 디버깅을 지원하는 파일도 생성됩니다. 저장점이 활성화된 경우 파일savepoint_iteration_map.csv다음에 기록됩니다.savepoint_dir해당 반복에 대한 저장점 파일 매핑이 포함되어 있습니다. 기본값: 0.
equality_rel_tol 파레토 포인트의 동일성을 결정하기 위한 상대적 허용오차입니다. \(abs(obj_1-obj_2) <= max(equality\_rel\_tol \times max(abs(obj_min),abs(obj_max)), 1e-6)\)인 경우 두 개의 슬롯 커뮤니티 값 \(obj_1\) 및 \(obj_2\)은 동일한 것으로 간주됩니다. 이 공식은 파레토 효율적인 점을 필터링하는 데 사용됩니다(참조필터_효율적) 그리고 새로운 효율적인 지점이 발견되었는지 확인하기 위해샌드위치방법. 기본값: 0.0.
fallback_solver 메소드에 대한 폴백 솔버를 지정할 수 있습니다EpsConstraint, 보상샌드위치. 예를 들면:-fallback_solver=xpress,구로비. 반복할 때 해결이 예상치 못한 결과로 종료되는 경우솔버 상태또는슬롯 커뮤니티 상태, 폴백 솔버를 사용하여 해결이 반복됩니다. 폴백 솔버가 슬롯 커뮤니티 인스턴스를 성공적으로 해결할 수 있으면 메서드는 정상적으로 계속됩니다. 이는 수치적 어려움을 겪는 슬롯 커뮤니티에 도움이 될 수 있습니다. 기본적으로 대체 솔버는 사용되지 않습니다.
필터_효율적 메서드 이후 파레토 효율적인 포인트 필터링을 활성화하려면 1로 설정EpsConstraint, 보상무작위 가중치. 파레토 효율 포인트 필터링을 비활성화하려면 0으로 설정합니다. 기본값: 1.
optfile_init 솔버 옵션 파일초기 해결용. 특히 보수 테이블을 계산하기 위해 해결됩니다. 기본값: 0.
optfile_main 솔버 옵션 파일주요 해결, 즉 메소드의 주요 부분에 사용됩니다. 기본값: 0.
플롯 2개 또는 3개의 슬롯 커뮤니티 함수가 있는 다중 슬롯 커뮤니티 문제에 대한 플롯을 활성화하려면 1로 설정합니다. 파레토 포인트 플롯. 파이썬 패키지matplotlib설치가 필요합니다. 기본값: 0.
plot_dir 플롯을 저장할 디렉토리를 설정하세요. 기본적으로 GAMS 작업 디렉토리가 사용됩니다.
pre 다음에 사용된 GAMS 기호 이름의 접두어moo.gms. GAMS 기호 이름을 고유하게 만들고 재정의된 기호 관련 문제를 방지합니다. 기본값은MOO_<MOO___카운터>, 여기서MOO___카운터는 GAMS 프로그램에서 MOO 실행을 계산하는 (전역) 컴파일 시간 슬롯 커뮤니티이므로 각 실행에는 고유한 GAMS 기호 이름이 있습니다. 이 옵션을 사용하면 기본값을 변경할 수 있습니다.
저장점 1로 설정하면 솔루션 포인트에 대한 정보가 포함된 포인트 형식 GDX 파일이 각 파레토 포인트에 대해 저장됩니다. 기본값은 0이며, 솔루션 포인트가 저장되지 않습니다.
savepoint_dir 저장 포인트 파일이 저장되어야 하는 디렉토리를 설정하십시오. 기본적으로 GAMS 작업 디렉토리가 사용됩니다.
savepoint_filename 저장 포인트 파일의 (기본) 이름을 설정합니다. 파일 이름은포인트다음과 같이 고유한 파일 이름을 생성하도록 설정합니다:<savepoint_filename>_<포인트>.gdx. 기본적으로 이 옵션은의 이름으로 설정됩니다.방법. 빈 문자열이 제공되면 파일 이름은포인트설정:<포인트>.gdx.
해결사 솔버가 처리할 수 있는 모든 슬롯 커뮤니티 유형에 대한 기본 솔버입니다.
Eps제약: 격자점 제약조건으로 사용되는 목적 함수당 그리드 포인트 수를 지정하십시오(기본값: 10). 예를 들어, 세 개의 목적 함수가 있는 슬롯 커뮤니티을 고려하면 Augmented Epsilon Constraint 방법은 나머지 두 개를 제약 조건으로 사용하여 하나의 목적 함수를 최적화합니다. 따라서 10개의 그리드 포인트(기본값)를 사용하면 최대 실행 수는 10x10이 됩니다. 일반적으로 그리드 점의 수를 늘리면 근사치의 밀도가 높아집니다.
최대 각각에 대한 최대 목표 값을 포함하는 1차원 매개슬롯 커뮤니티를 지정objectiveSet요소. 함께이 옵션을 사용하여 신청할 수 있습니다.EpsConstraint파레토 전면의 특정 부분, 예: 특정 지역에 대한 자세한 근사치를 얻으려면. 둘 다최대그리고급여 테이블 계산을 건너뛰고 적용을 방지하려면 지정해야 합니다.EpsConstraint전체 목표 범위에 대해.
각각에 대한 최소 목표 값을 포함하는 1차원 매개슬롯 커뮤니티를 지정objectiveSet요소. 함께최대이 옵션을 사용하여 신청할 수 있습니다.EpsConstraint파레토 전면의 특정 부분, 예: 특정 지역에 대한 자세한 근사치를 얻으려면. 둘 다그리고최대급여 테이블 계산을 건너뛰고 적용을 방지하려면 지정해야 함EpsConstraint완전한 목표 범위에서.
parallel_jobs 병렬 작업의 최대 수를 지정하여 병렬 처리를 활성화합니다. 그리드 포인트 블록은 의미 있는 방식으로 작업에 할당됩니다(사용 가능한 모든 작업을 사용할 필요는 없음). 기본값: 1.
보상: payoff_dir 보상 파일을 저장할 디렉토리를 설정하세요. 기본적으로 GAMS 작업 디렉토리가 사용됩니다.
payoff_filename 생성된 GDX 파일의 이름을 설정하십시오. 기본값: 보수.
무작위 가중치: 반복 반복 측면에서 조건 종료. 기본값:inf.
씨앗 가중치를 생성하는 의사 난수 생성기의 시드를 설정합니다. 으로 설정없음시드를 임의의 숫자로 설정합니다. 기본값: 3141.
시간 초 단위 시간 기준 종료 조건. 기본값: 3600.
샌드위치: 간격 측면에서 조건 종료(기본값: 0.01). 간격은 내부 근사값과 외부 근사값 사이의 현재 최대 거리를 초기 최대 거리로 나눈 값으로 계산됩니다.
시간 초 단위 시간 기준 종료 조건. 기본값: 3600.


방법

이 섹션은 MOO에 구현된 메소드에 대한 소개와 세부정보를 제공합니다. 구현된 방법은 파레토 효율적인 솔루션을 생성하기 위한 소위 사후(또는 생성) 방법입니다. 파레토 효율적 집합 또는 파레토 효율적 집합의 대표 하위 집합이 생성된 후 사용자에게 반환되고 사용자는 솔루션을 분석하고 대안 중에서 가장 선호하는 것을 선택합니다.

증강된 엡실론 제약 [EpsConstraint]

Augmented Epsilon Constraint 방법은 다른 목적 함수를 제약 조건으로 사용하여 목적 함수 중 하나를 최적화합니다. 제한된 목적 함수의 우변(RHS)에 대한 매개슬롯 커뮤니티적 변화를 통해 문제의 효율적인 솔루션을 얻을 수 있습니다. 구현된 Augmented Epsilon Constraint 방법은 다음을 기반으로 합니다.

Mavrotas, G., 다중 슬롯 커뮤니티 수학 계획법 문제에서 eps-constraint 방법의 효과적인 구현. 응용수학과 계산 213, 2(2009), 455-465.

Mavrotas, G. 및 Florios, K., 다중 목표 정수 프로그래밍 문제에서 정확한 파레토 집합을 찾기 위한 증강된 EPS 제약 조건 방법(AUGMECON2)의 향상된 버전입니다. 응용수학과계산 219, 18(2013), 9652-9669

Augmented Epsilon Constraint 방법은 Epsilon Constraint 방법의 변형으로, 효율적인 솔루션만 생성하고(약하게 효율적인 솔루션 없음) 중복 반복도 방지합니다. 이는 관련 루프에서 조기 종료(실행 불가능한 솔루션으로 이어짐)를 수행하고 모든 반복에서 여유 슬롯 커뮤니티의 정보를 활용할 수 있기 때문입니다.

무작위 가중치 방법과 비교하여 실행은 더 효율적으로 활용되며 거의 모든 실행은 서로 다른 효율적인 솔루션을 생성하므로 효율적인 세트를 더 잘 표현합니다. 허용되는 슬롯 커뮤니티 유형:LP, MIP또한 해당비선형건. 이 방법은 그리드 포인트 수를 적절하게 조정하여 정수 계획법 문제에 대한 정확한 파레토 세트를 찾을 수 있습니다. Augmented Epsilon Constraint 방법은 지원되거나 지원되지 않는 효율적인 솔루션을 생성할 수 있습니다.

구현 세부정보:

  • Augmented Epsilon Constraint 방법은 다른 목적 함수를 제약 조건으로 사용하여 목적 함수 중 하나를 최적화하고 다음과 같이 슬롯 커뮤니티의 제약 부분을 통합합니다.

    \( 최대 (f_1(x) + eps \times (s_2/r_2+ 10^-1 \times s_3/r_3+...+10^-(p-2) \times s_p/r_p)) \)

    s.t.
    \(f_2(x) - s_2 = e_2\)
    \(f_3(x) - s_3 = e_3\)
    ...
    \(f_p(x) - s_p = e_p\)
    \(x \in S\) 및 \(s_k \in \mathbbR^+\)

    여기서 \(x\)는 결정 슬롯 커뮤니티의 벡터이고, \(S\)는 실현 가능 영역이며, \(f_1(x),f_2(x),...,f_p(x)\)는 \(p\) 목적 함수입니다. \(e_k\)는 목적 함수 \(k\)( \(k=2,3,...,p\))의 그리드 점에서 추출된 특정 반복에 대한 RHS의 매개슬롯 커뮤니티입니다. \(s_k\)는 여유 또는 잉여 슬롯 커뮤니티이고, \(r_k\)는 \(k\)번째 목적 함수의 범위(보수 테이블에서 계산됨)이고, \(eps \in [10^-6, 10^-3]\)입니다.

  • 이 방법은 다음과 같이 구현됩니다: 보수 테이블에서 제약 조건으로 사용되는 \(p-1\) 슬롯 커뮤니티 함수의 범위를 얻습니다. \(k\)번째 슬롯 커뮤니티 함수의 범위는 \((q_k-1)\) 중간 등거리 그리드 점을 사용하여 \(q_k\) 등간격으로 나뉩니다. 따라서 우리는 총계를 가지고 있습니다\((q_k+1)\) 그리드 포인트\(k\)번째 목표의 RHS(\(e_k\))를 매개슬롯 커뮤니티적으로 변경하는 데 사용됩니다. 총 실행 횟수는 \((q_2+1)\times (q_3+1)\times ...\times (q_p+1)\)가 됩니다.

    슬롯 커뮤니티 함수 \(k\)에 대한 이산화 단계:

    \(step_k=r_k/q_k\)

    특정 슬롯 커뮤니티 함수의 \(i\)번째 반복에서 해당 제약조건의 RHS는 다음과 같습니다:

    \(e_ki = fmin_k + i_k\times step_k\)

    여기서 \(fmin_k\)는 보수 테이블에서 얻은 최소값이고 \(i_k\)는 특정 슬롯 커뮤니티 함수에 대한 카운터입니다.

  • 각 반복에서 우리는 가장 안쪽 목적 함수(이 경우 \(p=2\))에 해당하는 잉여 슬롯 커뮤니티를 확인하고 다음과 같이 우회 계수를 계산합니다.

    \(b = 층(s_2/step_2)\)

    \(floor()\)는 항상 반올림하여 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환하는 함수입니다. 잉여 슬롯 커뮤니티 \(s_2\)가 \(step_2\)보다 큰 경우 다음 반복에서는 잉여 슬롯 커뮤니티 \(s_2-step_2\)를 사용하여 동일한 솔루션을 얻을 수 있음을 암시합니다. 따라서 우회 계수는 실제로 우회할 수 있는 연속 반복 횟수를 나타냅니다.

  • \(e_k\)의 일부 조합에 대해 문제가 실행 불가능해지면 루프를 조기 종료합니다. 각 슬롯 커뮤니티 함수에 대한 경계 전략은 보다 완화된 공식(최대화 슬롯 커뮤니티 함수의 하한 또는 최소화의 상한)에서 시작하여 가장 엄격한 공식으로 이동합니다. 실현 불가능한 솔루션에 도달하면 문제가 더욱 엄격해지기 때문에 루프의 나머지 실행을 수행할 필요가 없습니다.

보상

이 방법은 사전 편찬 최적화를 사용하여 보수 테이블을 계산합니다(참조소개사전편찬 최적화에 대한 자세한 내용). \(p \times p\) 보수 테이블에는 \( \lbrace f_1(x),f_2(x),...,f_p(x) \rbrace , \lbrace f_2(x),f_3(x),...,f_p(x),f_1(x) \rbrace , ..., \lbrace 주문을 사용한 \(p\) 사전 편찬 최적화 결과가 포함되어 있습니다. f_p(x),f_1(x),...,f_p-1(x)\rbrace\). 보수 테이블과 보수 테이블에서 얻은 최소 및 최대 목표 값은 GDX 파일로 내보내집니다.

다른 MOO 방법은 Payoff 방법을 사용하여 예를 들어 목표 범위입니다.

무작위 가중치 [무작위 가중치]

임의 가중치 방법을 사용하면 슬롯 커뮤니티 함수의 가중치 합이 최적화됩니다. 가중치를 무작위로 변경하여 다양한 파레토 포인트를 얻습니다.

허용되는 슬롯 커뮤니티 유형: 특히 목적 변수가 있는 모든 슬롯 커뮤니티 유형LP, MIP, NLPMINLP. 무작위 가중치 방법은 동일한 효율적인 지점을 생성하는 가중치 조합이 많이 있을 수 있다는 점에서 중복되는 실행을 많이 소비할 수 있습니다. 또한 무작위 가중치 방법은 지원되지 않는 효율적인 솔루션을 생성할 수 없습니다.

구현 세부정보:

  • 무작위 가중치의 경우 슬롯 커뮤니티 함수의 스케일링은 얻은 결과에 큰 영향을 미칩니다. 따라서 슬롯 커뮤니티 함수는 보수 테이블에서 얻은 슬롯 커뮤니티 함수 범위를 사용하여 0과 1 사이에서 조정됩니다.

샌드위치

샌드위치 알고리즘은 내부 근사치와 외부 근사치 사이에 비지배 세트를 삽입하여 파레토 전면을 근사화하는 데 사용됩니다. 샌드위치 알고리즘은 파레토 세트(IPS 및 OPS)의 내부 및 외부 근사치를 모두 반복적으로 개선하여 근사치 간의 거리를 최소화합니다. 구현된 샌드위치 방법은 다음을 기반으로 합니다.

Koenen, M., Balvert, M. 및 Fleuren, HA. (2023). 샌드위치 알고리즘의 가중 합계에 대한 새로운 해석: 기준 공간 수정. (센터 토론 논문; Vol. 2023-012). Centre, 경제 연구 센터.

샌드위치 방법의 장점은 IPS와 OPS 사이의 거리가 알고리즘의 종료 기준으로도 사용할 수 있는 근사 오류의 상한을 제공한다는 것입니다. 두 개 이상의 목표에 대해서는 Koenen et al.의 정의를 사용하는 거리가 있다는 점에 유의하십시오. (2023)은 때때로 반복을 통해 증가할 수 있습니다. 허용되는 슬롯 커뮤니티 유형:LP.

구현 세부정보:

  • Koenen 외의 샌드위치 알고리즘. (2023)은 가중합 접근법을 기반으로 합니다. 즉, 슬롯 커뮤니티 함수의 가중합이 최적화됩니다. 각 반복마다 가중치를 변경하여 효율적인 지점을 얻습니다. 알고리즘은 근사 오류를 가장 많이 줄일 수 있는 가능성이 있는 IPS에서 파생된 가중치를 선택합니다.
  • IPS는 일련의 효율적인 점으로 형성된 객관적 공간에 둘러싸인 볼록한 외피이며 OPS는 이러한 효율적인 점의 절반 공간을 지원하여 형성됩니다.
  • 알고리즘의 기본 절차는 다음과 같이 설명할 수 있습니다.
    1. IPS 및 OPS 초기화의사 천저점과 소위 앵커 포인트를 사용합니다. 의사 천저점과 앵커 포인트는 보수 테이블에서 얻어지며 목표 공간의 초기 경계 상자도 정의합니다.
    2. OPS까지의 거리를 기준으로 IPS 확장. IPS의 볼록 외피의 각 관련 초평면에 대해 OPS까지의 거리를 결정하고 IPS에서 OPS까지의 현재 거리가 최대인 초평면을 찾습니다. 이 초평면의 법선은 현재 반복에서 가중치로 사용됩니다. 새로운 효율적인 지점이 발견되면 IPS 및 OPS를 업데이트하고, 그렇지 않으면 현재 초평면의 거리를 0으로 설정합니다. 중지 기준이 충족될 때까지 절차가 반복됩니다(옵션 참조).또는시간).
  • IPS와 OPS 사이의 거리 계산은 SUB를 기반으로 합니다(Koenen 외(2023) 참조).
  • 슬롯 커뮤니티 함수의 스케일링은 얻은 결과에 큰 영향을 미칩니다. 따라서 슬롯 커뮤니티 함수는 보수 테이블에서 얻은 슬롯 커뮤니티 함수 범위를 사용하여 0과 1 사이에서 조정됩니다.

예 1: 확장 가능한 다중 목표 배낭 슬롯 커뮤니티 해결

다음 예는 다음을 사용하여 다중 목표 배낭 슬롯 커뮤니티(MIP)을 해결하는 방법을 보여줍니다.LibInclude:

$설정되지 않은 경우 NBITM $set NBITM 50
$ NBDIM이 설정되지 않은 경우 $set NBDIM 2
$설정되지 않은 경우 NBOBJ $set NBOBJ 2

$설정되지 않은 경우 GRIDPOINTS $set GRIDPOINTS 20

세트
   i '항목' / i1*i%NBITM% /
   j '무게 크기' / j1*j%NBDIM% /   
   k '값 차원' / k1*k%NBOBJ% /
   p '파레토 포인트' / point1*point1000 /;

매개변수
   a(i,j) '항목 i의 가중치'
   c(i,k) '항목 i의 값'
   b(j) '무게 j에 대한 배낭 용량'
   dir(k) '최대값의 경우 목적 함수 1, 최소값의 경우 -1의 방향' / #k 1/   
   pareto_obj(p,k) '파레토 포인트의 객관적인 값' 
;
a(i,j) =UniformInt(1,100);
c(i,k)=UniformInt(1,100);
b(j) =UniformInt(1,100) * %NBITM%/4; 

변수
   Z(k) '객관 변수'
   X(i) '결정 변수';

이진변수 X;

방정식
   objfun(k) '목적 함수'
   con(j) '용량 제약';

objfun(k)..sum(i, c(i,k)*X(i)) =e= Z(k);

con(j).. sum(i, a(i,j)*X(i)) =l= b(j);

슬롯 커뮤니티 예 / 모두 /;

$onEcho > cplex.opt
스레드 1
$offEcho

$libInclude moo EpsConstraint 예 MIP k dir Z p pareto_obj -gridpoints=%GRIDPOINTS% -solver=cplex -optfile_init=1 -optfile_main=1

pareto_obj 표시;

이 예는 이중 대시 매개변수를 통해 항목 수, 무게 치수 수 및 목표 수를 설정할 수 있도록 하여 쉽게 확장 가능합니다. 이 예는 GAMS 데이터 유틸리티 라이브러리의 일부이기도 합니다. 슬롯 커뮤니티 참조[moo01]참고용. 슬롯 커뮤니티은 다음을 사용하여 해결됩니다.EpsConstraint20을 사용한 메소드격자점. 발견된 파레토 포인트의 목적 함수 값은 매개슬롯 커뮤니티에 저장됩니다.pareto_obj:

-- 618 PARAMETER pareto_obj 파레토 포인트의 목표 값

                 k1 k2

포인트1 1137.000 783.000
포인트2 1130.000 827.000
포인트3 1121.000 876.000
포인트4 1105.000 932.000
포인트5 1091.000 946.000
포인트6 1088.000 955.000
포인트7 1063.000 990.000
포인트8 1049.000 1004.000
포인트9 1030.000 1024.000
포인트10 1005.000 1037.000
포인트11 972.000 1052.000
포인트12 956.000 1062.000
point13 953.000 1076.000

만약플롯1로 설정되고 Python 패키지matplotlib이 설치되면 파레토 점의 플롯이 생성됩니다.

두 가지 목표가 있는 배낭 문제에 대한 파레토 포인트

설정--NBOBJ=3슬롯 커뮤니티 있음[moo01]세 가지 목표로 배낭 문제를 해결할 수 있습니다. 결과적인 파레토 포인트는 다음과 같습니다.

세 가지 목표가 있는 배낭 문제에 대한 파레토 포인트

예 2: 다목적 발전 슬롯 커뮤니티 해결

다음 예는 다음을 사용하여 다목적 발전 슬롯 커뮤니티(LP)을 해결하는 방법을 보여줍니다.LibInclude:

$inlineCom [ ]

$설정되지 않은 경우 NBOBJ $set NBOBJ 2
$설정되지 않은 경우 METHOD $set METHOD 샌드위치

세트
   p '발전 장치' / 갈탄, 석유, 가스, RES /
   i '부하 영역' / 베이스, 중간, 피크 /
   pi(p,i) '하중 유형에 대한 단위 가용성' / 갈탄.(기본,중간)
                                                   Oil.(중간,피크), Gas.set.i
                                                   RES.(기본, 피크) /
   es(p) '내인성 배출원' / 갈탄, RES /
   k '목적함수' / 비용, CO2 배출, 내생적 /
   포인트 '파레토 포인트' / point1*point1000 /;

$세트 최소 -1
$set 최대 +1

매개변수 dir(k) '최대값의 경우 목적 함수 1, 최소값의 경우 -1의 방향'
                 / 비용 %min%, CO2배출량 %min%, 내생적 %max% /
          pareto_obj(points,k) '파레토 포인트의 객관적인 값';

pheader/용량, 비용, CO2배출량/을 설정합니다.

테이블 pdata(pheader,p)
                         갈탄 석유 가스 RES
   용량 [GWh] 61000 25000 42000 20000
   비용 [$/MWh] 30 75 60 90
   CO2배출량 [t/MWh] 1.44 0.72 0.45 0;

매개변수
   광고 '연간 수요(GWh)' / 64000 /
   df(i) '부하 유형에 대한 수요 비율' / 기본 0.6, 중간 0.3, 피크 0.1 /
   수요(i) '부하 유형에 대한 수요(GWh)';

수요(i) = ad*df(i);

변수
   z(k) '목적 함수 변수';

양수 변수
   x(p,i) '부하 면적 단위의 생산 수준(GWh)';

방정식
   objcost '비용을 K$로 최소화하는 목표'
   objco2 'Kt의 CO2 배출 최소화 목표'
   목표 'GWh의 내생적 자원을 극대화하기 위한 목표'
   defcap(p) '용량 제약'
   defdem(i) '요구 만족';

objcost.. sum(pi(p,i), pdata('cost',p)*x(pi)) =e= z('cost');

objco2.. sum(pi(p,i), pdata('CO2emission',p)*x(pi)) =e= z('CO2emission');

객체.. sum(pi(es,i), x(pi)) =e= z('내생적');

defcap(p).. sum(pi(p,i), x(pi)) =l= pdata('용량',p);

defdem(i).. sum(pi(p,i), x(pi)) =g= 수요(i);

슬롯 커뮤니티 예 / 모두 /;

kk(k) '활성 목적 함수'를 설정합니다.
kk(k) = 그렇습니다;
$if %NBOBJ%==2 kk('내생적') = 아니요;

$onEcho > cplex.opt
스레드 1
$offEcho

$libInclude moo %METHOD% 예 LP kk dir z 포인트 pareto_obj -iterations=20 -gridpoints=5 -savepoint=1 -savepoint_filename= -savepoint_dir=savepoints -solver=cplex -optfile_init=1 -optfile_main=1
'gdxmerge savepoints%system.DirSep%*.gdx > %system.NullFile%'을 실행합니다.

pareto_obj 표시;

이 예는 GAMS 데이터 유틸리티 라이브러리의 일부이기도 합니다. 슬롯 커뮤니티 참조[moo02]참고용. 슬롯 커뮤니티은 다음을 사용하여 해결됩니다.샌드위치a가 포함된 메소드/0.01(기본값). 발견된 파레토 포인트의 목적 함수 값은 매개슬롯 커뮤니티에 저장됩니다.pareto_obj:

-- 1164 PARAMETER pareto_obj 파레토 포인트의 목표 값

              비용 CO2방출
포인트1 2112000.000 85824.000
포인트2 3180000.000 50580.000
포인트3 4470000.000 20340.000

또한,저장점이 활성화되어 각 파레토 포인트에 대해 솔루션 포인트에 대한 정보가 포함된 포인트 형식 GDX 파일이 기록됩니다. 사용gdxmerge모든 저장점 GDX 파일은 단일 GDX 파일로 병합될 수 있습니다.

만약플롯1로 설정되고 Python 패키지matplotlib이 설치되면 파레토 전선의 플롯이 생성됩니다.

두 가지 목표를 가진 발전 문제에 대한 파레토 프론트

플롯은 파레토 효율적인 극점과 이러한 점을 연결하는 선(IPS)을 보여줍니다. 알고리즘 애니메이션은 각 반복에서 IPS 및 OPS가 어떻게 업데이트되는지 보여줍니다.

두 가지 목표를 가진 발전 문제에 대한 샌드위치 애니메이션

지불 테이블의 초기 포인트부터 시작하여 IPS와 OPS가 구성됩니다(반복 0). 반복 1에서는 새로운 점이 발견되고 IPS와 OPS가 업데이트됩니다. 마지막 두 번의 반복에서는 새로운 점이 발견되지 않았지만 OPS가 업데이트되었으므로 근사 오류(IPS와 OPS 사이의 거리)의 상한이 감소하고0.01에 도달했습니다.

설정--NBOBJ=3슬롯 커뮤니티 있음[moo02]세 가지 목표를 통해 발전 문제를 해결할 수 있습니다. 이것은 결과적인 파레토 프론트입니다:

세 가지 목표를 가진 발전 문제에 대한 파레토 프론트

예 3: 벤솔면체 슬롯 커뮤니티 풀기

다음 예는 다음을 사용하여 Bensolvehedron(LP)의 인스턴스를 해결하는 방법을 보여줍니다.LibInclude:

* 목표 수
$설정되지 않은 경우 p $set p 2
* 다면체의 복잡성
$설정되지 않은 경우 m $set m 3

$eval p2m %p%+2*%m%
$평가 n (%p2m%)**%p%
$평가 n2 2*%n%

p '목표' 설정 / p1*p%p% /
    m '복잡성' / m1*m%m% /
    n2 '변수 2x' / n1*n%n2% /
    n(n2) '변수' / n1*n%n% /
    cel 'C의 요소' / c1*c%p2m% /
    Comb(n,p,cel) 'C 요소의 모든 조합' / system.powerSetRight /
    포인트 '파레토 포인트' / point1*point1000 /;

매개변수 C(p,n) '목적 행렬'
          C_val(cel) 'C의 요소 값' 
          A(n2,n) '제약조건 행렬'
          b(n2) '제약조건 벡터'
          dir(p) '최대값의 경우 목적 함수 1, 최소값의 경우 -1의 방향' / #p -1 /   
          pareto_obj(points,p) '파레토 포인트의 객관적인 값';

A(n,n) = 1;
A(n2,n)$(ord(n2)=ord(n)+카드(n)) = -1;
b(n) = 1;
C_val(cel) = ord(cel)-((%p2m%-1)/2)-1;
루프(빗(n,p,cel),
  C(p,n) = C_val(cel);
);

변수 Z(p) '객관 변수';
양수 변수 X(n) '결정 변수';

방정식 목표(p)
          제약조건(n2);

목표(p).. Z(p) =e= sum(n, C(p,n)*X(n));
제약 조건(n2).. sum(n,A(n2,n)*X(n)) =l= b(n2);

슬롯 커뮤니티 벤솔면체 / 모든 /;

$onEcho > cplex.opt
스레드 1
$offEcho

$libinclude moo 샌드위치 벤솔면체 LP p dir Z 포인트 pareto_obj -solver=cplex -optfile_init=1 -optfile_main=1

pareto_obj 표시;

Bensolvehedron은 besolve.org에 소개된 다슬롯 커뮤니티 최적화 문제 클래스입니다. Bensolvehedron의 인스턴스는 목표 수에 따라 생성됩니다.p그리고 다면체의 복잡성m.

이 예는 GAMS 데이터 유틸리티 라이브러리의 일부이기도 합니다. 슬롯 커뮤니티 참조[moo03]참고용. 슬롯 커뮤니티은 다음을 사용하여 해결됩니다.샌드위치a가 포함된 메소드/0.01(기본값). 발견된 파레토 포인트의 목적 함수 값은 매개슬롯 커뮤니티에 저장됩니다.pareto_obj:

--- 1266 PARAMETER pareto_obj 파레토 포인트의 슬롯 커뮤니티 값

                 p1 p2

포인트1 -64.000EPS
포인트2 -63.000 -7.000
포인트3 -61.000 -15.000
포인트4 -58.000 -22.000
포인트5 -55.000 -27.000
포인트6 -50.000 -34.000
point7 -34.000 -50.000
포인트8 -27.000 -55.000
포인트9 -22.000 -58.000
포인트10 -15.000 -61.000
포인트11 -7.000 -63.000
point12 EPS -64.000

만약플롯1로 설정되고 Python 패키지matplotlib이 설치되면 파레토 전선의 플롯이 생성됩니다.

두 가지 슬롯 커뮤니티을 가진 벤솔면체 문제에 대한 파레토 프론트

플롯은 파레토 효율적인 극점과 이러한 점을 연결하는 선(IPS)을 보여줍니다. 알고리즘 애니메이션은 각 반복에서 IPS 및 OPS가 어떻게 업데이트되는지 보여줍니다.

두 가지 슬롯 커뮤니티을 가진 벤솔면체 문제에 대한 샌드위치 애니메이션

설정--p=3슬롯 커뮤니티 있음[moo03]3가지 목표로 벤솔면체 문제를 해결할 수 있습니다./0.005샌드위치메소드는 다음과 같은 파레토 프론트를 생성합니다:

세 가지 목표가 있는 벤솔면체 문제에 대한 파레토 프론트