Создание сети узлов, где есть несколько путей и непрерывная связь - PullRequest
0 голосов
/ 09 июля 2019

Мне удалось создать набор узлов и связать их.Однако в большинстве случаев генерируемые узлы не образуют непрерывную связь друг с другом.Под этим я подразумеваю, например, если сгенерировано 8 узлов (N1, N2, N3, N4, N5, N6, N7, N8).Возможно подключение N1-N3-N5, а другой набор N2-N4-N6-N8-N7.Я хочу, чтобы оба набора имели какое-то соединение, то есть N5-N7.Так что, если бы я запустил функцию расширения nw, такую ​​как nw: turtles-on-path-to, я не получил бы ошибку, сказав, что он может найти путь от N3 до N8.в идеале мне также хотелось бы, чтобы некоторые узлы были подключены к нескольким узлам, например, N2-N4, N2-N6, N2-N5.Есть идеи как это сделать?Заранее спасибо

breed [nodes node]
create-nodes 30[
set color blue
set size 1.5
set shape"circle"
]
ask nodes [create-link-with one-of other nodes]

repeat 500 [layout-spring nodes link 0.2 5 1]
ask nodes [setxy 0.95 * xcor * 0.95 ycor]

1 Ответ

1 голос
/ 09 июля 2019

Ваша основная проблема в том, что у вас недостаточно ребер. У вас есть N ребер с N узлами (потому что каждому узлу предлагается добавить одно ребро). Для создания цепочки необходимы ребра N-1, поэтому у вас есть только один запасной элемент для создания дополнительного соединения.

Как только у вас будет достаточно ребер, вы можете выполнить некоторую перемонтацию, где вы проверите, есть ли более одного компонента (nw:weak-component-clusters), и, если так, создаете ребро между случайно выбранным узлом в одном кластере и случайным образом. выделенный узел в другом кластере (и удалите случайное ребро, если вы хотите сохранить то же общее количество ребер). Продолжайте делать это (while), пока у вас не будет только одного компонента.

...