Я пытаюсь воссоздать в python модель Клейнберга (явления маленького мира). Я начал создавать циклический одномерный граф, добавляя m случайных длинных ссылок. Сейчас я изо всех сил пытаюсь создать такую функцию, чтобы, начиная со случайного узла, мы должны были перейти к одной из его окрестностей, которая является ближайшей к целевому узлу t. Теперь моя проблема в том, что я не могу использовать функцию shorttest_path, так как в модели Кляйнберга информация является частичной, то есть с первого узла мы не можем наблюдать, какие ребра находятся между нашими соседями и другими узлами, но мы просто знаем, что мы находимся в графе цикла. , Например, рассмотрим граф циклов с 10 узлами. Узел 3 является отправителем, а узел 7 является целью. Узел 3 имеет узлы 2,4,5 в качестве соседей, и он не может наблюдать за связями своих соседей. Итак, он отправил сообщение на узел 5, тем не менее узел 2 был связан с узлом 7. Я написал функцию расстояния, но я застрял здесь, так как совершенно не представляю, как это написать.
def distance(i,j,d,n):
left = (n - abs(i-j))/d #distance counter clockwise
right = abs(i-j)/d #distance clockwise
if np.ceil(left) > np.ceil(right):
return np.ceil(right)
else :
return np.ceil(left)
Моя идея состояла в том, чтобы создать вид l oop, используя эту функцию расстояния, где j - целевой узел, а i - соседи нашего отправляющего узла, в результате чего ближайший узел (с точки зрения расстояния) к цели.