私は現在、次の問題に取り組んでいます。これは、次のことを前提として、最も経済的なスケジュールを作成する(最も少ない代替品を使用する)クライアントのためです。
- 代理人は、可能な限り連続して教師の代わりに働く必要があります(*大きな懸念事項ではありません)
- 潜水艦は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のサブを達成できる方法があるかどうかを確認したいと思います。前もって感謝します!