纸浆优化问题

2024-06-01 12:51:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用PuLP创建一个优化函数来优化投资组合。我有一个资产列表,每个资产都具有以下流动性水平之一[1、2、3]

我试图创建一个约束,即至少20%的投资组合需要具备1级流动性

我已经创建了一个字典(liquidity),它保存了{'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]) >= ?

我知道我现在的设置与我需要做的并不接近,但是,我很难找到/想出解决方案


Tags: 函数列表字典水平vars资产assetlevel
1条回答
网友
1楼 · 发布于 2024-06-01 12:51:51

考虑到你的资产,你已经知道每个资产的流动性水平。您只需确保至少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的资产

相关问题 更多 >