Расписание

Автор dr.Faust, 5 ноября 2010, 11:42

0 Пользователи и 1 гость просматривают эту тему.

dr.Faust

Цитата: RFJ от 22 апреля 2011, 09:45
На Access создано больше практических баз данных, чем на всех остальных вместе взятых.

Access не база данных, впрочем как и Base.

Не понимаю товарищей советующих не использовать его, а использовать MySQL. Это всё равно, что советовать не смотреть телевизор, а смотреть НТВ.
Свобода информации - свобода личности!

RFJ

Цитата: AcetonKZ от 22 апреля 2011, 08:54Неужели Бэйз загнется?
Нормально он отработает.
В этой задаче не нужны навороченные базы данных.
Здесь главное - правильный алгоритм поиска решения (составления расписания).

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

AcetonKZ

хотелось бы уточнить: проблема в алгоритме или в макросах(т.е. платформе)?

RFJ

#33
Только в алгоритме.
Платформа может быть любой (OOo Basic, VBa, C++, ...)
Это просто задача с большим количеством "дополнительных условий" (типа "препод Иванов не может читать лекции по четвергам с 10 до 14, т.к. у него по четвергам заседание кафедры", и т.п.)

AcetonKZ

#34
Ну, тогда ладно.
Это уже решаемо(надеюсь)
Некие соображения уже наработаны(в т.ч. на Дельфи), поэтому займемся с реализацией на платформе ООо.
Цитироватьтипа "препод Иванов не может читать лекции по четвергам с 10 до 14, т.к. у него по четвергам заседание кафедры"
Ну вот, на самую рану надавили :D, если бы не это Aviability и possibility.....
На самом деле самый г_мор именно в них, слава богу, в школе нет еще числителя/знаменателя.

RFJ

Держите нас в курсе, поскольку задачка очень интересная именно в плане разработки алгоритмов такого типа.
А так как она еще и довольно сложная, то у многих руки не доходят до завершенного решения.
(Типа "да ну её, проще мне все это сделать вручную".)

RFJ

Алгоритмизация "условий" может оказаться нетривиальной задачей.
Попробуйте, например, на OOo Basic ( в Base или Calc, как вам понравится) написать решение "задачки Эйнштейна":
http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%B0%D0%B4%D0%BA%D0%B0_%D0%AD%D0%B9%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0


PS. Не с помощью словесных рассуждений, а именно программно!

RFJ

Вообще говоря, эти задачи представляют собой задачи СОЗДАНИЯ БАЗЫ ДАННЫХ на основании УСЛОВИЙ.

AcetonKZ

#38
ЦитироватьАлгоритмизация "условий" может оказаться нетривиальной задачей.
Вот, вот, все это допусловия и ломают алгоритмы(перебора, рекурсивного перебора, метод исключений,"пятнашки" - все!, пока что)
Это мы еще не учитываем, что после физры, например,с точными науками сложно....
Но усложнять будем постепенно ,только решив предыдущийвариант.
ЦитироватьНе с помощью словесных рассуждений, а именно программно!
Эту задачу решали в далеком 94, еще на борланд паскале, и чтоб вы думали , самый сложный момент - способ задания начальных условий, далее все идет как по маслу, например в "пятнашки" такая задача и была решена даже простым перебором, но долго (комп - ЕС1840 был), потом были "условные перестановки" - долго переделывали ,но работала программа считанные секунды.
Но это был не алгоритм ,а скорее, комбинаторный  перебор, попарное сравнение условий.
НО сегодня задача сложнее, чем комбинаторные перестановки из 4 по 5-ти.
ЦитироватьВообще говоря, эти задачи представляют собой задачи СОЗДАНИЯ БАЗЫ ДАННЫХ на основании УСЛОВИЙ.
Ятоже до этого дошел ,чем "правильнее" изначально база начальных условий, тем проще алгоритм.

VlhOwn

Когда-то в 80-х годах мы решали очень близкую к задаче построения расписания на Прологе. Тогда это был классический Пролог, ограничения на применимость правил приходилось моделировать. Сейчас есть масса различных реализаций Пролога и его производных с ограничениями.

Вторым, а может быть и первым, инструментом реализации таких задач, наверное является язык GPSS. К сожалению, я с ним знаком лишь на уровне решения простых задачек для дочек-студенток.

В любом случае, Вам до начала реализации потребуется создать какую-то математическую модель, описывающую взаимоотношения между объектами. Чем строже Вы ее формализуете, тем проще потом будет выбрать адекватную реализацию.

Вот пример такой формализации

VlhOwn

ЦитироватьНе понимаю товарищей советующих не использовать его, а использовать MySQL. Это всё равно, что советовать не смотреть телевизор, а смотреть НТВ.
Саша, OOo Base - это СУБД + интерфейс к этой (или иной, подключаемой) СУБД. Мой совет - не использовать СУБД HSQLDB, а использовать вместо нее, например, MySQL. Причины: ненадежность, неразвитость, неудобство.

RFJ

Цитата: VlhOwn от 22 апреля 2011, 14:21Вот пример такой формализации
VlhOwn, ссылка на этот пример уже была в Ответе#2 от convas:
http://forumooo.ru/index.php/topic,1062.msg8128.html#msg8128

AcetonKZ

Уточняю.
Надо, чтоб любой юзер(читай - завуч) открыл ООо файл ,увидел таблицы со списками учителей, классов , нагрузки. Добавил свои данные, нажал "Генерировать Расписание" и шел пить кофе, обмывать результат ;)
Про подключение по ОДБЦ, мускул или сиквэл, сиквел-сервер  и т.д. не думаем! 

RFJ

База данных (исходная) в этой задаче примитивная - набор таблиц (список учителей, список предметов, список классов, ...)
Все дело в том, что мы не знаем как программно задать связи между этими таблицами на основании "условий", сформулированных изначально в словесном виде (например, "в 6-х классах 8 уроков алгебры в неделю", "в школе три(3) 6-х класса - 6А, 6Б, 6В", "математику преподают Иванова, Петрова, Сидорова", и т.д.)
Этих условий просто огромное количество, попробуйте, для начала, хотя бы даже выписать их в столбик "словами".
Одни условия накладывают ограничения на другие, т.е. ограничивают возможные связи в БД.

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

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

AcetonKZ

#44
ЦитироватьВсе дело в том, что мы не знаем как программно задать связи между этими таблицами на основании "условий", сформулированных изначально в словесном виде (например, "в 6-х классах 8 уроков алгебры в неделю", "в школе три(3) 6-х класса - 6А, 6Б, 6В", "математику преподают Иванова, Петрова, Сидорова", и т.д.)
Нет, нет.
Я уже кое что придумал, просто в двух словах не  сказать, а развернуто сейчас нет времени расписать, может быть в воскресенье вечером выложу заготовку базы и критерии создания.
В двух словах - нам надо обеспечить каждому учителю определенное число "часов в неделю" в каждом классе, не заморачиваясь ни на что более детальное, разве что чтоб у класса не было "окон" в расписании и один учитель одновременно не может вести урок в двух классах. А далее уже добавлять все условности ,фундамент для которых надо заложить изначально!

Вот коммерческий триал вариант