在 cplex python api 中写入优化约束时出错

Error while writing optimization constraint in cplex python api

我的目标是在 python 中使用 docplex.mp.model 编写以下模型。 which ptj 采用二进制变量 {0,1}.

[summation from of Ptj from j=1 to t][t = 1,.....,8]

这是我写的代码:

N = 8 
(period_list = [t for t in range(1, no_of_period+1)])
(j = period_list)
p = Mode.binary_var_dict(period_list, name = 'p')
for t in period_list:
    for j in range(1,t+1):
        Model.add_constraints(Model.sum(p[t,j]) == 1) 

但是我得到了一个错误。谁能帮我解决这个问题?

您的代码有很多问题。

首先,您需要创建一个 docplex.mp.model.Model 的实例以添加约束:您对 Model.<fn> 的所有调用都应重写为 mdl.<fn>,因为它们是 实例 方法。

其次,您创建的变量dict以句点为键,即1,2,..P 所以查询 p[t,j] 肯定会因 KeyError 而崩溃。如果您需要每两个周期的变量方阵,请使用 Model.binary_var_matrix.

第三:Model.add_constraints(最后一个S)期望一个可迭代对象,但是你传递了一个约束,这也肯定会崩溃。

最后,使用从 1 开始的范围对于 Docplex 来说并不是最简单也不是最安全的选择。

这是从您的示例中自由派生的代码,我想它接近您的需要:

pr = range(1, no_of_period+1)
from docplex.mp.model import Model
m = Model()
p = m.binary_var_matrix(pr, pr, name = 'p')
m.add_constraints( (m.sum(p[t,j] for j in pr) == 1) for t in pr)
print(m.lp_string)

输出为:

Minimize
 obj:
Subject To
 c1: p_1_1 + p_1_2 + p_1_3 = 1
 c2: p_2_1 + p_2_2 + p_2_3 = 1
 c3: p_3_1 + p_3_2 + p_3_3 = 1

[..剪断..]