如何生成具有特定对称项概率的随机稀疏矩阵



我正在开发一个程序,该程序基于带有二进制项的稀疏矩阵将个人分组,每个项都对应于I是否愿意使用j等等。我正在运行该程序,但我需要能够在随机矩阵上测试它,以观察结果和参数之间的一些关系。

我想找到的是生成一个矩阵的方法,该矩阵每行有一定数量的非零条目,并且有一定概率的对称条目。也就是说,我希望能够为P(w_ji=1|w_ij=1(分配一个特定的数字,并使用它来生成矩阵。我不想要对称矩阵,但用完全随机的矩阵建模是不准确的,因为现实世界中的意愿矩阵往往至少是对称的。

有人知道我可以用什么来生成这样的矩阵吗?我通常使用python(与gurobi一起使用(,如果必要的话,我愿意安装任何数量的其他库来提供帮助。如果这里有其他人使用gurobi,我将非常感谢您提供意见,说明我是否可以将这样的矩阵生成建模为优化问题,并使用这样的东西作为目标函数:

min <= sum(w[i,j] * w[j,i] for i in... for j in...) <= max

谢谢!

如果你只想要一个随机分布为0和1的系数矩阵,最简单的选择就是选择一个概率,并对该值是否为1进行伯努利试验。(如果为零,则忽略稀疏元素(。

或者,如果你需要一个固定数量的0和1的随机排列,那么试试这样的方法:

import random
n = 50
k = 10
positions = sorted(random.sample(range(n), k))

列表positions表示所需的非零元素。

对于矩阵表示,这将是Gurobi矩阵变量对象MVar的一个很好的候选者。

最新更新