2012-04-12 1 views
3

Я пишу приложение для составления плана автоматического обучения в университете и использую для этого генетического алгоритма. Но теперь я столкнулся с некоторыми проблемами с реализацией.генетический алгоритм для составления расписания занятий

В самом начале я предположил, что у нас есть классы с продолжительностью 1 временной интервал (временной интервал = 1 час), и мы можем просто поместить его в массив (представляет сетку расписания: 1-й массив с емкостью числаOfRooms * numberOfDays * numberOfTimeslots) и может также выполнять мутацию и кроссовер без проблем.

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

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

ответ

3

Хорошее правило может пересекать только классы, имеющие одинаковые временные интервалы. Например, вы можете пересечь класс, который занимает два временных интервала с двумя классами, которые занимают один временной интервал.

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

Другой (лучший) способ создает более сложную структуру данных: DailyRoomOccupation. Эта структура данных будет содержать:

  • дневная емкость комнаты, выраженная в количестве временных интервалов;
  • a (двойной) список классов, запланированных на этот день в этой комнате;
  • функция, которая вычисляет, будут ли классы в списке помещаться в временные интервалы;
  • функция, которая позволяет перекрещивать два разных DailyRoomOccupation s, заботясь о пересечении только равных количеств временных интервалов.
+0

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

+0

... продолжение , если мы будем выполнять эти операторы в DailyRoomOccupation, тогда мы не сможем переупорядочить классы внутри объекта с помощью этих операторов, если мы будем выполнять операции с классы в DailyRoomOccupation, то мы сталкиваемся с проблемой, которую я описал в реу очень рано ( –

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

  • Нет связанных вопросов^_^