【问题标题】:Pulp Optimization Problem - Constraint Problems纸浆优化问题 - 约束问题
【发布时间】:2021-01-05 21:50:49
【问题描述】:

我正在使用 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]) >= ?

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

【问题讨论】:

    标签: python optimization linear-programming pulp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多