可以使用声明为不同功能的 2 个变量来实现优化约束吗?

Can an optimization constraint be implemented with 2 variable that declared with different feature?

我的目标是使用 doxplex.mp.model 和 Python API 编写以下约束: P[t,j] >= s[t-j+1] - sum(s[k=t-j+2] from k to t) 对于 t = 1,....,N, j = 1, ...,t

我的代码。

from docplex.mp.model import Model
clsp = Model(name = 'capacitated lot sizing problem')
no_of_period = 8
period_list = [t for t in range(1, no_of_period+1)]
s_indicator = clsp.binary_var_dict(period_list, name = 's_indicator')
p_indicator = clsp.binary_var_matrix(period_list, period_list, name = 'p_indicator')
m_8 = clsp.add_constraints(p_indicator[t,j] >= s_indicator[t-j+1] - clsp.sum(s_indicator[t-j+2]  for j in range(1,t+1))  
                           for j in t for t in period_list )

输出:Keyerror 0 如有任何帮助,我们将不胜感激

您的代码摘录不正确 Python(对于 j in t)。我不得不修改它以使其成为 运行:

m_8 = clsp.add_constraints\
    (p_indicator[t,j] >= s_indicator[t-j+1] - clsp.sum(s_indicator[t-j+2]  for j in range(1,t+1))
                           for j in period_list for t in period_list )

这给了 ma KeyError: 9 异常。

要解决此问题,请记住 binary_var_matrix 创建了一个 Python 字典,其键是第一个参数,此处 period_list,范围从 1 到 8。

为了对此进行调查,我编写了这段小代码来调查您的代码生成的所有可能的密钥:

ke = 0
for t in period_list:
    for j in period_list:
        ix = t-j+2
        if ix not in period_list:
            ke += 1
            print(f"** Key error[{ke}], t={t},j={j}, t-j+2={t-j+2}")

打印 22 个键错误,例如 t=8, j=1 计算 (t-j+2)=9,它在字典键集之外。

总而言之:检查您的索引 w.r.t 模型中变量字典的键。