2017-07-27 2 views
0

Je suis nouveau sur Cplex et je veux définir deux ensembles nommés PathOfEdge (Ensemble de noeuds dont les routes de travail cross link i) et PathOfOut ((Ensemble de noeuds dont les routes de travail ne se croisent pas i)) dans cplex, Comment puis-je définir l'ensemble PathOfOut?Définition de deux ensembles dans cplex

// Basic network configuration nodes and links 

{string} Hubs = ...; 

tuple link { 

    key string link_id; 
    string org; 
    string dst; 
} 
tuple demand { 
    string org; 
    string dst; 
} 
tuple path_edge 
{ demand request; 
    int k_sp; 

    {link} Links = ...; 
    // basic demand creation based on origin and destination node. 
    {demand} Demands ={<source,tail>|source in Hubs, tail in Hubs: source!= tail }; 
    //Set of eligible routes for recovery of the ith span failure. 
    {link} PathOfDemands[Demands][K_sp]=...; 

Est-ce correct pour PathOfEdge?

//PathOfEdge 
{path_edge} PathOfEdge[l in Links]= {<dem,k>|dem in Demands, k in K_sp : l in PathOfDemands[dem][k]}; 

Une petite partie de mon code pour le chemin le plus court k dans le réseau:

PathOfDemands=[ 
//node1 
//node1->2 

[{<link1 , node1, node2>}, {<link2, node1, node6>,<link11, node6, node2>},  {<link2 , node1, node6>,<link5 , node6, node5>,<link6 , node5, node3>,<link13, node3, node2>}], 

//node 1->6 
[{<link2 , node1, node6>},  {<link1, node1, node2>,<link3 , node2, node6>},  {<link1, node1, node2>,<link4 , node2, node3>,<link14, node3, node5>,<link12, node5, node6>}], 

//node 1->3 
[{<link1 , node1, node2>,<link4 , node2, node3>},  {<link2 , node1, node6>,<link11, node6, node2>,<link4 , node2, node3>}, {<link2 , node1, node6>, <link5 , node6, node5>,<link6 , node5, node3>}], 

//node 1->5 
[{<link2 , node1, node6>,<link5 , node6, node5>}, {<link1 , node1, node2>,<link3 , node2, node6>,<link5 , node6, node5>},  {<link1 , node1, node2>, <link3 , node2, node6>,<link6 , node3, node5>}], 

//node 1->4 
[{<link1 , node1, node2>,<link4 , node2, node3>,<link8 , node3, node4>},  {<link2 , node1, node6>,<link5 , node6, node5>,<link7 , node5, node4>},  {<link1 , node1, node2>,<link5 , node3, node4>,<link5 , node6, node5>,<link7 , node5, node4>}], 

//node2 

//node2->1 
. 
. 
. 
//node 6->5 

et les nœuds et les liens du réseau.

//define nodes of n6s8 network. 
     Hubs = { 
      node1, 
      node2, 
      node3, 
      node4, 
      node5, 
      node6, 

    }; 
    // 
    Links = { 
     <link1 , node1, node2>, 
     <link2 , node1, node3>, 
     <link3 , node2, node3>, 
     <link4 , node2, node4>, 
     <link5 , node3, node4>, 
     <link6 , node3, node5>, 
     <link7 , node4, node5>, 
     <link8 , node4, node6>, 
     <link9 , node5, node6>, 
    ....} 

Répondre

1

Cela ressemble à droite:

tuple link { 
    key string link_id; 
    string org; 
    string dst; 
} 

{link} Links={<"l1","A","B">,<"l2","B","C">,<"l3","C","D">,<"l4","D","E">}; 

// basic demand creation based on origin and destination node. 
{int} Demands = {1,2}; 
{int} K_sp={3,4}; 

//Set of eligible routes for recovery of the ith span failure. 
{link} PathOfDemands[Demands][K_sp]=[[ 
{<"l1","A","B">,<"l3","C","D">,<"l4","D","E">}, 
{<"l2","B","C">,<"l3","C","D">,<"l4","D","E">}], 
[{<"l1","A","B">,<"l2","B","C">,<"l4","D","E">}, 
{<"l1","A","B">,<"l2","B","C">,<"l3","C","D">}] 
]; 

tuple path_edge 
{ int request; 
    int k_sp; 
} 

//PathOfEdge 
{path_edge} PathOfEdge[l in Links]= 
{<dem,k>|dem in Demands, k in K_sp : l in PathOfDemands[dem][k]}; 


execute 
{ 
    writeln(PathOfEdge); 
} 

donne

[{<1 3> <2 3> <2 4>} {<1 4> <2 3> <2 4>} {<1 3> <1 4> <2 4>} { 
     <1 3> <1 4> <2 3>}] 

puis plus tard

{path_edge} PathOfOut[l in Links]= 
{<dem,k>|dem in Demands, k in K_sp : l not in PathOfDemands[dem][k]}; 

execute 
{ 
    writeln(PathOfOut); 
} 

qui donne

[{<1 4>} {<1 3>} {<2 3>} {<2 4>}] 

salutations