Как стать автором
Обновить

Комментарии 23

что сделать то надо? или может посмотреть что?
Ничего особенного не надо делать — идея топика была в том, чтобы показать, что знакомую многим по студенческим годам игру «Жизнь» можно применять для решения реальных повседневных задач, возникающих в Интернет-бизнесе.
Дальше — может кто-нибудь воспользуется идеей, запрограммирует описанную мной модель и будет ей пользоваться для моделирования социальных сетей.
Допустим, мы находим коэффициенты (которые весьма условны, из-за грубости модели). Как узнать что реклама удвоит P1, а новые сервисы, или, допустим, дизаин увеличит P2 на необходимую величину. Или, хотябы, как узнать какие эти коэффициенты сейчас или будут через неделю (для планирования рекламы и сервисов)? Получается, что модель толком ничего и не отображает.
Понятно, что модель упрощенная, но мне кажется, что она может быть полезна в реальной жизни при должной подгонке и «привязке на местности».

То, каким образом та или иная реклама повышает коэффициент P1, можно легко рассчитать на основании опыта (один раз разместив рекламу, мы будем знать сколько после рекламы в сервис пришло новых пользователей).

Влияние ввода новых сервисов на коэффициент P2 количественно оценивать сложнее, можно делать экспертные оценки (например, если мы знаем, что запуск сервиса 1 уменьшает коэффициент P2 в 2 раза, можно предположить, что сервис 2, который экспертом субъективно оценивается как в 2 раза более востребованный, уменьшит коэффициент P2 в 4 раза).

я вообще то и без программирования могу предсказать что увеличение рекламы и сервисов в этой модели даст прирост пользователей пропорционально коэффиценту. А правила для жизни клеток довольно быстро заполнит все поле потому что условие смерти клеток трудновыполнимо, если клетка появилась при наличии рядом трех живых то какие должны быть условия что она останется в одиночестве? только геноцид достаточно сильным коэффицентом p2, но это приведет к полной очистке поля. Итого далеко от реальности социальных сетей.
Основной прирост количества пользователей социальных сетей происходит из-за приглашений, распространяемых самими пользователями, а не из-за рекламы. Реклама может лишь ускорить процесс достижения критической массы пользователей, необходимой для того, чтобы число людей в сети стало самовозрастающим. Предлагаемая мной модель как раз и могла бы подсказать хозяевам социальной сети, в какие моменты эффективно давать рекламу, а в какие ее уже можно выключать, т.к. сеть способна сама расширяться без внешних воздействий.

По поводу трудновыполнимости условия смерти клетки — согласен, надо ввести в алгоритм еще одно условие — клетка не может быть воссоздана сразу после ее смерти (пользователь, скорее всего, не вернется в сеть, если уже один раз бросил ей пользоваться). В этом случае даже при небольших P2 с течением времени вероятность смерти клеток будет постоянно возрастать (тому живой пример — Одноклассники: уже около половины из активных год назад контактов перестали на заходить на сервис).

Моя первая программа на питоне :) Возможно есть баги, т.к. писал с постоянным ликбезом языка за полчаса :)

import random

count = 10
generation = 3
P1 = 33
P2 = 33

def check(matrix, x, y):
 cd = 0;
 for dx in range(-1,1):
  for dy in range(-1,1):
   if ((0<(x+dx)<count )&(0<(y+dy)<count )):
    if (matrix[x+dx][y+dy]):
     cd += 1
 return cd>=3;

def print_gen(x):
 for i in range(0,count-1):
  s = "";
  for j in range(0,count-1):
   if x[i][j]:
    s += "1"
   else:
    s += "0"
  print s

x = [[False]*count for i in range(1, count)]
for cic in range(generation):
   join = [ ([random.randint(0,100)<P1 for i in range(1, 10)]) for i in range(1, 10)]
   depart = [ ([random.randint(0,100)<P2 for i in range(1, 10)]) for i in range(1, 10)]
   y = x[:]
   for i in range(0, count-1):
      for j in range(0, count-1):
         x[i][j] &= not(depart[i][j])
         x[i][j] |= join[i][j]
         x[i][j] |= check(y, i, j)
   print "----", cic, " gen ----"
   print_gen(x)
   raw_input()


* This source code was highlighted with Source Code Highlighter.
Ай-яй-яй…
join = [ ([random.randint(0,100)<P1 for i in range(1, count )]) for i in range(1, count )]
depart = [ ([random.randint(0,100)<P2 for i in range(1, count )]) for i in range(1, count )]
Интересно, каковы результаты работы программы? Я бы поставил P1=P2=10
При [10, 10] уже на 6-8 поколении практически полное заполнение всего пространства…
Исправленный код есть по адресу pastebin.com/m122260a9
Тоже запрограммировал:) Правда моя версия на Ruby:)
pastie.org/540211

Как выше написали, при 10% не очень интересно, все заполнено пользователями.
Интереснее когда коэффициент ухода выше коэффициента прихода в несколько раз.
Например при 10/30 уже не все заполнено пользователями, 10/40 — половина поля без пользователей, а то и все поле пустое, как повезет:)

В этой модели очень быстрый рост пользователей, который может регулироваться только случайностью с высокой вероятностью. Мне кажется, нужно добавить дополнительные, не зависящие от случая ограничения, которые будут регулировать рост пользователей.
Мне кажется, нужно добавить дополнительные

