План разработки
Разработчики JuMP составили этот документ, чтобы поделиться своими планами и целями с сообществом JuMP. Вклад в работу над проблемами, отмеченными в плане, особо приветствуется.
Большинство из этих проблем требует внесения изменений как в JuMP, так и в MathOptInterface, и их реализация является нетривиальной задачей. Определенной очередности нет. Представлены лишь общие области, которые, по нашему мнению, можно улучшить в JuMP.
-
Поддержка нелинейных выражений с векторнозначными входными и выходными данными. Эта проблема состоит из ряда частных задач:
-
представление членов типа
log(det(X))
дляConvex.jl
, где это необходимо; -
автоматическое дифференцирование членов с векторными входными и выходными данными;
-
пользовательские функции с векторными, а не скалярными входными данными, которые
-
особенно полезны в задачах оптимального управления;
-
пользовательские функции с векторными выходными данными, избавляющие от необходимости использовать
User-defined operators with vector outputs.
-
Добавление поддержки моделирования с единицами измерения СИ. Хорошим прототипом является расширение UnitJuMP.jl. Единицы измерения должны стать важной концепцией в JuMP. Дополнительные сведения см. в описании проблемы № 1350.
Выполнено
-
Решена проблема № 3106: ввести нелинейное программирование в качестве важной составляющей. По этому поводу было много вопросов и дискуссий: в настоящее время нелинейные ограничения обрабатываются с помощью
MOI.NLPBlock
и имеют различные ограничения. -
Решена проблема № 3385: добавить поддержку типов коэффициентов, отличных от
Float64
: https://github.com/jump-dev/JuMP.jl/issues/2025. С самого начала в JuMP был жестко задан тип коэффициентовFloat64
. Это делало невозможной поддержку решателей, которые могут использовать другие типы, такие какBigFloat
илиRational{BigInt}
. -
Решена проблема № 3385: добавить поддержку программирования в ограничениях: https://github.com/jump-dev/JuMP.jl/issues/2227. В JuMP первоочередное внимание уделяется линейным, коническим и нелинейным задачам оптимизации. Мы хотим улучшить поддержку программирования в ограничениях.
-
Решена задача № 3176: добавить поддержку многоцелевых задач: https://github.com/jump-dev/JuMP.jl/issues/2099. Задачи в JuMP ограничиваются целевыми функциями со скалярными значениями. Мы хотим расширить их круг, добавив задачи с векторными значениями.
-
Решена задача № 3629: рефакторинг внутреннего кода макросов JuMP. Код в
src/macros.jl
является одной из старейших частей JuMP, и его трудно читать, изменять и расширять. Нам следует пересмотреть внутреннее устройство макросов JuMP, не внося заметных пользователю критических изменений, чтобы улучшить удобство сопровождения в долгосрочной перспективе.