2012-02-10 5 views
3

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

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

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

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

+2

Похож вариацией [ранец задачи] (Http: // ан .wikipedia.org/wiki/Knapsack_problem) – mcfinnigan

+1

@mcfinnigan: вы должны опубликовать его в качестве ответа [с более подробной информацией о проблеме и ресурсах для ее решения или реализации Java) – amit

+0

@mcfinnigan: можете ли вы дать сокращение проблемы с рюкзаком? потому что я нахожусь на втором курсе и поэтому не имел теории алгоритмов в качестве курса, поэтому, к сожалению, я не могу понять полностью математическое описание проблемы с рюкзаком, данное в wikipedia – lucifer

ответ

6

По просьбе 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

Наконец я работал над проектом и закончили его

код:

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]); 
      } 

}} 

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

активность является класс, который определяет имя, timeSlot, кредит активности и т. д. время - это класс, который определяет разные времена, такие как время пробуждения, sleepTime и т. д.

и в классе расписания таблица времени генерируется

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

Смежные вопросы