搜尋 圖片 地圖 Play YouTube 新聞 Gmail 雲端硬碟 更多 »
進階專利搜尋 | 網頁圖片 | 網頁紀錄 | 登入

專利

  

relaxNeighborsfvertex u) <

80 . PathCapEx hCapExU = gelMinCapEx(u);

get Ihis lisl of neighbors of vertex u;

for each neighbor v of vertex u, do the following

90 {

1 ► if (vertex v is settled)

skip vertex v;

//calculate fLoss, fCapEx, and fFiberCost based on the following cases

•\ 00 "a's0 update nSegmentStartType for path_upto_v

if (link(u. v) is a ROADM hop)
{

path_upto_u nSegmentStartType must be SEGMENT_START_FROM_7500_VIA_LAMBDA; otherwise error,
set path_upto_v.nSegmentStartType = SEGMENT_START_FROM_7500_VIA_ LAMBDA;
calculate fLossV, fCapExV, and fFiberCostVaccordingly; (case A)

110^ )

else if (link(u, v) is a ROADM_Auxilary hop)
{

if (link(u, v) is a ROADM_Aux_Hub hop)
{

path_upto_u.nSegmentStartType must be SEGMENT_START_FROM_7500_VIA_LAMBDA; otherwise error,
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case B)

)

else {

//for non-hub ROADM_Auxilary hop: three different cases based on path_upto_u.nSegmentStartType;

//we need to adjust path_uplo_v.nSegmentStartType accordingly

if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7750) {

set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA; } else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_FIBER) {

set path_upto_v.nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA; } else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_LAMBDA) {

set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_FIBER;

}else{

error:

}

calculate fLossV, fCapExV, and fFiberCostV accordingly; (case C)

120 )'

^ else//which means link(u.v) is a fiber hop
{

//there are two cases for a fiber hop:
// i) it starts from a 7750 router; or
//ii) it starts from a 7500 ROADM node

if (path_upto_u nSegmentStartType == SEGMENT_START_FROM_7750) {

set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7750;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case D)

}

else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_FIBER) {

set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_FIBER;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case E)

}

else (

1 30—//update minCapEx for vertex v (i.e., path_upto_v)

PathCapEx hCapExV = getMinCapEx(v); if (null ==hCapExV){

hCapExV = new PathCapEx(fLossV, fCapExV, fFiberCostV, nSegmentType);

setMinCapEx(v, hCapExV); } else if (hCapExV.fCapEx > fCapExV) {

hCapExV = new PathCapEx(fLossV, fCapExV, fFiberCostV, nSegmentType);

setMinCapEx(v, hCapExV);

}

//assign predecessor in shortest path T2f 7'

setPredecessor(v, u); 17A. VJT« /

140

setPredecessor(v, u)

^ predecessors.put(v, u); //adding new entry (v -> u) to the predecessors map }

FIG. 8

[table][merged small]

150^

(1) case A:

fLossV = UniversalConstants.FIBER_LOSS_PER_CO; //constant dB loss for a CO (the dummy node)
fCapExV = hCapExU.fCapEx + amortized cost for lamda access module, e.g.

hMetroGraph.hConfiguration.hROADM_Properties.nLambdaAccessModule/8;
fFiberCostV = hCapExU.fFiberCost + amortized cost for laying new fiber, e.g.

(hFLink.length * hFLink.costNewFiber) / UniversalConstants.WAVELENGTHS_PER_FIBER;

checklfDestlsReached(v);

152-,

(2) case B:

fLossV = UniversalConstants.FIBER_LOSS_PER_CO;
fCapExV = hCapExU.fCapEx + double times amortized cost for lamda access module, e.g.

2* (hMetroGraph.hConfiguration.hROADM_Properties.nLambdaAccessModule/8);
fFiberCostV= hCapExU.fFiberCost;
checklfDestlsReached(v);

154^

(3) case C

151

160

fLossV = UniversalConslants.FIBER_LOSS_PER_CO;
fCapExV = hCapExU.fCapEx + optic interface cost, e.g.

hMetroGraph.hConfiguration.hROADM_Properties.getOpticCostByLoss(hCapExU.fLoss);
fFiberCostV = hCapExU.fFiberCost;
checklfDestlsReachedv();

(4) case D:

fLossV = hCapExU.fLoss + hFLink.lossI 550 + UniversalConstants.FIBER_LOSS_PER_CO;

fFiberCostV = hCapExU.fFiberCost + hFLink.length * hFLink.costSpareFiber;

//CapExV

nt nMDATypeU = hMetroGraph.hConfiguration.getMDATypeByPowerBudget(hCapExU.fLoss);
nt nMDATypeV = hMetroGraph.hConfiguration.getMDATypeByPowerBudget(flossV);
f (nMDATypeU == nMDATypeV) {
fCapExV= hCapExU.fCapEx;

} else {

float fCapExDiff= hMetroGraph.hConfiguration.get7750MDACost(nMDATypeV)

-hMetroGraph.hConfiguration.get7750MDACost(nMDATypeU);

if (fCapExDiff >= 0) {

fCapExV = hCapExU.fCapEx + fCapExDiff;

}else{

error;

checklfDestlsReached(v); t^. (5) case E:

fLossV = hCapExU.fLoss + hFLink.lossI 550 + UniversalConstants.FIBER_LOSS_PER_CO;

fFiberCostV = hCapExU.fFiberCost + hFLink.length * hFLink.costSpareFiber;

float fCapExDiff = hMetroGraph.hConfiguration.hROADM_Properties.getOpticCostByLoss(fLossV)

- hMetroGraph.hConfiguration.hROADM_Properties.getOpticCostByLoss(hCapExU.fLoss);

if (fCapExDiff >= 0){

fCapExV = hCapExU.fCapEx + fCapExDiff;

} else {

error

}

checklfDestlsReached(v);

FIG. 10

procedure checklfDestlsReached(vertex v) {
if (vertex v == Dest)) {

//we have reached Dest node, need to add optic interface cost

int nMDATypeV = hMetroGraph.hConfiguration.getMDATypeByPowerBudget(fLossV);

float fCapExDstOptic;

if (SEGMENT_IO_TO_EO == nPathType) { fCapExDstOptic = hMetroGraph.hConfiguration.get7450MDACost(nMDATypeV); } else {

fCapExDstOptic = hMetroGraph.hConfiguration.get7750MDACost(nMDATypeV);

}

fCapExV += fCapExDstOptic;

}

> FIG. 11

getShortestPath(vertex destination)
{

d = getShortestDistance(vertex destination);
if (d == INFINITE.DISTANCE)
return no_path;

repeatedly calling pred=getPredecessor(v) and append vertex pred to path, until v==source
reverse(path);

return path; FIG 12.

getPredecessor(v)
{

vertex u = predecessors.get(v); //finding the entry whose key is v
return u;

}

FIG. 13

[merged small][graphic][merged small][merged small][merged small][merged small][merged small][merged small][merged small][merged small][merged small][merged small][merged small][graphic][merged small][graphic][merged small][merged small]
« 上一頁繼續 »