这是我的问题。比方说,我有 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];
};