代码之家  ›  专栏  ›  技术社区  ›  JasTonAChair

使用LpSolveAPI进行赋值,如何以广度优先的方式填充参数?

  •  0
  • JasTonAChair  · 技术社区  · 3 年前

    首先,我对线性规划有基本的了解,可能不知道正确的术语。我认为我需要的是一个广度优先的解决者。

    我有两个概率表,我想用它们作为约束。 我的目标函数是将所有参数加起来为1。

    使用R和lpSolveApi,我发现只有我希望优化的一些参数被赋予了任何值。我还尝试添加一个约束,说明每个参数都应该 > 2 or some other value ,但这似乎是错误的。

    我的代码的一个最小示例是:

    objective_coefficients = c(1,1,1,1,1,1,1,1,1,1,1,1,1) #One for each parameter
    lp_model = make.lp(0,13)
    lp.control(lp_model, sense="max")
    set.objfn(lp_model, objective_coefficients)
    
    #Constraints for probability table 1
    add.constraint(lp_model, c(1,0,1,1,1,0,0,0,0,0,0,0,0), "<=", 0.4)
    add.constraint(lp_model, c(0,0,0,0,0,0,0,0,0,1,0,0,0), "<=", 0.1)
    add.constraint(lp_model, c(0,1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0.2)
    add.constraint(lp_model, c(0,0,0,0,0,0,0,0,1,0,0,0,1), "<=", 0.1)
    add.constraint(lp_model, c(0,0,0,0,0,1,1,1,0,0,1,1,0), "<=", 0.2)
    
    #Constraints for probability table 2
    add.constraint(lp_model, c(1,1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0.2)
    add.constraint(lp_model, c(0,0,1,1,1,1,0,0,0,0,0,0,0), "<=", 0.35)
    add.constraint(lp_model, c(0,0,0,0,0,0,1,1,0,0,0,0,0), "<=", 0.25)
    add.constraint(lp_model, c(0,0,0,0,0,0,0,0,1,1,1,1,0), "<=", 0.17)
    add.constraint(lp_model, c(0,0,0,0,0,0,0,0,0,0,0,0,1), "<=", 0.03)
    

    结果是,一些参数附加了较大的值,而另一些则根本没有:

    0.05 0.15 0.35 0.00 0.00 0.00 0.20 0.00 0.07 0.10 0.00 0.00 0.03
    

    如果我为所有参数设置最小值,我可以看到所有参数都是可行的>0.02.

    我试过:

    lp.control(lp_model, basis.crash="mostfeasible", sense="max")
    lp.control(lp_model, basis.crash="leastdegenerate", sense="max")
    lp.control(lp_model, bb.rule=c("first", "breadthfirst"), sense="max")
    lp.control(lp_model, bb.rule=c("gap", "breadthfirst"), sense="max")
    

    这些都给出了相同的结果。

    我认为正在发生的事情是求解器使用了depthfirst,但我希望它先求解breathfirst,我不明白如何做到这一点。

    0 回复  |  直到 3 年前