处理 CPLEX Python 中 objective 函数的分母中的变量

Handling variables in the denominator of an objective function in CPLEX Python

我想用 objective 函数求解线性规划:

这里x[i][j]是决策变量,y[i][j]已经预先计算好了。

我在 CPLEX python (DOcplex) 中为此编写代码,但收到分母只能是数字的错误。有没有办法正确地做到这一点?

这是我的代码:

l_model.minimize(l_model.sum(l_model.sum(x[i,j]*y[(i,j)] for j in A)/l_model.sum(x[i,j] for j in A) for i in B))

在上面的代码中,我在分母中看到 x 个变量,这解释了错误消息; Docplex(和 CPLEX 也是)期望线性 objective,具有浮点系数。

此外,如果y也是一个决策变量字典,那么分子表达式被解释为二次表达式,无论变量是否在y 是固定的。这反过来导致 CPLEX 选择 QP 算法,这可能不是您想要的。

总而言之:您需要提供 objective 一个完全由变量和 Python 数字构成的线性表达式。