# Modular Spare Capacity Placement Design # 13-August-2001 by John Doucette # Copyright (C) 2001 TRLabs, Inc. All Rights Reserved. # ******************************************************** # TRLabs # 7th Floor # 9107 116 Street NW # Edmonton, Alberta, Canada # T6G 2V4 # +1 780 441-3800 # www.trlabs.ca # ******************************************************** # This model, including any data and algorithms contained herein, is the # exclusive property of TRLabs, held on behalf of its sponsors. Except # as specifically authorized in writing by TRLabs, the recipient of this # model shall keep it confidential and shall protect it in whole or # in part from disclosure and dissementation to all third parties. # If any part of this model, including any data and algorithms contained # herein, is used in any derivative works or publications, TRLabs shall be # duly cited as a reference. # TRLabs makes no representation or warranties about the suitability of # this model, either express or implied, including but not limited to # implied warranties of merchantability, fitness for a particular purpose, # or non-infringement. TRLabs shall not be liable for any damages suffered # as a result of using, modifying or distributing this model or its # derivatives. #**************************** # This is an AMPL model for determining the minimum-cost modular SCP # transport network design. #**************************** #**************************** # SETS #**************************** set SPANS; # Set of all spans. set REST_ROUTES{i in SPANS}; # Set of all restoration routes for each span failure i. set MODULES; # Set of all types of capacity modules. #**************************** # PARAMETERS #**************************** param Cost{m in MODULES, j in SPANS}; # Cost of each module of type m on span j. param HopRest{i in SPANS} default card(SPANS); # Maximum length (in hops) of a restoration route. # If not used, default is all spans in the network. param Level{i in SPANS} default 1; # Restoration level required for failure of span i. # If not used, default is 100%. param Work{j in SPANS}; # Number of working wavelengths placed on span j. param ModularCapacity{m in MODULES}; # Wavelength capacity of module type m. param DeltaRestRoutes{i in SPANS, j in SPANS, p in REST_ROUTES[i]} default 0; # Defines restoration routes by identifying which spans they cross. # Equal to 1 if pth restoration route for failure of span i uses span j and 0 otherwise. #**************************** # VARIABLES #**************************** var flowrest{i in SPANS, p in REST_ROUTES[i]} >=0 integer; # Restoration flow through pth restoration route for failure of span i. var modules_placed{j in SPANS, m in MODULES} >=0 integer; # Number of modules of type m placed on span j. var spare{j in SPANS} >=0 integer; # Number of spare wavelengths placed on span j. #**************************** # OBJECTIVE FUNCTION #**************************** minimize totcost: sum{m in MODULES, j in SPANS} Cost[m,j] * modules_placed[j,m]; #**************************** # CONSTRAINTS #**************************** subject to restn{i in SPANS}: sum{p in REST_ROUTES[i]} flowrest[i,p] >= Work[i] * Level[i]; # Failure of span i is fully restorable (up to an optional % level). subject to sparasst{i in SPANS, j in SPANS: i <> j}: spare[j] >= sum{p in REST_ROUTES[i]} DeltaRestRoutes[i,j,p] * flowrest[i,p]; # Enough spare capacity is placed on each span j to accomodate the maximum of # all restoration flows routed over it simultaneously for failure of span i. #subject to hoplmtr{i in SPANS, p in REST_ROUTES[i]}: #sum{j in SPANS} DeltaRestRoutes[i,j,p] <= HopRest[i]; # Each restoration route is subject to a maximum hop length. subject to modasst{j in SPANS}: spare[j] + Work[j] <= sum{m in MODULES} modules_placed[j,m] * ModularCapacity[m]; # Enough of each type of module must be placed on each span j to accomodate the # sum of all working and spare capacity on the span.