使用OpenSolver,我正在尝试解决问题大小为1000的基本assignment problem。
因此excel文件的矩阵为1000x1000。矩阵内的每个值可以是0或1。
解决样本问题需要10个多小时才能完成,并且有100个样本。但是整个过程我有一周的时间。
我怀疑效率低下的主要原因是矩阵以及Excel如何处理它。
有没有办法加快这个过程?有什么想法吗?
任何帮助表示赞赏!谢谢。
答案 0 :(得分:1)
我同意这可能是因为有时间将数据导入和导出Excel。此大小的分配问题的解决方案时间最多应为几分钟。有关时间,请参阅here。问题不是很小:1000 x 1000表示2k方程和1e6变量。然而,赋值问题具有简单的结构并且可以非常快速地解决。您似乎希望连续运行多个数据集,因此这更像是批处理操作而不是交互式任务。
一种简单的方法是编写一些代码,为数据集生成LP文件,然后在求解器中提供它(公共域解算器会做,例如CBC,GLPK)。然后创建一个运行所有数据集的批处理文件。
答案 1 :(得分:0)
这些1000 x 1000个单元是否包含链接和引用。或者你有一个写这些1和0的脚本?如果要刷新1000 x 1000链接,则工作簿将降低爬行速度。请复制一份>粘贴特殊>值,如果可以,那么工作簿不会不断更新。
另外,请看这个。
http://datapigtechnologies.com/blog/index.php/ten-things-you-can-do-to-speed-up-your-excel-vba-code/
答案 2 :(得分:0)
1000x1000的矩阵。矩阵内的每个值可以是0或1。
解决方案是数学解决方案。尝试找到一些块对角线结构并对角化每个块。这是一个非常难的问题。
答案 3 :(得分:0)
如果您喜欢OpenSolver并希望坚持使用它,请尝试使用QuickSolve选项。它可能适用于您,也可能不适用于您,具体取决于后续100次优化中的更改。 OpenSolver通常设置问题很慢,但如果花费10个小时的大部分时间来初始化模型可能会在几分钟内解决100个优化中的其余部分。你甚至可以让VBA为你做这件事 或者你可以采取进一步尝试SolverStudio。