这就是我的问题。比方说,我有10种产品要打包。所有10种产品的包装都在同一条生产线/机器上完成。
不同的产品有不同的设置时间。例如,从产品1到产品2的设置时间(您必须调整高度,并做一个小清理)是30分钟。从产品2到产品1(只需调整高度,无需清理),安装时间为15分钟。从产品1到产品3,需要5分钟,等等。
我正在尝试最小化设置时间。
我该如何解决这个问题呢?我的实际问题有100个不同的产品(所以是一个100 x 100的矩阵)
这真的很类似于旅行商问题。不同之处在于,您完全不必离开产品1(或TSP中的城市A),也不需要在结束时返回到产品1。
这是我过去用过的TSP代码。我可以修改它来解决我的问题吗?或者有没有其他方法可以做到这一点?
谢谢!
// ***********************
// Parameters
// ***********************
int N = ...;
range V = 1..N;
// arcs
tuple arc {int v_dep; int v_arr;}
setof(arc) A = {<i,j> | i,j in V: i != j};
// Matrix Setup Time
float D[V][V] = ...;
// ***********************
// Decision variable
// ***********************
// x [<i,j>]= 1 if node j follows i
dvar boolean x[A];
// flow conversion
dvar float+ y[A];
// ***********************
// Objective
// ***********************
// Minimize setup times
minimize sum (<i,j> in A) D[i][j]*x[<i,j>];
subject to {
forall (v in V)
sum (a in A: a.v_arr == v) x[a] == 1;
forall (v in V)
sum (a in A: a.v_dep == v) x[a] == 1;
forall (v in V:v != 1)
sum (a in A: a.v_arr == v) y[a]-sum (a in A: a.v_dep == v) y[a] == 1;
sum (a in A: a.v_arr == 1) y[a]-sum (a in A: a.v_dep == 1) y[a] == -(N-1);
forall (a in A)
y[a] <= N*x[a];
};发布于 2016-08-30 23:49:09
如果我很好地理解你的问题,你可以通过创建一个“产品0”来将它简化为TSP,从产品0到产品i的成本为0,从产品1到产品0的成本为0。
那么你的打包问题就变成了一个以"Product 0“开始并以它结束的TSP。
https://stackoverflow.com/questions/38985918
复制相似问题