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

如何在CPLEX Python API docplex中创建库存问题三维决策变量?

如何在Docplex中创建三维整数决策变量

嘿,刚上手Docplex的话,确实会发现官方的integer_var_matrix只支持二维,但创建三维变量其实有两种很顺手的方式,我给你一步步讲清楚:

方法一:嵌套列表推导式(适合习惯矩阵索引的场景)

如果还是想保留类似二维矩阵的嵌套结构,你可以用嵌套的列表推导式结合integer_var_list来生成第三维度。举个实际的例子:

from docplex.mp.model import Model

# 先初始化模型
m = Model(name='inventory_problem')

# 定义你的三个维度集合(这里用示例数据,你可以换成自己的集合)
all_origins = ["O1", "O2"]    # 下标i的集合
all_destinations = ["D1", "D2", "D3"]  # 下标j的集合
all_time_periods = [1, 2, 3, 4]        # 下标t的集合

# 创建三维变量x_ij^t:第一层是i,第二层是j,第三层是t
x = [
    [m.integer_var_list(all_time_periods, name=f"x_{i}_{j}_%s") 
     for j in all_destinations] 
    for i in all_origins
]

# 调用变量示例:比如取i=O1、j=D1、t=2的变量
# 如果用索引访问:x[0][0][1](因为all_origins[0]是O1,all_time_periods[1]是2)
# 或者按名称查找:m.get_var_by_name("x_O1_D1_2")

方法二:用字典存储(更推荐,直观不易出错)

如果你的维度集合是字符串或者非连续的数值,用字典来存储三维变量会更方便——直接用(i,j,t)元组作为键,访问起来一目了然:

from docplex.mp.model import Model

m = Model(name='inventory_problem')

all_origins = ["O1", "O2"]
all_destinations = ["D1", "D2", "D3"]
all_time_periods = [1, 2, 3, 4]

# 生成所有(i,j,t)的组合作为变量的键
var_keys = [(i, j, t) for i in all_origins 
            for j in all_destinations 
            for t in all_time_periods]

# 创建三维变量字典,每个键对应一个整数变量
x = m.integer_var_dict(var_keys, name="x")

# 调用变量示例:直接用元组访问,比如x[("O1", "D1", 2)],完全不用记索引

额外小技巧

如果你的变量有上下界要求(比如库存变量不能为负),可以在创建时加上lb(下界)和ub(上界)参数,比如:

# 创建非负整数变量字典
x = m.integer_var_dict(var_keys, lb=0, name="x")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:23:57