如何使用纸浆生成稀疏矩阵的变量和约束?

时间:2017-04-20 06:05:03

标签: sparse-matrix pulp

有, 我是纸浆新手。我从网上的一些例子中学到了知识。这些例子非常有用,现在我可以通过mtself编写简单的模型。但我仍然觉得很难建立复杂的模型,特别是稀疏矩阵模型。

请您使用稀疏矩阵和conplex约束来发布一些复杂的例子。我想学习如何仅创建必要的变量,而不是简单的变量,例如,y = LpVariable.dicts(" y",(Factorys,Customers),0,1,LpBinary)。

我有另一个问题:如果我只使用y = LpVariable.dicts(" y",(Factorys,Customers),0,1,LpBinary)来定义变量会发生什么,其中大多数变量在模型目标函数和约束中是无用的,我添加了一些约束来明确地将这样无用的变量设置为0?纸浆算法是否能够首先识别这样的无用变量并首先将其删除,然后运行整数规划算法(例如B& B或B& C)以解决尺寸减小的问题?如果这是真的,它看起来"将无用变量设置为0"方法根本不会降低解决方案的速度。我是对的吗?

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助

http://www.stuartmitchell.com/journal/2012/2/3/my-top-n-tips-for-python-coding-in-optimisation-1.html

特别是首先生成一组稀疏的工厂和客户。

factories_customers = [(f,c) for f in factories for c in customers 
                             if <insert your condition here>]

然后使用

y = LpVariable.dicts("y", factories_customers ,0,1,LpBinary)

Pulp不会删除“无用的”变量和约束,因此模型构建时间会很长。

然而,解决方案算法(CBC默认包含将解除变量的预解算法)。