Network Reliability
Contents
Problem description
We consider the military telecommunications network represented below. This network consists of eleven sites connected by bidirectional lines for data transmission. For reliability reasons in the case of a conflict, the specifications require that the two sites (nodes) 10 and 11 of the network remain able to communicate even if any three other sites of the network are destroyed. Does the network satisfy this requirement?
1 --- 2 ---------- 8
/ | / | / | / | / | / | / | / | / | | | 11 --- 3 ---+---- 10 | | | | \ / \ | / | \ | | X \ | / | | | | / \ \ | / | | | | | | 4 --- 5 --- 9 | | | | | | \ | / | | \ | / \ | \ | / \ | \ ----- 6 ---------- 7
Variables
arcs_out/in For an arc i arcs_out(i) is its starting node and arcs_in(i) ts target node
Reference
Applications of optimization... Gueret, Prins, Seveaux
% Marcus Edvall, Tomlab Optimization Inc, E-mail: tomlab@tomopt.com % Copyright (c) 2005-2009 by Tomlab Optimization Inc., $Release: 7.2.0$ % Written Oct 7, 2005. Last modified Apr 8, 2009.
Problem setup
arcs_in = [1 1 1 2 2 2 3 3 3 3 4 4 4 5 5 6 6 6 7 7 8 9]'; arcs_out = [2 3 11 3 8 9 4 9 10 11 5 6 11 9 11 7 9 10 8 10 10 10]'; n1 = length(arcs_in); % arcs_in n = 2*n1; % bi-directional nodes = length(unique([arcs_in; arcs_out])); arcs_in_new = [arcs_in;arcs_out]; arcs_out = [arcs_out;arcs_in]; arcs_in = arcs_in_new; arcs = tom('arcs',n,1,'int'); % All variables are binary. bnds = {0 <= arcs <= 1}; % Kirchhoff's law, 1 source and 1 sink con1 = cell(nodes-2,1); for i=1:nodes-2 %Assuming 10 and 11 are source and sink idx1 = find(arcs_in == i); idx3 = find(arcs_out == i); con1{i} = {sum(arcs(idx1)) == sum(arcs(idx3))}; end % Limit flow in intermediate node con2 = cell(nodes-2,1); for i=1:nodes-2 %Assuming 10 and 11 are source and sink idx1 = find(arcs_in == i); con2{i} = {sum(arcs(idx1)) <= 1}; end % Source has no incoming flows idx1 = find(arcs_out == nodes-1); con3 = {sum(arcs(idx1)) == 0}; % Objective idx1 = find(arcs_in == (nodes-1)); objective = -sum(arcs(idx1)); constraints = {bnds, con1, con2, con3}; options = struct; options.solver = 'cplex'; options.name = 'Network Reliability'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev > 0 f = -subs(objective,sol); x = -sol.arcs; disp(['The network can manage the loss of ' num2str(f-1) ' nodes.']); disp(['There are ' num2str(f) ' disjunctive paths.']); [arcs,direction] = find(reshape(x,length(arcs_in)/2,2)); disp('For a maximal number of disjunctive paths, activate...'); for arc = 1:length(arcs), if direction(arc) == 1, disp([' arc ' num2str([arcs_out(arcs(arc))]) '->' ... num2str([arcs_in(arcs(arc))])]); end if direction(arc) == 2, disp([' arc ' num2str([arcs_in(arcs(arc))]) '->' ... num2str([arcs_out(arcs(arc))])]); end end end % MODIFICATION LOG % % 051107 med Created. % 060116 per Added documentation. % 060126 per Moved disp to end % 090308 med Converted to tomSym
Problem type appears to be: mip ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05 ===================================================================================== Problem: --- 1: Network Reliability f_k -4.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=101. CPLEX Branch-and-Cut MIP solver Optimal integer solution found FuncEv 7 CPU time: 0.015625 sec. Elapsed time: 0.016000 sec. The network can manage the loss of 3 nodes. There are 4 disjunctive paths. For a maximal number of disjunctive paths, activate... arc 11->1 arc 11->3 arc 11->4 arc 11->5 arc 8->7 arc 1->2 arc 2->8 arc 3->10 arc 4->6 arc 5->9 arc 6->10 arc 7->10 arc 9->10