Документация Engee

План разработки

Разработчики 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, не внося заметных пользователю критических изменений, чтобы улучшить удобство сопровождения в долгосрочной перспективе.