You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中自动生成指定维度的pulp.LpVariable并存储为嵌套字典

PuLP多维度线性规划变量自动生成函数

实现方案

针对动态生成多维度嵌套字典存储PuLP变量的需求,我们可以通过递归方式构建嵌套结构,自动生成符合命名规则的LpVariable实例。

基础实现代码

import pulp

def generate_nested_variables(dimension_number, dimension_ranges):
    # 校验输入参数合法性
    if len(dimension_ranges) != dimension_number:
        raise ValueError("维度范围列表长度必须与维度数量匹配")
    
    # 生成各维度的1-based索引序列
    index_ranges = [list(range(1, r + 1)) for r in dimension_ranges]
    
    def build_nested(indices, remaining_dims):
        if not remaining_dims:
            # 拼接变量名并创建LpVariable(默认非负连续变量)
            var_name = f"x{''.join(map(str, indices))}"
            return pulp.LpVariable(var_name, lowBound=0)
        # 递归构建下一层字典
        current_dim = remaining_dims[0]
        return {
            idx: build_nested(indices + [idx], remaining_dims[1:])
            for idx in current_dim
        }
    
    return build_nested([], index_ranges)

代码说明

  • 输入校验:确保维度范围列表的长度与指定维度数量一致,避免参数错误。
  • 索引生成:将每个维度的范围转换为从1开始的索引序列(匹配示例中的x11、x35命名规则)。
  • 递归构建:通过内部递归函数逐层生成嵌套字典,当所有维度遍历完成时,拼接索引得到变量名并创建LpVariable实例。

使用示例

# 生成二维变量(x11至x35)
two_d_vars = generate_nested_variables(2, [3, 5])
print(two_d_vars[1][1])  # 输出: x11
print(two_d_vars[3][5])  # 输出: x35

# 生成四维变量(x1111至x2222)
four_d_vars = generate_nested_variables(4, [2, 2, 2, 2])
print(four_d_vars[1][2][1][2])  # 输出: x1212

扩展版本(支持自定义变量参数)

如果需要指定变量的上下界、类型(如整数变量),可以扩展函数参数:

def generate_nested_variables(dimension_number, dimension_ranges, lowBound=None, upBound=None, cat='Continuous'):
    if len(dimension_ranges) != dimension_number:
        raise ValueError("维度范围列表长度必须与维度数量匹配")
    
    index_ranges = [list(range(1, r + 1)) for r in dimension_ranges]
    
    def build_nested(indices, remaining_dims):
        if not remaining_dims:
            var_name = f"x{''.join(map(str, indices))}"
            return pulp.LpVariable(var_name, lowBound=lowBound, upBound=upBound, cat=cat)
        current_dim = remaining_dims[0]
        return {
            idx: build_nested(indices + [idx], remaining_dims[1:])
            for idx in current_dim
        }
    
    return build_nested([], index_ranges)

扩展版本使用示例

# 生成二维整数变量
int_vars = generate_nested_variables(2, [3, 5], cat='Integer')
print(int_vars[2][3])  # 输出: x23(整数类型变量)

# 生成有上界的连续变量
bounded_vars = generate_nested_variables(2, [2, 2], upBound=10)
print(bounded_vars[1][2])  # 输出: x12(上界为10)

内容的提问来源于stack exchange,提问作者Ali E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:57:41