Мне нужно сгенерировать список случайных величин учетом ограничений, которые можно выразить в виде где - это матрица если имеет записей. Во всех случаях, с которыми я имею дело, , например будет около 14 000, а будет 50. Я не уверен, какой метод я буду использовать для случайной выборки, будь то нормальная или равномерная, это не так Ясно, что лучше для проблемы, которую я пытаюсь решить, но мне нужно, чтобы все переменные были выбраны из распределений с одинаковым средним и диапазоном / дисперсией.
Чтобы решить эту проблему, я сводил к форме строки-эшелона, устанавливая все переменные, соответствующие столбцам справа от последнего центра, в случайные значения, а затем решая равенство оставшейся квадратной матрицы.
Однако существует проблема, чтобы решить квадратную матрицу равенства, я вычитаю уже установленные значения из правой части. К сожалению, отклонения также увеличиваются, поэтому мои последние 50 значений имеют тенденцию к значительному изменению, что, к сожалению, неприемлемо в этой проблеме.
Есть лучший способ сделать это? Я не могу придумать способ исправить текущий метод, который я использую. Я использую R.
источник
Ответы:
Эта бумага и пакет R полностью решили мою проблему. Он использует метод Марковской цепочки Монте-Карло, который основан на том факте, что, если вы можете найти начальное решение ограничения с помощью линейного программирования, вы можете найти произвольное число из них, используя матрицу, которая при умножении на ограничивает , дает ноль. Читайте об этом здесь:E
http://www.vliz.be/imisdocs/publications/149403.pdf
и вот пакет:
http://cran.r-project.org/web/packages/limSolve/index.html
источник
Может показаться тривиальным (и не слишком эффективным с точки зрения машины), но подумайте, не повторить ли этот процесс, пока не получите подходящий ответ? Желательно только модифицировать меньшее подмножество каждый раз.
Можете ли вы создать меру «расстояния» для определения того, насколько далеко вы находитесь от своего идеального ответа? Это может помочь вам "оптимизировать"?
источник