0

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

 };
4

1 に答える 1

0

私があなたの問題をよく理解していれば、製品 0 から製品 i までのコストが 0 で、製品 i から製品 0 までのコストが 0 の「製品 0」を作成することで、問題を TSP に減らすことができます。

次に、パッケージングの問題は、「製品 0」で始まり、それで終わる TSP になります。

于 2016-08-30T15:49:08.773 に答える