问题描述
我正在使用 PuLP 创建一个优化函数来优化投资组合。我有一份资产清单,每个资产都具有以下流动性水平 [1,2,3] 之一。
我试图创建一个约束条件,即至少 20% 的投资组合需要具有 1 级流动性。
我创建了一个保存了 {'Asset':Level} 的字典(流动性),并试图用这个和资产变量 (asset_vars) 创建约束,这是一个 LpVariable。
asset_vars = pl.LpVariable.dicts("Assets",asset_list,lowBound=0,upBound=1,cat='Integer')
prob += pl.lpSum([liquidity[f] * asset_vars[f] for f in asset_vars]) >= ?
我知道我现在的设置与我需要做的不太接近,但是,我很难找到/想出解决方案。
解决方法
根据您的资产,您已经知道每个资产的流动性水平。您只需要确保至少 20% 的投资组合由流动性级别为 1 的资产构成。
您可以使用以下约束来实现。
prob += pl.lpSum(asset_vars[f] for f in asset_vars if liquidity[f]==1) >= 0.2 * pl.lpSum(asset_vars[f] for f in asset_vars)
假设您有 6 个资产,x1,x2,x3,x4,x5,x6
,其中 x1
是唯一与流动性级别为 1 的资产相关联的资产。
约束条件是:
x1 >= 0.2*(x1 + x2 + x3 + x4 + x5 + x6)
0.8*x1 >= 0.2*(x2 + x3 + x4 + x5 + x6)
这实质上意味着:对于我采用的每个流动性水平为 1 的资产,我不能采用超过 4 个流动性水平不同于 1 的资产。