これが私の問題です。たとえば、梱包する製品が 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];
};