如何在 Excel 中设置求解器以找到最接近某个值的结果?

问题描述 投票:0回答:1
    `Sub Leagues_Solver()

Dim i As Integer
For i = 0 To 30

' Leagues_Solver Macro
'Reset Solver
SolverReset

mytarget = Range("$A$1").Offset(i, 0)

'
    SolverOk SetCell:=Sheets("Footballprediction.ai Stats LG").Range("$C$1").Offset(i, 0).Address, MaxMinVal:=3, ValueOf:=mytarget, ByChange:=Sheets("Footballprediction.ai Stats LG").Range("$K$2").Offset(i, 0).Address, Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:=Sheets("Footballprediction.ai Stats LG").Range("$K$2").Offset(i, 0).Address, Relation:=1, FormulaText:="1"
    SolverAdd CellRef:=Sheets("Footballprediction.ai Stats LG").Range("$K$2").Offset(i, 0).Address, Relation:=3, FormulaText:="0"
    SolverSolve (True)
    
    'Approve the solution and avoid the popups
    
    SolverSolve userFinish:=True
    SolverFinish KeepFinal:=1
    
    Next i
       
End Sub
(A)要达到的价值 (C)平均Conf.int (K)阿尔法 (L)Stand.Dev. (M)样品 (N)Conf.Int. (O)平均
2,000 #NUM! 0,000 1,826 4 #NUM! 4,000

上面是我的代码和表格的第一行。我的主要目标是将 C 列设置为 A 列的值,在本例中为 2,但问题是通过更改 alpha,C 列不可能恰好等于 2,但它会非常好对我来说,如果它大约是 2,例如:正确的 2 或 3 位小数。不知道这样说是否可以理解,谢谢您的帮助!

excel vba excel-formula solver
1个回答
0
投票
SolverOk SetCell:="$B$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$K$2", Engine:=1 _
    , EngineDesc:="GRG Nonlinear"

设定目标值为

=abs(a2-c2)

minimize the abs. of the current-target cells

然后将上面的第一行包含在解算器循环 (VB) 中,以便更改单元格 K2.offset 以最小化 B2.offset。

这将使您尽可能接近 - 这应该避免问题 RE:在“完全匹配”的情况下“求解器未能收敛”,这正是您所尝试的。

根据需要进行修改以允许所需的限制(例如 0-1)。

仅供参考 - 如果您的目标是使置信区间 = 0,则应最小化其绝对值(如果它一开始甚至可以变为负值)。

此外 - 初始估计通常对于最终收敛非常重要。您可能希望一开始就获得更好的初步猜测(例如目标搜索 - 您可以根据需要记录宏/定制)以实现自动化。

PPS - 您提供的代码似乎与示例表不一致 - 鉴于您的目标似乎引用了表中的标题(而其他单元格从第 2 行开始,而不是第 1 行) - 也许这就是您需要做的全部不同。

祝你好运..

© www.soinside.com 2019 - 2024. All rights reserved.