【发布时间】:2021-01-03 22:45:26
【问题描述】:
我有一个带有“主动风险”术语的 cplex/docplex 模型。我相信我搞砸了 Pandas 和 DocPlex 的组合,但我担心我正在尝试做一些不可能的事情。
该术语应该只是二次形式 (Target-Optimal) \Sigma (Target-Optimal)。
from docplex.mp.advmodel import AdvModel
from numpy import identity
from pandas import Series, DataFrame
model = AdvModel()
assets = ['AAA', 'BBB', 'CCC', 'DDD']
optimal = Series(1 / 4, assets)
covariances = DataFrame(identity(4) * 0.10, index=assets, columns=assets)
target = Series(model.continuous_var_list(assets, name='Target', lb=0, ub=1), index=assets)
active_risk = model.quad_matrix_sum(covariances, target - optimal) / 2
print(active_risk)
给出错误
AttributeError: 'LinearExpr' object has no attribute '_index'
有趣的是,类似以下的工作。因此,我可以将所有变量转换为差异,但如果可能的话,我会尽量避免这种情况,因为这会使优化中的其他复杂术语变得不那么清晰。
# lb, ub are complicated now
difference = Series(model.continuous_var_list(assets, name='Target', lb=lb, ub=ub), index=assets)
model.quad_matrix_sum(covariances, difference) / 2
【问题讨论】:
标签: python cplex convex-optimization quadratic-programming docplex