Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Составитель расписаний(автоматический)


Страницы:   1 2

SarDoX ©   (2005-11-04 10:03:00) 

я решил я все таки написать составитель расписаний.
но всю сложность работы понял тока спустя неделю работы. перечислю сложности:
а) у нас в лицее 7-11 классы, по 3 класса на параллеле, итого 15 классов.
б) надо учитывать
1)один учитель в один день не может вести урок у двух классов одновремеенно(так же некоторый учителя могут вести уроки как у одной параллели, так и у другой)
2)некоторые уроки должный быть парами, некторые нет
3)не должно быть дней, когда в расписании 2 физики, 2 алгебры, 2 русский, т.е. тяжелых дней(тут я решил ввести коэф сложности для каждого предмета)
4)одиночный уроки, такие как черчение, химия, геометрия и т.д
у одной параллели должны быть в один день
это далеко не весь список, чем дальше, тем хуже...
2 раза переписывал весь код.
решил было сделать генератором. получилось составлять расписание на неделю для одого класса с учетом  парный - непарных предметов, учитывается кол-во предметов в неделю, например, если в неделе одно черчение, то оно должно быть только одно.
но позже понял, что если добавить еще 2 класса в параллели, то с генератором далеко не уедешь.. а если учесть, что потом бы пришлось добавлять 4 параллели..
в общем хотелось бы узнать, каким образо можно было бы это все осуществить, как правильно организовать программу. спрашиваю не потому, что нужно халява, а потому, что уже действительно не знаю, каким образом.
а начинать другую работу очень не хочется, хочется эту добить, сделать.


NORDmen   (2005-11-08 14:03:00) [21]

2SarDoX :
я делал такую прогу все работало. могу даже исходники дать.
пишите на мыло.


Anatoly Podgoretsky   (2005-11-08 14:02:00) [22]

SarDoX   (08.11.05 09:59) [13]
Хочешь еще одну проблему, на много порядков проще, чем остальные?
Ты видел реальное расписание? Это такая гигантская простыня, и как собираешься ее отображать на дисплее? Как этим будут пользоваться учителя, а ведь это предмет для постоянной смены, в течении часа может быть изменено несколько раз. Печатать каждый раз, а не жалко пустой траты бумаги. Или у каждого учителя есть компьютер и средство оповещения об изменении?


Джо   (2005-11-08 13:44:00) [23]

Когда-то (давно) думал над подобной задачей. Додумался до того, что неплохо было бы придумать специальный мета-язык описания условий.


SarDoX   (2005-11-08 10:10:00) [24]

а если учесть, что  одни и те же учителя(например, биология, химия, черчение) ведут уроки у 7,8,9,10,11...
продожить? или сами поняли, что прийдется перебирать все классы, начиная с 7 да 10В, что б добавить биологию в 11А:)


SarDoX   (2005-11-08 09:59:00) [25]

Sergey_Masloff, Calm ---
было бы замечательно по аси пообщаться.
для каждого урока нужно хранить: номер урока, само название урока + учитель.
уроков у одного класса в день 6, в неделю - 36, а у всех параллелей 11 * 6 * 6 = 396 уроков в неделю.
я не пойму, в чем хранить?
если вопрос не понятен, то:
возмем 9-10 классы.
некоторые учителя ведут уроки как у 9, так и у 10 классов(например, русский ).
вот я сгенерировал расписание для 9-х классов.
вот я сгенерировал расписание для 10А класса.
потом, когда я генерирую расписание для 10Б класса, мне уже надо учитывать расписание не только 10А , но и 9-х классов, т.е что б не получилось, что у одного учителя(здесь -учителя русского) в один час сразу два урока - у 9* и у 10Б класса.
т.е. мне надо проверить всю параллель 9-х классов, нет ли у какого нить из них 3-м уроком в понедельник русского языка . если нет, то я могу добавить 10Б в понед третьим уроком русский, else опять перегенирировать расписание.
это самое else встречается в алгоритме очень часто, т.е перебор будет очень большим(хотя меня это не волнует).
как мне все это хранить, где?
сейчас, когда прога генерили расисание для одного класса на всю недедлю, я храню так(переделывать прийдется точно.):
weak:array[1..6, 1..6] of string;
1-6 уроки
1-6 дни недели
мне пока не надо учитывать учителей, лишь что б одновременно уроко не было.
но куда мне добавить учителей? по идее надо к каждому уроку прописывать
3 урок / русский яз / анна викторовна
и, не торопитесь, нельзя забывать, что классов может быть 11*3=33!!! шт.
а создавать 33 массива бред.(да и мож в какой нить школе нет 4 класса..)
хранить в одной бд? гм. я не представляю как.
проблему объяснил, как смог, по-другому не смогу.


Чапаев   (2005-11-08 09:46:00) [26]


> Автоматом подобное "человеческое" расписание составить невозможно.

