emfl.gms : 기존 다중 시설 위치 문제 - 원뿔 형식

설명

2차 순서를 이용한 유클리드 다중 시설 위치 문제
원뿔 제약. m개의 기존 시설 세트가 주어지면,
우리는 직사각형에서 n개의 새로운 시설의 좌표를 계산합니다.
유클리드의 가중 합을 최소화하는 그리드
시설 간 거리.

유클리드 거리를 모델링하기 위해 2차 원뿔 제약 조건을 사용합니다.

Vanderbei, R, 온라인:
https://vanderbei.princeton.edu/ampl/nlmodels/facloc/emfl_socp.mod

선택적 입력:
  --기존 시설의 기존 수
  --새로운 시설의 수
  --그리드의 X 방향으로 N1개 시설 수
  --그리드의 Y 방향 N2 시설 수

new = N1*N2가 있어야 합니다.

키워드: 2차 제약조건 프로그래밍, 원뿔 최적화, 시설 위치 문제

  신규 시설 수는 신규 = N1*N2여야 합니다.

대형 모델 유형 :QCP


카테고리 : 슬롯 나라 모델 라이브러리


메인 파일 : emfl.gms

$title 기존 다중 시설 위치 문제 - 원뿔 형식(EMFL,SEQ=273)

$onText
2차를 이용한 유클리드 다중시설 위치 문제
원뿔 제약. m개의 기존 시설 세트가 주어지면,
우리는 직사각형에서 n개의 새로운 시설의 좌표를 계산합니다.
유클리드의 가중 합을 최소화하는 그리드
시설 간 거리.

유클리드 거리를 모델링하기 위해 2차 원뿔 제약 조건을 사용합니다.

Vanderbei, R, 온라인:
https://vanderbei.princeton.edu/ampl/nlmodels/facloc/emfl_socp.mod

선택적 입력:
  --기존 시설의 기존 수
  --새로운 시설의 수
  --그리드의 X 방향으로 N1개 시설 수
  --그리드의 Y 방향 N2 시설 수

new = N1*N2가 있어야 합니다.

키워드: 2차 제약조건 프로그래밍, 원뿔 최적화, 시설 위치 문제
$offText

* 신규 시설 수는 반드시 신규여야 함 = N1*N2
$설정되지 않은 경우 $set old 200
$설정되지 않은 경우 N1 $set N1 5
$설정되지 않은 경우 N2 $set N2 5
$설정되지 않은 경우 N $eval new %N1%*%N2%

세트
   m '오래된 시설' / m1*m%old% /
   nX 'x방향 시설수' / nX1*nX%N1% /
   nY 'y방향 시설수' / nY1*nY%N2% /
   n '총 신규 시설 수' / n1*n%new% /
   d '차원' / 'x축', 'y축' /;

별칭(nn,n);

매개변수
   coords(m,d) '기존 시설의 좌표'
   w(m,n) '신규 및 기존 시설 쌍과 관련된 가중치'
   v(n,n) '신규-신규 시설 쌍과 관련된 가중치';

양수 변수
   x(n,d) '새 시설의 좌표'
   s(m,n) '신구 시설 간의 유클리드 거리'
   t(n,n) '신규 시설 간 유클리드 거리';

변수
   diff_o(m,n,d)
   diff_n(n,nn,d)
   obj;

방정식
   목표
   diff_o_eq(m,n,d) '새 것과 오래된 것 사이의 거리를 계산합니다'
   diff_n_eq(n,nn,d) 'new-new 사이의 거리 계산'
   old_dist(m,n) '신구시설 간 거리'
   new_dist(n,n) '신규시설 간 거리';

목표.. obj =e= sum((m,n), w(m,n)*s(m,n)) + sum((n,nn), v(n,nn)*t(n,nn));

diff_o_eq(m,n,d).. diff_o(m,n,d) =e= x(n,d) - 좌표(m,d);

diff_n_eq(n,nn,d).. diff_n(n,nn,d) =e= x(n,d) - x(nn,d);

* MOSEK에 대한 명시적 원뿔 구문
* old_dist(m,n)..s(m,n) =c= sum(d, diff_o(m,n,d));
* new_dist(n,nn).. t(n,nn) =c= sum(d, diff_n(n,nn,d));

old_dist(m,n).. sqr(s(m,n)) =g= sum(d, sqr(diff_o(m,n,d)));

new_dist(n,nn).. sqr(t(n,nn)) =g= sum(d, sqr(diff_n(n,nn,d)));

모델 시설 / 모두 /;

* 균등분포를 통해 기존 좌표 지정
좌표(m,d) = 균일(0,1);

* 계산 가중치: 신규-신규 시설 쌍의 경우 0.2
v(n,nn)$((ord(n) < ord(nn))) = 0.2;

* x-y 직사각형에 균등하게 분포된 새 시설 좌표의 초기 추측
루프((nX,nY),
   loop(n$(ord(n) = (ord(nX) + 카드(nX)*(ord(nY) - 1))),
      x.l(n,'x축') = (ord(nX) - 0.5)/card(nX);
      x.l(n,'y축') = (ord(nY) - 0.5)/card(nY);
   );
);

* 좌표 거리와 초기 추측을 기반으로 가중치를 계산합니다.
* 새로운 시설 좌표
루프((m,n),
   if(abs(좌표(m,'x축') - x.l(n,'x축')) <= 1/(2*카드(nX)) 및
      abs(좌표(m,'y축') - x.l(n,'y축')) <= 1/(2*카드(nY)),
      w(m,n) = 0.95;
   elseIf(abs(좌표(m,'x축') - x.l(n,'x축')) <= 2/(2*카드(nX)) 및
          abs(좌표(m,'y축') - x.l(n,'y축')) <= 2/(2*카드(nY))),
      w(m,n) = 0.05;
   그렇지 않으면
      w(m,n) = 0;
   );
);

obj를 최소화하는 qcp를 사용하여 기능을 해결합니다.

디스플레이 xl;