2016-11-23 6 views
0

내 친구들이 AMPL 프로젝트에서 작업 중입니다. 프로젝트의 목표는 광 네트워크에서 수익을 극대화하는 것입니다. 네트워크는 라우터 또는 스플리터없이 작동합니다. 캐비닛이있는 노드 만 x 파이버가있는 케이블 하나를 파이버가 적은 케이블로 분할하거나 다른 케이블과 연결하여 파이버가 더 많은 케이블을 만들 수 있습니다. 즉, 하나의 전용 광섬유가 하나의 중앙 노드에서 n 개의 클라이언트가있는 액세스 포인트에 도달해야합니다 (클라이언트가 액세스 포인트에 연결되는 방식에 대해 걱정할 필요가 없습니다). 우리는 모든 노드 (중앙 노드, 중계 노드 및 액세스 포인트) 사이에 케이블을 배치하는 데 드는 비용과 길이 (각 유형의 케이블은 km 당 비용과 광섬유의 수를 갖기 때문에)가 있습니다.AMPL 최적화 - 다른 케이블 유형

우리의 문제는 각 가장자리에 다양한 케이블 유형의 케이블을 가질 수 있다는 것입니다. 우리는 각각의 가장자리에

  1. (우리가 나중에 각 상황에 선언 다른 유형의) 하나 개 이상의 케이블이있을 수 있다는 것을 지금 있도록 AMPL 네트워크 모델에서이 상황을 선언하는 방법을 모른다 우리는 또한 프로그램이 다른 케이블 유형 중에서 선택할 수 있다는 것을 알 수있는 방법을 모른다.

나는 각 가장자리 (링크)에 대해 독립적 인 케이블 세트를 만드는 방법에 대해 생각했지만 그게 AMPL에서 가능합니다.

는 지금까지 우리는 코드

이하가

도움이 많이 이해할 수있을 것이다 , 감사합니다!

set ACCESSPOINTS; 
set TRANSITS; 
set CENTRAL 
set NODES := ACCESSPOINTS union TRANSITS union CENTRAL; 
set LINKS within (NODES cross NODES); 
set CABLES; 
#set DEMANDS within (CENTRAL cross ACCESSPOINTS); 

param demand {ACCESSPOINTS} >=0; 

param trenching_cost {LINKS} >= 0; 
param length {LINKS} >= 0; 

param cabinet_cost {TRANSITS} >= 0; 

param cost_per_km {CABLES} >= 0; 
param fibers {CABLES} >= 0; 

param originates {n in NODES, (i,j) in LINKS} binary := 
     if (i = n) then 1 else 0;       
param terminates {n in NODES, (i,j) in LINKS} binary := 
     if (j = n) then 1 else 0;  

답변

0

당신은

먼저 모델에 목적 함수와 제약을 둬야