0

私は現在、次の問題に取り組んでいます。これは、次のことを前提として、最も経済的なスケジュールを作成する(最も少ない代替品を使用する)クライアントのためです。

  • 代理人は、可能な限り連続して教師の代わりに働く必要があります(*大きな懸念事項ではありません)
  • 潜水艦は6期間しか働けません

これまでのところ、教師クラス(以下に示す)と、実際に最適なスケジュールを作成するオーガナイザークラスがあります。今、私はグリッド全体でプログラムループを実行して、各代替を埋めています。

Teacher[] t= new Teacher[14];
Organizer o = new Organizer(t);         
o.sort();

int[][] g = o.getGrid();

入力例:

t[0] = new Teacher("Teacher 1", "Mr", new int[]{1,0,1,0,0,0,0});
t[1] = new Teacher("Teacher 2","Mr", new int[]{1,1,0,1,1,0,1});
t[2] = new Teacher("Teacher 3","Mr", new int[]{0,1,1,1,1,1,0});
t[3] = new Teacher("Teacher 4","Mr", new int[]{1,1,0,1,1,0,1});
t[4] = new Teacher("Teacher 5","Mr", new int[]{1,1,0,0,1,1,1});
t[5] = new Teacher("Teacher 6", "Mr", new int[]{1,1,1,0,0,1,1});
t[6] = new Teacher("Teacher 7", "Mr", new int[]{0,0,1,0,1,1,1});
t[7] = new Teacher("Teacher 8", "Mr", new int[]{1,1,0,0,1,1,1});
t[8] = new Teacher("Teacher 9", "Mr", new int[]{1,1,1,1,1,0,0});
t[9] = new Teacher("Teacher 10", "Mr", new int[]{0,0,0,1,1,1,0});
t[10] = new Teacher("Teacher 11", "Mr", new int[]{0,0,1,0,0,1,1});
t[11] = new Teacher("Teacher 12", "Mr", new int[]{0,0,1,1,0,1,0});
t[12] = new Teacher("Teacher 13", "Mr", new int[]{1,1,1,1,0,0,0});
t[13] = new Teacher("Teacher 14", "Mr", new int[]{1,1,0,1,1,0,1});

上記の出力(私が使用しているアルゴリズムを使用):

                    P1  P2  P3  P4  P5  P6  P7
Teacher 1           1   -   1   -   -   -   -
Teacher 2           2   1   -   1   1   -   1
Teacher 3           -   2   2   2   2   2   -
Teacher 4           3   3   -   3   3   -   3
Teacher 5           4   4   -   -   4   3   4
Teacher 6           5   5   4   -   -   4   5
Teacher 7           -   -   5   -   5   5   6
Teacher 8           6   6   -   -   6   6   7
Teacher 9           7   7   6   7   7   -   -
Teacher 10          -   -   -   8   8   7   -
Teacher 11          -   -   8   -   -   8   8
Teacher 12          -   -   9   9   -   9   -
Teacher 13          8   9   10  10  -   -   -
Teacher 14          9   10  -   11  9   -   10

ご覧のとおり、プログラムは有効なスペースをループし、サブが最大ティーチング期間に達するまでサブで埋めてから、新しいサブを開始します。実は、手作業で使用する潜水艦の数を10まで減らすことができたので、無駄な、より効率的なアルゴリズムを見つけようとしていました。

この入力では、使用されるサブの最小数は9(P2列によって制約されます)なので、その数、または少なくとも10のサブを達成できる方法があるかどうかを確認したいと思います。前もって感謝します!

4

1 に答える 1

0

各列について、空いているスペースがいくつあるかを計算します。

各サブを最初に最も空きスペースのある列に配置し、次にランダムに配置します。このアルゴリズムは、与えられた問題を 10 人の潜水艦で解決します。

あなたの特定の例では、59個のスペースがあります。各サブは 6 つのスペースしか埋めることができないため、10 が機能するサブの最小数です。必ず最適解が見つかると信じています。

(私はあなたの連日のルールを無視しました。「その後ランダムに」ルールは、それを最適化しようとするものに置き換えることができます...)

于 2012-04-26T01:37:51.407 に答える