【问题标题】:Excel Solver slow due to second workbookExcel Solver 由于第二个工作簿而变慢
【发布时间】:2021-01-03 10:50:32
【问题描述】:

我今天注意到一些新的东西,这会在未来给我带来关于 Excel 求解器的问题,所以我想了解一下。

我正在使用 VBA 顺序应用求解器向下移动工作表(假设此工作表属于“工作簿 1”)。这一切都很好,我对 Solver 的结果很满意。耶...我担心的是:当我打开第二个相当大的工作簿(我们称之为“工作簿 2”)时,它与我当前的工作簿绝对没有链接,求解器的运行时间大约是 20 倍。

当然,最合理的做法是在 Solver 运行时不打开“工作簿 2”。现在这是我的解决方案,但是,在不久的将来,我需要同时打开两个工作簿。所以我提出以下问题:

为什么求解器在打开两本书的情况下运行需要更长的时间,即使它甚至没有触及其中一本?

如果怀疑者担心我的代码在这里做一些不寻常的事情,那就是:

Sub ExampleSeqSolver()
Dim Iter As Long
Dim Time0 As Double
Dim Duration As Double

Application.ScreenUpdating = False
' Solver requires that it is working on the 'active sheet', silly but w/e
Sheets("Sheet1").Activate
' watch optimization efficiency
Time0 = Timer

For Iter = 2 To 13

    ' my data are sometimes related to adjacent rows so I was considering supplying an initial solution to reduce the number of runs
    ' Sheets("Sheet1").Range("$AC$" & ITER & ":$AI$" & ITER) = _
    ' Sheets("Sheet1").Range("$AC$" & ITER - 1 & ":$AI$" & ITER - 1)

    If Cells(Iter, 1) <> 0 Then
        SolverReset
        SolverOptions AssumeNonNeg:=True, Iterations:=100
        SolverAdd CellRef:="$AK" & Iter, Relation:=2, FormulaText:="1"
        SolverOK SetCell:="$AW$" & Iter, MaxMinVal:="2", ByChange:=Sheets("Sheet1").Range("$AC$" & Iter & ":$AI$" & Iter), Engine:=1
        SolverSolve True
    End If

Next Iter

' report optimization duration
Duration = Round(Timer - Time0, 2)
MsgBox "Optimization finished in " & Duration & " seconds", vbInformation
Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 你有没有测试过设置Application.CalculationxlCalculationManual有什么效果? (我认为即使整体计算方法是“手动”,Solver 也会强制计算活动工作表。)
  • “为什么求解器在打开两本书时需要更长的时间才能运行,即使它甚至没有触及其中一本?” > 可能是因为你没有足够的 RAM/Memory,这也是现在 32 位软件的问题。
  • @YowE3K 好主意!我在想同样的事。起初犹豫尝试,因为我担心我的目标函数不会更新。试一试,没有变化。我认为计算方法可能总是在应用程序级别处理(即使求解器正在控制它。即,一切都被设置回自动)。好主意,谢谢!
  • @KDavis,这是可能的。请原谅我对内存分配的无知,但是如果我查看任务管理器,我有大约 4G 的空闲空间,而 Excel 只使用了大约 200,000 K。这是否意味着我没有对系统或 32 位应用程序限制施加压力?

标签: vba excel solver


【解决方案1】:

“工作簿 2”的存在是相关的,但不是因果关系。就我而言,有一个特定的工作簿会导致求解器减速;大多数其他人没有。导致减速的工作簿约为 4mb。更大的工作簿不会导致减速。据我所知,导致减速的原因不包含宏或 VB。我建议将此问题展示给开发原始求解器的 Frontline 系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2020-07-17
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多