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

Введение

Конические программы — это класс выпуклых нелинейных задач оптимизации, в которых для представления нелинейностей используются конусы. Они имеют следующую форму:

Частично целочисленные конические программы (MICP) представляют собой расширения конических программ, в которых некоторые (или все) переменные решения принимают дискретные значения.

Выбор решателя

JuMP поддерживает ряд конических решателей, хотя их поддержка различается в зависимости от того, какие типы конусов поддерживает каждый решатель. В списке Supported solvers SOCP означает, что решатели поддерживают конусы второго порядка, а SDP — что они поддерживают полуопределенные конусы. Кроме того, такие решатели, как SCS и Mosek, поддерживают экспоненциальный конус. Более того, благодаря системе мостов в MathOptInterface многие из этих решателей поддерживают гораздо более широкий спектр экзотических конусов, чем изначально. В списке в разделе Supported solvers имена решателей, поддерживающих дискретные переменные, начинаются с «(MI)».

Двойственность играет большую роль в решении моделей конической оптимизации. В зависимости от решателя может оказаться эффективнее решить двойственную задачу вместо прямой. Если производительность важна, см. дополнительные сведения в руководстве Dualization.

Структура руководств

Общее представление о структуре этой части документации поможет вам понять, где искать нужную информацию.

  • Следующие руководства представляют собой практические примеры, в которых задача излагается словами, затем формулируется математически, а затем решается в JuMP. Решение обычно визуализируется каким-либо образом. Начните с них, если вы новичок в JuMP.

    • Experiment design

    • Logistic regression

  • В руководстве Советы приводится ряд полезных переформулировок и приемов, которые можно использовать при моделировании конических программ. Обратитесь к нему, если вы зашли в тупик, пытаясь сформулировать задачу в виде конической программы.

  • Остальные руководства менее подробны и оформлены в виде коротких примеров кода. В них меньше пояснений, но они могут содержать полезные фрагменты кода, особенно если вы пытаетесь решить похожую задачу.