纸浆优化问题 - 约束问题

问题描述

我正在使用 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 的资产

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...