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