Можно убрать P1 и P2 и сделать так:
Каждая клетка имеет 3 дополнительных параметра: Уровень любопытства, уровень харизмы, уровень подчиненности и уровень противодействия.
Уровень любопытства отвечает с какой вероятностью появиться жизнь в клетке, уменьшается с каждой популяцией.
Уровень харизмы отвечает с какой вероятностью клетка будет оживлять соседние клетки.
Уровень подчиненности отвечает с какой вероятностью клетка будет оживляться в зависимости от уровня харизмы соседних клеток.
Уровень противодействия — с какой вероятностью клетка будет погибать, увеличивается, если ее окружают много других клеток, например до 3х это =y, а если больше то =y*(N-3), а она увеличивается с каждой популяцией.
Вероятно что все эти уровни будут зависимыми друг от друга. Т.е. уровень любопытства прямо пропорционален харизме, которая обратно пропорциональна уровню подчиненности и прямо пропорциональна уровню противодействия.
Такой моделью мы не просто охватим соц. сеть, а жизнь любого веб-сайта…
Мне кажется, у веб-сайтов работают другие законы привлечения, по сравнению с социальными сетями — фактор того, что этим сайтом пользуется мой знакомый, не так важен.
У сайтов-сервисов (форумы, тематических сайтов, магазинов) очень важен пиар. Именно эти факторы я и указал…
Тоже интересно, но опять же элемент случайности. По сути это все теже P1 и P2, только через большее количество величин. Ну а вобщем интересно, руки дойдут — сделаю, отпишусь по результатам:)
Не могу придумать таких ограничений. Я сначала думал ввести время жизни пользователя, но оно фактически и заменяется вероятностью. Может, у Вас будут идеи?
Ну, я думаю надо смотреть в сторону реальной жизни.
Я бы выделил несколько факторов:
Уходит очень мало людей, по сравнению с тем кто приходит. P2 не больше 5%.
Основная масса пользователей, компьютерно неграмотная(всмысле их всегда большинство), так что узнают только от знакомых, значит P1 тоже очень мало.
По сути, пользователи соц сети — это всегда рост, ну или постоянное(+-) количество, когда сеть старая.

Но, при таких условиях мы всегда получим полностью заполненое поле…
Так что наверно нужно ввести неактивные клетки, которые никогда не вступят в соцсеть.
От их начального расположения и будет зависить общая картина.
Ну и конечно картина эта будет статичной. Тоесть на нном шаге получится неизменяемая(слабоизменяемая, в зависимости от P1 P2) комбинация.

Впринципе, можно оставить все как есть, но, на каждом шаге корректировать значения P1/P2.
Например вложили 1млн в рекламу — P1+1%, ввели платные сервисы P2+2%.

Можно конечно вводить дополнительные случайные величины, как предложил aavezel, но по-моему суть не изменится. Клеточная модель для такой задачи все равно немного грубоватая:)

Кстати, в качестве усовершенствования, можно учитывать соседей в большем радиусе, т.е. если двое/трое справа тоже пользователи, то становимся пользователями. Или что-нибудь аналогичное.
Тогда можно вводить например группы пользователей(в одном радиусе группа соц сети по интересам) и связи между группами. Например если связь обрывается, одна группа потихоньку помирает, и т.п. Но тут все совсем нетривиально, по сути уже граф получается, надо думать над правилами:)
Модель нужна прежде всего для моделирования и прогнозирования реальной жизни. Тут же мы имеем очень грубые допущения, которые нивелируют весь эффект от моделирования.
К таким грубостям я отношу:
1. У одного элементы максимум и минимум 8 соседей — самое плохое допущение. В идеале должен быть граф/сеть, но никак не двухмерная сетка.
2. Коэффициенты 0,55 и 0,33 которые никак не связаны с реальностью. Мне достаточно одного совета от хорошего знакомого, и недостаточно 20 советов от мало мне известных людей. Т.е. каждая связь должна иметь вес.
3. Как можно прогнозировать состояние системы если у вас слишком много вероятностей, т.е. серия прогнозов может отличаться друг от друга на порядок в обе стороны.

5. no PROFIT!!!
Отвечу по пунктам:

1. Согласен, допущение грубое, при желании можно построить более сложную модель, использующую граф. Правда, не совсем понятно, какую структуру графа надо брать — надо отдельное исследование, какова структура связей у среднестатистического человека. Как бы такая более сложная модель не оказалась так же неточна, как и моя простая.

2. Предполагается, что 8 ваших непосредственных соседей — и есть те самые хорошие знакомые, мнению которых вы доверяете

3. По-моему, лучше какая-то модель, чем никакая ()

5. почему же — если на экспериментальных данных модель подтвердит свою применимость, то она может сэкономить создателям социальных сетей много денег на рекламу.
Тоже по пунктам:
1. Какую структуру графа нужно брать? Связный, взвешанный.

2. Если прдпологать так, то мнения одного моего друга достаточно для того чтобы я зарегился и начал пользоваться, три мнения хороших друга для этого не нужны.

3. Модель должна быть адекватна, если у вас модель хоть чуть чуть неадекватная, то значит эффекта не будет в принципе никакого.

Повторюсь, я не против моделирования поведения соц сетей. я против конкретной предложенной модели. Я уверен что если заняться целью, то модель можно легко создать, учесть там и рекламу и рекомендации и уровни ЗП и все все все что пожелаете, но не в таком виде как предложил автор, слишком грубая и притянутая за уши.
ОК, Ваша точка зрения понятна. В любом случае, эту модель надо проверять на практике (как и любую другую модель), а потом уже решать, можно ли ей пользоваться, или нет.

Для построения более точной модели очень важна топология графа, представляющего социальные отношения: сколько у каждого человека связей (т.е. у каждой вершины — соседей), какова связность графа, чему равно отношение числа вершин графа к его диаметру, и т.п. Чтобы узнать все эти параметры, надо провести серьезное социологическое исследование.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации