• 締切済み

スケジューラーのプログラミング方法

いくつかの制約条件を持つ一週間分の予定をスケジューリングするプログラムを作成したいのですが、プログラミングを始めたばかりでどのように作ればいいのかわかりません。 プログラミングを実行した結果は、 <条件の例> スケジュール名 優先度 必要な時間(時間) 必要な人数 期限日 スケジュール1  2    3         5   ○月□日 スケジュール2  3    5         10   ○月▽日 スケジュール3  1    2         7   ○月□日 ・・・ 日にち     自由な時間(時間) 確保できる人数 ○月×日(月)   10          15 ○月△日(火)   9          7 ○月▽日(水)   12          10 ・・・ という条件があったときに、 <実行結果の例> ○月×日(月)(スケジュール名2) (スケジュール名4) ○月△日(火)(スケジュール名1)  ○月▽日(水)(スケジュール名5) (スケジュール名3) ・・・・・・ という結果が出るようにしたいのですが、どうしたらいいのでしょうか? よろしくお願いします。

みんなの回答

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.3

No2です。返事が遅くなって申し訳ありません。 とりあえず、 ・スケジュールはスケジュール名と必要な人数のみとし、 各スケジュールを完了させる日数をとりあえず1日とする。 つまり、人数を確保できればその日にスケジュールは完了する、ということ。 これで実際に数件のデータがあったと仮定して、 自分の手で実際にスケジュールを組んでみた方がよいでしょう。 その「組み方」を元にプログラムを作成することになります。 ※もちろん、本番ではコンピュータがスケジューリングするので、 何となく組む、とかだいたいで、というような「人間的な」やり方はNGです。 それができれば、次にスケジュール完了が2日かかったとして、 同じようにスケジューリングを考えていきます。 2日分必要なので上の用件よりも相当難しいでしょう。 同様に3日だったら…として考えていき、最終的には スケジュールごとに完了するまでの日数がバラバラの場合を考えます。 そこまでできれば、人数と時間(ただし単位は「時間」ではなく「日」) を考慮したスケジューリングができるようになります。 以上が、スケジューリングを組む考え方、アルゴリズムについてです。 ここまでは実際にプログラムを組む前の話です。 プログラムを組む際には、上で考えたアルゴリズムを プログラムとしてコード化していくことになります。 実際に「○○する」という話ではなく、あくまで「どう作っていくか」 という方向性の話になりました。 これでもかなり難しい話になったと思います。 (自分の説明がかなり分かりづらい、というのもあると思いますが…) 本当はプログラム初心者の場合、こういった「アルゴリズムを考える所」は 他の人にまかせて、コードを書く所に専念した方が効率的に勉強できます。 メーラーやテキストエディタのようなメジャーなプログラムの場合、 書籍やWebでもいろいろ解説されているので、 アルゴリズムを自分で考える必要はありません。 それを読んでプログラムの作成方法や考え方を勉強し、 ある程度読みこなした上で自分オリジナルのアルゴリズムを考える段階に ステップアップしていく方がお勧めです。 >人数の条件だけを考慮しただけのプログラミングだったら容易に作れるのでしょうか? どこかに似たようなものを作っている書籍、サイトがあれば、 それを倣って勉強し、自分の必要とするものに作り直していけばよいですが、 これまで誰も作ってないようなものを作る場合、 初心者には相当高いハードルになると思います。 もし超えられそうにない、と感じるようでしたら、 遠回りでも、もっと簡単なもの、サンプルのあるようなものを いろいろ勉強してスキルを上げてから再挑戦しても良いと思います。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

>スケジュールの必要な時間と日にちの自由な時間との関係ですが、 >(自由な時間1)-(必要な時間)=(自由な時間2) >(自由な時間2)> 0 >という関係を満たすとき、スケジュールを組み込むことができるという風にしたいのです。 条件に人数がありますが、人数は考慮しなくて良いのでしょうか? 考慮しなくて良いなら、話はずいぶん簡単です。 ですが、時間も入れてスケジューリングしないといけない場合、 ものすごく話がややこしくなります。 時間と人数という2つの要素をどう組み合わせてスケジュールするか、 という問題をクリアしないといけません。 これは、プログラムどうこうの前に、どう効率的なスケジュールを組むか、 というアルゴリズムの問題になります。 また、スケジューリングを考える際にも、いろいろ考慮する点はあります。 スケジュールが組めない場合の対応も考えないといけませんし、 スケジューリングの組み合わせが複数になることもあるでしょう。 ちなみに、今回のスケジューリングプログラムはどういう目的で作るのでしょうか? プログラムの勉強として?仕事で作らないといけない? いずれにしても、質問者さんが一人で考えるには少し荷が重そうな気がします。

noname#61995
質問者

補足

条件の人数は考慮したいです。むしろ、この人数の条件を時間の条件よりもメインに扱いたいと考えています。それなので、最低限、人数の条件を考慮したスケジューリングができるようにしたいです。人数の条件だけを考慮しただけのプログラミングだったら容易に作れるのでしょうか? >スケジュールが組めない場合の対応も考えないといけませんし、 組めなかった場合には、『スケジュールが組めませんでした。』と出力させてくれれば大丈夫です。 >スケジューリングの組み合わせが複数になることもあるでしょう。 一番はじめに見つかった解を出力するようにしてくれればいいです。 >ちなみに、今回のスケジューリングプログラムはどういう目的で作るのでしょうか? 現在、Javaによるスケジューラーを作る勉強をしています。仕事ではありません。 回答になっていないかも知れませんが、すみません。 いろいろと助言をありがとうございます。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

スケジュール名4と5は何?スケジュール1~3から割り出せるものではなさそうだし… 期限の曜日は? 必要な時間と自由な時間との関係は? 掲示された表からは法則性とか条件が導き出せません。もう少し整理願います。

noname#61995
質問者

補足

ご意見ありがとうございます。 すみません。いろいろと説明不足な点が多くて。 条件についてですが、こんな感じの条件の項目があって欲しいということをわかっていただこうと思い、書いただけです。それなので数値自体は適当です。すみません。 それなので、スケジュール1~スケジュール5のそれぞれの数値などは適当でかまいません。実際、プログラムの利用者がこのプログラムを利用してスケジューリングするときに、任意に入力するようにしたいので。 同様に、日にちも3日間のみ書いてあるのですが、これも条件の項目だけを表したかっただけです。また、実際には日にちは月曜日から日曜日など7日間あり、例で書いた数値などには例として書いただけで意味はありません。プログラムの利用者に日にちの数値も任意で入力してもらうことになります。 スケジュールの必要な時間と日にちの自由な時間との関係ですが、 (自由な時間1)-(必要な時間)=(自由な時間2) (自由な時間2)> 0 という関係を満たすとき、スケジュールを組み込むことができるという風にしたいのです。 どうでしょうか?まだ不足している点がありましたら、指摘してください。よろしくお願いします。

関連するQ&A