2017-06-03 5 views
0

Ich habe 10 Knoten .. jeder Knoten Anzahl der Transceiver ist bekannt, wie in diesem Vektor angegeben:Ich habe 10 Knoten .. jeder Knoten hat eine bekannte Anzahl von Transceivern .. Ich möchte wissen Wie kann ich alle möglichen Verbindungen zwischen Knoten erhalten? unter Verwendung von MATLAB

[8 3 3 3 3 3 2 1 1 1] 

wo: 8, die Anzahl von Sender-Empfängern bei der 1.-Knoten ist, 3 ist die Anzahl der Sender-Empfänger an der 2. Knoten und so weiter.

Jeder Transceiver kann nur von einer Quelle gleichzeitig empfangen .. Es ist erforderlich, dass alle Transceiver gleichzeitig verwendet werden müssen. Es ist zulässig, dass derselbe Knoten mehrere verwendet Transceiver zum Senden an einen anderen Knoten, der genügend Transceiver zum Empfangen hat. Es ist nicht möglich, dass ein einzelner Transceiver als zu mehreren Transceivern übertragen betrachtet wird. .

Ich möchte wissen Wie kann ich alle möglichen Verbindungen zwischen den Knoten erhalten und jede erhaltene Verbindungsmatrix die Anzahl der Transceiver zwischen den angeschlossenen Knoten identifizieren?

+0

Ich habe Probleme, Ihre Frage zu verstehen. Ich habe keine Ahnung, wie Sie eine Verbindung zwischen Ihren angegebenen Knoten darstellen möchten. Was genau ist Ihre gewünschte Ausgabe? Haben Sie irgendeinen Code ausprobiert, der uns helfen könnte zu verstehen, was Sie zu tun versuchen? – beaker

Antwort

0

Ich weiß nicht, wie man das in Matlab tut.
Mit Minizinc, fand ich die folgende Lösung (mit leicht einmassiert Microsoft Word): enter image description here

zu beachten, dass I-Knotennummer verwendet 0..9 anstatt 1..10 die Matrix Text zu verdichten. Es gibt eine große Anzahl von möglichen Lösungen. Dies ist nur einer von ihnen.

Das Minizinc Skript:

include "globals.mzn"; 

set of int: Transceivers = 1..28; 
set of int: Nodes = 1..10; 

array[Transceivers] of Nodes: node = [1,1,1,1,1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,8,9,10]; 
array[Transceivers] of Nodes: seq = [1,2,3,4,5,6,7,8,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,1,1,1]; 

array[Transceivers] of var Transceivers: aTo; 

array[Nodes, Nodes] of var Transceivers: connections; 

% Each transceiver can only receive from one source at a time 
constraint all_different([aTo[t] | t in Transceivers]); 

% transceivers have to connect to other nodes rather than to their own node 
constraint 
    forall(t in Transceivers) 
    (node[aTo[t]] != node[t]); 

% no more than 1 connection between any pair of nodes 
constraint 
    forall(i in Nodes, j in Nodes where j > i) 
    (sum([bool2int((node[t] == i) /\ (node[aTo[t]] == j)) | t in Transceivers]) < 2);  

solve satisfy; 

output ["  "] ++ [ show(node[i]-1) ++ "." ++ show(seq[i]) ++ " | " | i in Transceivers] ++ 
     [ if j == 1 then ("\n" ++ show(node[i]-1) ++ "." ++ show(seq[i]) ++ ": ") else "" endif ++ 
     if fix(aTo[i]) == j then " x | " else " | " endif 
     | i in Transceivers, j in Transceivers ]; 
+0

Vielen Dank für Ihre Bemühungen. Ich habe Minizinc installiert und das Programm ausgeführt, aber ich verstehe nichts von der Ausgabe !! Können Sie mir bitte die Ausgabe erklären? –

+0

Was bedeutet 0,1 | 0,2 | 0,3 | 0.4 | 0,5 | 0.6 | 0.7 | 0.8 | 1.1 | 1.2 | 1.3 | 2.1 | 2.2 | 2.3 | 3.1 | 3.2 | 3.3 | 4.1 | 4.2 | 4.3 | 5.1 | 5.2 | 5.3 | 6.1 | 6.2 | 7.1 | 8.1 | 9.1 | meint ? –

+0

0.1 ist der erste Transceiver am Knoten 0. 4.2 ist der 2. Transceiver am Knoten 4. Die Tabelle zeigt, welcher Transceiver wohin sendet. Es ist also eine Adjazenzmatrix. –

Verwandte Themen