Pull to refresh

Comments 5

Спасибо, интересная статья.
Попробовал на MiniZinc решить вашу задачку с счастливым билетом. Рассчитывает все возможные комбинации номеров за несколько секунд.

var 0..9: A;
var 0..9: B;
var 0..9: C;
var 0..9: D;
var 0..9: E;
var 0..9: F;

constraint (A + B + C) = (D + E + F);

solve satisfy;   

output [show(A), show(B), show(C), show(D), show(E), show(F)];

Когда-то тоже пытался составлять расписание уроков, но без привлечения специфических знаний по математике… Жуть.
Спасибо за статью, дали пищу для размышлений.
Спасибо за статью. Интересная тема, а ниже вопросы.
Как вы интегрируете MiniZinc и вашу систему? Есть специальные Runner'ы, которым скармливаются исходные переменные и конфигурация ограничений или как-то иначе?
Это упрощенный пример из реального применения? Если да, то как много времени обычно занимает построение расписания?
При изменении исходных данных вы перестраиваете расписание целиком? Как в этом случае учитывается та часть расписания, которую уже нельзя изменить? Ограничения?
1. С идеологической точки зрения, наверное, не совсем правильно интегрировать систему с MiniZinc. MiniZinc в большей мере предназначен для разработки моделей и их проверки на наборе различных солверов. Далее в своей программе, на конкретном языке программирования можно уже использовать нужный солвер, подключая его как библиотеку. При этом не обязательно переписывать модель, созданную в MiniZinc на конкретный солвер, можно ей подкладывать промежуточный код FlatZinc. Хотя, ничто не мешает из своей программы вызывать консольные утилиты MiniZinc и формировать ответ в формате XML, а потом проводить обработку в программе.
 
2. Пример не совсем реальный, скорее это некая его основа, затравка. Настоящая модель гораздо больше и сложнее. Если у вас есть наработки для различных требований, то время разработки занимает не очень много времени.
 
3. Целиком расписание перестраивать не требуется. Если часть данных известно или уже была рассчитана ранее, то они указываются как ограничения и значения вычисляются для оставшейся половины.
Sign up to leave a comment.