Optimization 纸浆-硬币-CBC错误:如何使用双重不等式和松弛添加约束?

Optimization 纸浆-硬币-CBC错误:如何使用双重不等式和松弛添加约束?,optimization,mathematical-optimization,pulp,coin-or-cbc,Optimization,Mathematical Optimization,Pulp,Coin Or Cbc,我想添加这组约束: -M(1-X(i,j,k,n))≤S_(i,j,k,n)-ToD_(i,j,k,n)≤M(1-X_(i,j,k,n))∀i、 j,k,n 其中M是一个大数字,S是一个整数变量,取值介于0和1440之间。ToD是一个4维矩阵,从Excel工作表中获取值。X i双变量,取值为0-1 我尝试在代码中实现如下: 范围(L)内n的: 对于范围内的k(M): 对于范围(N)中的i: 对于范围(N)内的j: 如果(i!=起点\u S&i!=终点\u T&j!=起点\u S&j!=终点\u

我想添加这组约束:

-M(1-X(i,j,k,n))≤S_(i,j,k,n)-ToD_(i,j,k,n)≤M(1-X_(i,j,k,n))∀i、 j,k,n

其中M是一个大数字,S是一个整数变量,取值介于0和1440之间。ToD是一个4维矩阵,从Excel工作表中获取值。X i双变量,取值为0-1

我尝试在代码中实现如下:

范围(L)内n的
:
对于范围内的k(M):
对于范围(N)中的i:
对于范围(N)内的j:
如果(i!=起点\u S&i!=终点\u T&j!=起点\u S&j!=终点\u T):

prob+=(-BIG_NUMBER*(1-X[i][j][k][n])好吧,我已经搜索了几个小时,但是在我发布了这个问题之后,我找到了答案。这类问题主要是因为变量名或约束。这就是导致某些内容重复的原因。我真的不习惯这种软件,这就是为什么我花了这么长时间才找到答案的原因。无论如何,我的问题是在定义变量时:

定义X[i,j,k,n] 下限X=0#变量X的下限 上界_X=1#变量X的上界 X=LpVariable.dicts(name=“X”, 指数=(范围(N)、范围(N)、范围(M)、范围(L)), 下限=下限X, 上行=上界X, cat=整数)

定义S[i,j,k,n] 下界_S=0#变量S的下界 上界_S=1440#变量S的上界 S=LpVariable.dicts(name=“X”, 索引=(范围(N), 射程(N)、射程(M)、射程(L)), 下限=下限, 上行=上界, cat=整数) 正如您在
S
的定义中所看到的,我显然忘记了将变量的名称更改为
S
,因为我复制粘贴了它。无论如何,定义
S
的正确方法如下:

定义S[i,j,k,n] 下界_S=0#变量S的下界 上界_S=1440#变量S的上界 S=LpVariable.dicts(name=“S”, 指数=(范围(N)、范围(N)、范围(M)、范围(L)), 下限=下限, 上行=上界, cat=整数) 这就是我运行代码的方式

Traceback (most recent call last):
  File "basic_JP.py", line 163, in <module>
    prob.solve()
  File "C:\Users\dimri\Desktop\Filesystem\Projects\deliverable_B4\lib\site-packa
ges\pulp\pulp.py", line 1643, in solve
    status = solver.actualSolve(self, **kwargs)
  File "C:\Users\dimri\Desktop\Filesystem\Projects\deliverable_B4\lib\site-packa
ges\pulp\solvers.py", line 1303, in actualSolve
    return self.solve_CBC(lp, **kwargs)
  File "C:\Users\dimri\Desktop\Filesystem\Projects\deliverable_B4\lib\site-packa
ges\pulp\solvers.py", line 1366, in solve_CBC
    raise PulpSolverError("Pulp: Error while executing "+self.path)
pulp.solvers.PulpSolverError: Pulp: Error while executing C:\Users\dimri\Desktop
\Filesystem\Projects\deliverable_B4\lib\site-packages\pulp\solverdir\cbc\win\64\
cbc.exe
Welcome to the CBC MILP Solver
Version: 2.9.0
Build Date: Feb 12 2015

command line - C:\Users\dimri\Desktop\Filesystem\Projects\deliverable_B4\lib\sit
e-packages\pulp\solverdir\cbc\win\64\cbc.exe 5284-pulp.mps branch printingOption
s all solution 5284-pulp.sol (default strategy 1)
At line 2 NAME          MODEL
At line 3 ROWS
At line 2055 COLUMNS
Duplicate row C0000019 at line 10707 <     X0001454  C0000019  -1.000000000000e+
00 >
Duplicate row C0002049 at line 10708 <     X0001454  C0002049  -1.000000000000e+
00 >
Duplicate row C0000009 at line 10709 <     X0001454  C0000009   1.000000000000e+
00 >
Duplicate row C0001005 at line 10710 <     X0001454  C0001005   1.000000000000e+
00 >
At line 14153 RHS
At line 16204 BOUNDS
Bad image at line 17659 <  UP BND       X0001454   1.440000000000e+03 >
At line 18231 ENDATA
Problem MODEL has 2050 rows, 2025 columns and 5968 elements
Coin0008I MODEL read with 5 errors
There were 5 errors on input
** Current model not valid
Option for printingOptions changed from normal to all
** Current model not valid
No match for 5284-pulp.sol - ? for list of commands
Total time (CPU seconds):       0.02   (Wallclock seconds):       0.02