簡體   English   中英

求解器約束被忽略

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM