【问题标题】:How can I dis-aggregate combination statistics using a solver?如何使用求解器分解组合统计信息?
【发布时间】:2021-10-11 22:28:42
【问题描述】:

我正在尝试反转表单中的聚合,以便在对非聚合数据再次执行聚合时,它会产生完全相同的聚合数据集。

这些数据是关于用户及其对软件应用程序的使用情况。

我所拥有的是描述所用软件组合的三角矩阵(即 2 个用户使用软件 1 和软件 3)

   S1 S2 S3 S4 S5  
S1     1  2  0  1  
S2        2  1  2  
S3           0  2  
S4              1  

我还有用户数 = 5。

我想得到的是这样的(例如,意味着 User2 正在使用 S1、S2、S3):

      S1 S2 S3 S4 S5
User1  1  0  0  0  0  
User2  1  1  1  0  0 
User3  0  1  0  1  1
User4  0  1  1  0  1
User5  1  0  1  0  1 

我尝试了 GLPK,但没有找到正确设置约束的方法。我的想法是检查列的 sumproduct(例如 S1 和 S2 )是否受三角矩阵中的值(在第一种情况下 = 1)的约束,但该乘积似乎使其成为非线性问题。

使用求解器是解决这个问题的正确方法吗? 有没有办法在 GLPK 中解决这个问题,如果没有,我应该使用哪个求解器?

【问题讨论】:

    标签: optimization solver nonlinear-optimization mixed-integer-programming glpk


    【解决方案1】:

    两个二进制变量的乘积可以线性化,使其成为 MILP,就像在 How to linearize the sum of a product of two decision variables in LP? 的示例中一样 线性化后,模型应该可以使用任何 MILP 求解器求解(只要它不太大)。

    但是,可能有多种解决方案。这是否是一个问题取决于上下文。例如,您的示例的替代解决方案是:

          S1 S2 S3 S4 S5
    User1  0  1  0  1  1  
    User2  1  0  1  0  1 
    User3  1  1  1  0  0
    User4  0  0  0  0  0
    User5  0  1  1  0  1
    

    【讨论】:

    • 谢谢。您是如何提出替代解决方案的?我正在查看一个相当大的数据集,其中我将拥有超过 10 万用户和超过 1000 个软件应用程序。
    • 我使用 Excel Solver 创建了 alt 解决方案。我怀疑 100k x 1000 是否可以作为 MILP 解决。即使是这样,也可能会有大量的替代解决方案,那么找到其中一个有用吗?例如除非有额外的限制,否则所有的行顺序都是 alt 解决方案,因此解决方案不会告诉我们哪个用户拥有什么软件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多