如何按升序定义一组决策变量?(类型错误:无法将线性约束转换为布尔值:S1 <= S2)



祝你一天好。我想为docplex定义一组决策变量S。从S的最小值到最大值依次递增。当我尝试使用以下代码时,它似乎不正确。谁能告诉我如何定义S的决策变量?提前谢谢你。

"

S= [[S1] ,                                                                                                                                                                           
[S2] ,                                                                                                                                                                                 
[S3],                                                                                                                                                                                   
[S4],                                                                                                                                                                                  
[S5],                                                                                                                                                                                   
[S6]]

"

Total_T = 6
S = np.empty((Total_T,1), dtype= object)
for k in range(Total_T):
S[k] = mdl.continuous_var(lb= 0, ub= inf, name='S' + str(k+1))

for k in range(Total_T):
if S is not None:
mdl.add_constraint(S[k]<= S[k + 1] <= S[k + 2] <= S[k + 3] <= S[k + 4] <= 
S[Total_T - 1] <= S[k] + obj_lambda)

"

Error Message:
Traceback (most recent call last):
File "C:/Users/pknu/Documents/Research/project/MILP Correct 19 July 2022.py", line 152, in 
<module>
mdl.add_constraint(S[k]<= S[k + 1] <= S[k + 2] <= S[k + 3] <= S[k + 4] <= S[Total_T - 1] 
<= S[k] + obj_lambda)
File "C:Userspknuanaconda3envsenv-cplexlibsite-packagesdocplexmpconstr.py", line 
101, in __bool__
self._no_linear_ct_in_logical_test_error()  # pragma: no cover
File "C:Userspknuanaconda3envsenv-cplexlibsite-packagesdocplexmpconstr.py", line 
549, in _no_linear_ct_in_logical_test_error
raise TypeError(msg)
TypeError: Cannot convert a linear constraint to boolean: S1 <= S2

"

您应该编写带有许多约束的x<=y<=z,如示例

所示。
from docplex.mp.model import Model
mdl = Model(name='xyz')

x = mdl.continuous_var(name='x')
y = mdl.continuous_var(name='y')
z = mdl.continuous_var(name='z')
decisionVars=[x,y,z]
mdl.add_constraint(z<=4)
#mdl.add_constraint(x<=y<=z, 'ctxyz') does not work
mdl.add_constraint(x<=y, 'ctxy')
mdl.add_constraint(y<=z, 'ctyz')

mdl.maximize(x+y+z)
mdl.solve()
for v in decisionVars:
print(v.name," = ",v.solution_value)

最新更新