Ну почему ж... Один мой экс-препод даже книжку написал о том, что можно. Только очень долго, потому что задача NP-полная.

Правда, он доктор технических наук, а не лицеист. ;-)


Calm   (2005-11-08 09:41:00) [27]

Разделяю мнение Sergey_Masloff

SarDoX, ты уже сделал не мало.


Sergey_Masloff   (2005-11-08 09:21:00) [28]

SarDoX   (08.11.05 07:21) [4]
> а работа с бд(постоянный многочиленный запросы в бд...) очень замедлит >работу программы.
Ерунда. Ничего не замедлит тем более расписание составляется не каждые 5 секунд. Храни в БД.
 Если хоть что-то получается то не в коем случае не бросай это - конечно полнофункциональный автомат не получится но если сделаешь хороший полуавтомат это колоссальный полезный опыт.


SarDoX   (2005-11-08 08:52:00) [29]

RzCoDer? это ты про что? или ты думаешь, что этим можно всю прогу написать?


SarDoX   (2005-11-08 08:51:00) [30]

Anatoly Podgoretsky, возможно, спорить не буду; чем дальше я писал, тем больше сложностей появлялось.
но того, что я уже понял, мне достаточно: я уже знаю, что не справлюсь с этой работой.

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


Anatoly Podgoretsky   (2005-11-08 08:46:00) [31]

SarDoX   (04.11.05 10:03)  
Ты еще не понял ее сложности


RzCoDer   (2005-11-08 07:37:00) [32]

IF...THEN...BEGIN...END ELSE BEGIN...END


SarDoX   (2005-11-08 07:23:00) [33]

идейку, тему программы...


SarDoX   (2005-11-08 07:21:00) [34]

значит так. занялся все же я этим и дальше.
программа успешно составляла действительно хорошее расписание с учетом многих факторов на неделю для одного класса.
если добавить еще параллель или несколько классов, то усложится программа не особо.
но появилась трудность - мы не знаем сколько классов в параллели, сколько параллелей в школе всего.
затем, нам надо где то хранить расписание на каждый день для каждого класса(если классы 1-11 и по 3 класса в параллели, то всего классов 33!!! ) + учителя, ведущие данный предмет + кабинет урока.
но мы не знаем, сколько классов  у той или иной школы, для которой генерируется расписание, поэтому хранить в массивах(кт надо указывать длину заранее..) вряд ли получится. хранить инфу в бд? бред, т.к при составлении расписания для одного класса, надо учитывать расписание другого, а работа с бд(постоянный многочиленный запросы в бд...) очень замедлит работу программы. хранение в stringlist ах или еще чем нить подобном - тоже плохой вариант, даже - невозможный..
сложная задачка, однако..
ужо подумываю над другой темой.:(
предлагали тестовую программу? не, это уж слишком просто будет..
библиотека? у нас уже есть такая в школе, писать "велосипед" не особо хочется.
кто то предлагал по расписанию выводить графики загруженности учеников и учителй - представьте скока времени надо завучу потратить на забивание всего школьного расписания в прогу(даже если облегчить этот процесс..)
и результат - мало нужный кому либо график...
жалЪко, что прийдется оставить прогу..
мож еще кто идейку подкинет?


OpenSource   (2005-11-04 22:18:00) [35]

Существует множество алгоритмов поиска, так называемой, идеальной пары.
Думаю - подобный алгоритм к месту в таком случае. Хотя эти алгоритмы и не простые, но попытайся воспользоваться, если найдёшь:) Попробуй поискать в и-нете по ключам "алгоритмы поиска идеальных пар" или в этом роде.


PAVIA   (2005-11-04 21:53:00) [36]

1. Подход.
Так как много огранечений, то можно попробовать с учетом этих огранечений сделать перебор.
2. Подумать как бы ты делал буть ты Заучем. И на основе этого делать программу.
Совсем подобную человеку составить не получиться, но выбрать оптимальные варианты возможно. Такие задачи только так и решаются.


msguns   (2005-11-04 13:48:00) [37]

Автоматом подобное "человеческое" расписание составить невозможно. Надо, имхо, просто "помочь" человеку (завучу, директору или кто там верстает расписание) избежать коллизий. Т.е. сначала составляется план уроков, при этом надо чтобы суммарный курс каждого предмета "попадал" на общее кол-во часов по плану. При этом, возможно, следуеь учитывать доп.факторы. Такие, как ограничение в чередовании некоторых предметов, равномерное распределение нагрузки на детей и т.д.

Потом график учителей (персонально) с плановым кол-вом часов, набором предметов, "вилкой" дневной почасовой занятости и т.д.

И вот только потом "накладывать" учителей на уроки. Опять же в ручном режиме, но с программной подсказкой. И тоекущим контролем по всем трем параметрам (предметы+ученики+преподаватели)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо