설명
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;