3

それで..最近誰かが私に彼らのタイムテーブルを作るように頼んだので、私は同意しました。座ってみると、思ったより難しいことに気づきました。昼夜問わず4名でシフトを組むだけのタイムテーブルです。

私は次のようなことを考えました:

for Monday to Saturday {
  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person.worksDay()
      person is now not available.
    }
  }

  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person[i].worksNight()
      person[i] is now not available.
    }
  }
}

したがって、このアルゴリズムの背後にある考え方は、毎日、人が日勤または夜勤に割り当てられるということです。シフトで働いたばかりでなく、休日でもない人は対応可能です。月曜日から土曜日までです。おそらくおわかりのように、人物 A、B、C、D が与えられた場合、割り当ては次のようになります (休日に誰もいない場合)。

Mon A B
Tue C D
Wed A B
Th  C D
Fri A B
Sat C D

これは機能すると思いますが、少し明白です。私に尋ねた人は、さまざまなオプションを見たいと思っていました。このオプション以上のものを表示するためにこれを行うためのより良い方法はありますか? それとも、あなたのためにこれを行うプログラムさえありますか?

4

3 に答える 3

2

次の理由から、遺伝的アルゴリズムを使用する必要があると思います。

も見てください:同様の質問別の質問

于 2011-01-04T15:00:20.827 に答える
1

力ずくは無意味です。

Drools Planner、Choco、JGap、cpsolverなどのフレームワークを使用して解決してください。これらのフレームワークの一部 (Drools Planner を含む) では、最適化アルゴリズムを簡単に切り替えたり、問題に最適なアルゴリズムを決定するためのツールを含めたりすることができます。

于 2011-12-20T17:07:37.060 に答える
0

制約プログラミングの問題は複雑で、一般にプログラミングが困難です。問題はかなり単純ですが、それを行うためのツールをダウンロードしたい場合があります。Gnu Linear Programming Kit はおそらく最良の選択肢です。ソルバーと使用できるモデリング言語が含まれています。スケジューリングについては、非常に長い記事を1 回書きました。

于 2010-10-18T16:42:23.573 に答える