[英]Solver constraints ignored
我现在面临一个让我疯狂两天的新问题:我正在尝试运行以下命令:
Sub getNoShortSalePortfolio()
Dim ws As Worksheet
Set ws = ActiveWorkbook.ActiveSheet
Dim assetReturns As ListObject
Set assetReturns = ws.ListObjects("tblAssetReturns")
Dim numColumnsAssets As Long
numColumnsAssets = assetReturns.ListColumns.Count
Dim portfolioWeightsVector() As Variant
Dim activeCellAddress As Variant
Dim adjustableCellsAddress As String
activeCellAddress = ws.Range("noShortSale").Address
adjustableCellsAdress = activeCellAddress & ":" & Range(activeCellAddress).Offset(numColumnsAssets - 2, 0).Address
Range(adjustableCellsAdress).ClearContents
Solverreset
SolverOptions Precision:=0.0001, Iterations:=10, AssumeNonNeg:=True
SolverOk SetCell:=Range("noShortSaleMean"), MaxMinVal:=1, ByChange:=Range(adjustableCellsAdress) ', EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:=Range(adjustableCellsAdress), Relation:=1, FormulaText:=1
SolverAdd CellRef:=Range("noShortSaleWeightSum"), Relation:=3, FormulaText:=1
SolverAdd CellRef:=Range("noShortSaleVola"), Relation:=2, FormulaText:=Range("portfolioVolaAssetShare")
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
但是,我的求解器只迭代 2 次并返回一个全部相等的解决方案向量(在我的情况下说 10%,因为我想将我的解决方案的总和限制为小于或等于 100%。
此外,我希望作为另一个约束,我的解向量的函数满足来自另一个单元格的预定值,但是,求解器似乎完全忽略了这个约束。 我究竟做错了什么?
达到所需(和预期的解决方案: 但是,似乎目标单元格和其他约束未在我的 VBA 中定义。
我很感激任何帮助
非常感谢
托马斯
Sub getNoShortSalePortfolio()
Dim ws As Worksheet
Set ws = ActiveWorkbook.ActiveSheet
Dim assetReturns As ListObject
Set assetReturns = ws.ListObjects("tblAssetReturns")
Dim numColumnsAssets As Long
numColumnsAssets = assetReturns.ListColumns.Count
Dim portfolioWeightsVector() As Variant
Dim activeCellAddress As Variant
Dim adjustableCellsAddress As String
activeCellAddress = ws.Range("noShortSale").Address
adjustableCellsAdress = activeCellAddress & ":" & Range(activeCellAddress).Offset(numColumnsAssets - 2, 0).Address
Range(adjustableCellsAdress).ClearContents
Solverreset
SolverOptions Precision:=0.000001, Iterations:=20, AssumeNonNeg:=True
SolverOk SetCell:="noShortSaleMean", MaxMinVal:=1, ValueOf:=0, ByChange:=Range(adjustableCellsAdress), Engine:=1, EngineDesc:="GRG Nonlinear"
'SolverOk SetCell:="noShortSaleVola", MaxMinVal:=2, ByChange:=Range(adjustableCellsAdress), EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:=Range(adjustableCellsAdress), Relation:=1, FormulaText:=1
SolverAdd CellRef:="noShortSaleWeightSum", Relation:=2, FormulaText:=1
SolverAdd CellRef:="noShortSaleVola", Relation:=2, FormulaText:="portfolioVolaAssetShare"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
我找到了解决这个问题的一种方法。我需要删除这些 Range() 东西,然后它会正常运行(即作为手动解决方案)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.