Реализация алгоритмов планирования с Java - PullRequest
5 голосов
/ 08 октября 2010

кто-нибудь из вас имел дело с проблемами планирования заданий в Java? Я должен работать над проблемой планирования проекта с ограниченными ресурсами и хочу попросить несколько практических советов. Есть ли хорошие библиотеки для реализации алгоритмов? Какие эффективные структуры данных мне следует использовать?

редактировать

Кажется, я не объяснил это правильно. Я хочу решить проблему планирования проекта с ограниченными ресурсами (RCPSP), которая, как известно, является NP-полной с другой эвристикой. Проблема определяется следующим образом:

Проект состоит из набора A = {1, ..., n} действий, которые должны выполняться на наборе R = {1, ..., m} ресурсов. Для действия j ∈ A требуется rjk ≥ 0 единиц ресурса k ∈ R в течение всего времени его невыполнимой обработки pj ≥ 0. Каждый ресурс k ∈ R имеет ограниченную емкость Rk> 0. Существуют отношения приоритетности между действиями, так что деятельность j ∈ A не может быть начата до завершения всех ее непосредственных предшественников. Цель состоит в том, чтобы найти приоритет и возможный график использования ресурсов, который минимизирует общую продолжительность работы.

Ответы [ 5 ]

1 голос
/ 20 декабря 2010

Существует несколько библиотек для решения задач планирования NP: Drools Planner (с открытым исходным кодом, ASL Java), JGap, cpsolver, opents, ...

1 голос
/ 08 октября 2010

JDK 1.6 уже есть очень хороший. посмотрите на java.util.concurrent.ScheduledThreadPoolExecutor

1 голос
/ 15 октября 2010

AMPL - это язык моделирования, который вы можете использовать для этого, он может быть скомпилирован в смешанную целочисленную линейную программу и решен с помощью ряда решателей. Я бы предложил язык моделирования GNU MathProg, это подмножество языка AMPL, и вы можете использовать его с решателем GLPK . Это очень распространенная проблема, и вы, вероятно, сможете найти пример, очень близкий к тому, что вы хотите сделать.

edit: на самом деле glpk поставляется со своим собственным языком моделирования, который является лишь подмножеством AMPL, что, вероятно, облегчит задачу.

1 голос
/ 08 октября 2010

OpenSymphony Quartz Scheduller - правильный инструмент для этой задачи.

С веб-страницы Quartz:

"Что такое кварц?

Кварц - этоПолнофункциональный сервис планирования заданий с открытым исходным кодом, который можно интегрировать или использовать практически с любым приложением Java EE или Java SE - от самого маленького автономного приложения до самой большой системы электронной коммерции. Кварц можно использовать для созданияпростые или сложные расписания для выполнения десятков, сотен или даже десятков тысяч заданий, задания, задачи которых определены как стандартные компоненты Java, которые могут выполнять практически все, что вы можете их запрограммировать. Quartz Scheduler включает в себя множество функций корпоративного класса, такие как транзакции JTA и кластеризация.

Кварц можно свободно использовать и лицензировать под лицензией Apache 2.0.

Пожалуйста, ознакомьтесь с нашим обзором для более быстрой информации. "

0 голосов
/ 13 ноября 2012

Вы можете использовать backSolver для решения этой проблемы, используя модель планирования с конечной емкостью

...