планировщик личного расписания для студентов - PullRequest
3 голосов
/ 10 февраля 2012

Я разрабатываю консольный персональный планировщик расписания для студентов. Моя цель состоит в том, чтобы приложение выполняло действия, которые пользователь хочет выполнить, вместе с общим временем, доступным пользователю для дня, а затем выделяло временные интервалы и отображало их в табличном формате.

Выделенное время будет зависеть от предмета (больше времени отводится на более важные задачи и т. Д.).

Я делаю этот проект для моего 4-го семестра англ.

Я начал работать над алгоритмом, мой вопрос в том, есть ли такой алгоритм (уже) доступен? Я искал в Интернете, но все алгоритмы планирования, которые я нашел, предназначены для расписания автобусов и других, но не совсем то, что я ищу.

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

По просьбе amit, вот несколько ресурсов.

Проблема с рюкзаком, насколько я понимаю, это проблема максимизации.Учитывая набор предметов особой полезности и веса, вы хотите выбрать оптимальное подмножество - то есть «лучшую» комбинацию предметов для данного веса - максимальную вместимость, которую вы можете нести в рюкзаке / рюкзаке.

Например, бензопила может быть очень полезным предметом во вторжении зомби, но она большая и громоздкая, поэтому ее полезность может буквально перевесить ее объем.Принимая во внимание, что нож также полезен, но весит намного меньше.Если вы выберете нож, вы также можете выбрать горелку, лом, сухой пайк и спальный мешок, а если вы выберете бензопилу, у вас останется место только для сухих пайков.

Ваша особая проблема - попытатьсявписать набор действий в фиксированный период времени.Для этого вам необходимо взвесить действия по определенным факторам, таким как

  • период дня, в течение которого они возможны
  • их продолжительность
  • их желательностьстуденту
  • независимо от того, могут ли они быть запланированы непосредственно перед или после аналогичных занятий - например, если студент только что посещал тренажерный зал, он вряд ли захочет посещать занятия по плаванию.

Затем вам нужно придумать алгоритм взвешивания для этих различных факторов и использовать этот алгоритм взвешивания, чтобы решить, как выбирать мероприятия для конкретного дня;помните, что разные люди могут иметь разные предпочтения, и вам, вероятно, потребуется разрешить какую-либо форму конфигурирования в используемом вами весе.

(Обратите внимание, что все это гипотетически, исходя из моего ограниченного ознакомления с алгоритмом -как я уже говорил, я никогда не делал этого сам, и вышеизложенное отражает мои первые мысли о том, как я могу решить эту проблему).

Вот некоторые ресурсы, которые я нашел через Google: http://www.es.ele.tue.nl/education/5MC10/Solutions/knapsack.pdf

http://mathworld.wolfram.com/KnapsackProblem.html

http://academicearth.org/lectures/knapsack-problem-1 (видео лекции MIT)

удачи, это звучит как интересный проект.

0 голосов
/ 27 марта 2012

Наконец, я работал над своим проектом и завершил его

код:

 package project;

public class TimeTable extends Time {
    int i;

    String table[] = new String[24];
    Activity activity[];
    static int currentTime;
    boolean flag = false;

    public void setTable(Activity[] iActivity){
        setNontime();
        activity = iActivity;
        int temp;

        temp = clgStart- wakeTime; 
        currentTime=wakeTime;
        System.out.println("tmep is "+temp);
          setTimeTillCollege(temp);

          currentTime= clgEnd;
          temp = dinner - clgEnd;

          System.out.println("temp is"+temp);

          setTimeTillDinner(temp);

          currentTime = dinner+1;
          temp= sleepTime-dinner-1;

          setTimeTillSleep(temp);

      }



    private void setTimeTillSleep(int temp) {
        if(temp<=2){
            table[currentTime]= getNonAcad();
        }
    }

    private void setTimeTillDinner(int temp) {
        if(flag){//if the academic subs are not given in daylight
              /*          if(temp<1){
              table[currentTime] = "timepass";
          } else*/
              if(temp==1){
              table[currentTime] = getNonAcad();
          } else if(temp==2){
              table[currentTime] = getAcademic(2);
          } else {
              while(temp!=0){

              }
          }   
      }   else {
          while(temp!=0){
              if(temp > 4){
                  table[currentTime]=getAcademic(2);
                  flag=true;
                  temp-=2;
              } else if(temp==4){
                  table[currentTime]=getAcademic(2);
                  temp-=2;
                  table[currentTime]=getAcademic(2);
                  temp-=2;
                  flag=true;
              } 
          }
    }

}



    private void setTimeTillCollege(int temp) {

        if(temp==1){
              table[currentTime] = "Revise";
          } else if(temp==maxSlot){
              table[currentTime] = getAcademic(2);
          } else {
              while(temp!=0){
                  if(temp > 4){
                      table[currentTime]=getAcademic(2);
                      flag=true;
                      temp-=2;
                  } else if(temp==4){
                      table[currentTime]=getAcademic(2);
                      temp-=2;
                      table[currentTime]=getAcademic(2);
                      temp-=2;
                      flag=true;
                  } else if(temp<4){

                  } else if(temp==1){
                      getAcademic(1);
                  }
              }
          }
    }



    private String getNonAcad() {
        for (i = 0; i < activity.length; i++) {
            if(!activity[i].over && !activity[i].acad){
                activity[i].over = true;
                currentTime+=activity[i].timeSlot;
                return activity[i].name;
            }
        }
        return null;
    }


    private String getAcademic(int j) {
        for (i = 0; i < activity.length; i++) {
            if(!activity[i].over && activity[i].credit==j){
                activity[i].over = true;
                currentTime+=activity[i].timeSlot;
                return activity[i].name;
            }
        }
        return null;
    }

    @SuppressWarnings("unused")
    private String getAcademic() {
        for (i = 0; i < activity.length; i++) {
            if(activity[i].credit==1 && activity[i].acad){
                activity[i].over = true;
                currentTime+=activity[i].timeSlot;
                return activity[i].name;
            }
        }
        return null;
    }


    public  void setNontime(){

        for (i = 0; i < table.length; i++) {
            table[i]= new String();
        }

        table[sleepTime]="Sleep";
        table[clgStart]="College";
        table[clgEnd]="College ends";
        table[dinner]= "Dinner";

    }


    public void display() {
        System.out.println("inside display method");
        for ( i = wakeTime; i < table.length; i++) {
                System.out.println(i+" "+table[i]);
            }

}}

это класс в моей программе, в котором происходит фактическое действие

Activity - это класс, который определяет имя, timeSlot, кредит активности и т. Д. Time - это класс, который определяет различные времена, такие как wakeTime, sleepTime и т. Д.

, а в классе расписания создается таблица времени

это консольная программа, я также создал ее приложение с графическим интерфейсом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...