2013-10-15 17 views
-2

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

Количество городов, 3000, население 15 000 000

(в JAVA)

int people = 15000000; 
    int[] arrayofcity = new int[3000] 
    for (int i = 0; i < arrayofcity.length; i++) { 
      //how to generate people to the towns of total 
      //nextGaussian()?? 

    } 

Спасибо за вашу помощь

+0

** 1: ** Что вы пробовали? ** 2: ** Пожалуйста, объясните это более подробно. ** 3: ** Не ожидайте, что люди сделают домашнее задание. – Troubleshoot

+0

Вы спрашиваете: «Как заполнять города в нормальном распределении, чтобы сумма всех городов составляла 15 миллионов»? – amit

+0

U хотите, чтобы сумма населения всех 3000 городов составляла 15 000 000? – TheLostMind

ответ

0

Попробуйте что-то вроде этого .. Не очень эффективно, поскольку распределения усредняются/отменены для каждых 2 значений.

int people = 15000000; 
    int[] arrayofcity = new int[3000]; 
    int sharedSpread=people/3000;     // sharedSpread= avg population 
    for (int i = 0; i < arrayofcity.length; i++) { 

     if(i%2!=0) 
      arrayOfCity[i] = sharedSpread + (sharedSpread-arrayOfCity[i-1]); 
     else 
      { 
      Random r = new Random(); 
      int val = Random.nextInt(); 
      arrayOfCity[i] = val%sharedSpread ; 

      } 

    } 

PS: Это не точный код, но это может показать, как идти о проблеме .. Вы можете изменить частоту распределения. Вместо 2 здесь мы можем изменить его на 4, чтобы получить лучшие случайные распределения ...

+0

спасибо за ответ, я посмотрю на него –

0

Один (не эффективен, но красиво математически ИМО) путь к это:

Для каждого человека (повторите 15 раз), выберите с равномерным распределением его город.

Это даст вам общую сумму 15 млн людей во всех городах, и в соответствии с central limit theorem - вы получите близко к нормальному distributionin в каждом городе, потому что каждый город в основном сумма Bernoulli trials с p=1/3000, над 15M испытания.

+0

Это хорошая идея, я попробую это –

0

Грубый эскиз метода:

  • Использование Random # nextGaussian() для создания значения X между 0-1 для каждого города.
  • Рассчитать сумму всех этих значений Х. Назовите его S.
  • Для каждого города возьмите его значение X и разделите его на S. Умножьте этот результат на общую численность населения (15 000 000). Вот сколько людей живет в этом городе.

Обратите внимание, что это было бы сложно реализовать на практике из-за округления. Таким образом, общая численность населения может быть немного выше/ниже желаемых 15 000 000, поэтому для добавления/удаления дополнительных людей потребуется какой-то метод.

+0

спасибо за ответить –

Смежные вопросы