纸浆优化问题 - 约束问题
Pulp Optimization Problem - Constraint Problems
我正在使用 PuLP 创建优化函数来优化投资组合。我有一个资产列表,每个资产都具有以下流动性水平之一 [1、2、3]。
我正在尝试创建一个约束条件,即至少 20% 的投资组合需要具有 1 级流动性。
我创建了一个保存了 {'Asset':Level} 的字典(流动性),并试图用它和资产变量(asset_vars)创建约束,这是一个Lp变量。
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 的资产。
我正在使用 PuLP 创建优化函数来优化投资组合。我有一个资产列表,每个资产都具有以下流动性水平之一 [1、2、3]。
我正在尝试创建一个约束条件,即至少 20% 的投资组合需要具有 1 级流动性。
我创建了一个保存了 {'Asset':Level} 的字典(流动性),并试图用它和资产变量(asset_vars)创建约束,这是一个Lp变量。
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 的资产。