首页 > 解决方案 > 如何生成具有特定对称条目概率的随机稀疏矩阵?

问题描述

我正在开发一个程序,该程序基于具有二进制条目的稀疏矩阵将个人分类为团队,每个条目对应于是否愿意与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

谢谢!

标签: matrixprobabilitygurobi

解决方案


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

或者,如果您需要固定数量的 0 和 1 的随机排列,请尝试以下操作:

import random

n = 50
k = 10

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

该列表positions表示您需要的非零元素。

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


推荐阅读