Введение
Конические программы — это класс выпуклых нелинейных задач оптимизации, в которых для представления нелинейностей используются конусы. Они имеют следующую форму:
Частично целочисленные конические программы (MICP) представляют собой расширения конических программ, в которых некоторые (или все) переменные решения принимают дискретные значения.
Выбор решателя
JuMP поддерживает ряд конических решателей, хотя их поддержка различается в зависимости от того, какие типы конусов поддерживает каждый решатель. В списке Supported solvers SOCP означает, что решатели поддерживают конусы второго порядка, а SDP — что они поддерживают полуопределенные конусы. Кроме того, такие решатели, как SCS и Mosek, поддерживают экспоненциальный конус. Более того, благодаря системе мостов в MathOptInterface многие из этих решателей поддерживают гораздо более широкий спектр экзотических конусов, чем изначально. В списке в разделе Supported solvers имена решателей, поддерживающих дискретные переменные, начинаются с «(MI)».
Двойственность играет большую роль в решении моделей конической оптимизации. В зависимости от решателя может оказаться эффективнее решить двойственную задачу вместо прямой. Если производительность важна, см. дополнительные сведения в руководстве Dualization. |
Структура руководств
Общее представление о структуре этой части документации поможет вам понять, где искать нужную информацию.
-
Следующие руководства представляют собой практические примеры, в которых задача излагается словами, затем формулируется математически, а затем решается в JuMP. Решение обычно визуализируется каким-либо образом. Начните с них, если вы новичок в JuMP.
-
Experiment design
-
Logistic regression
-
-
В руководстве Советы приводится ряд полезных переформулировок и приемов, которые можно использовать при моделировании конических программ. Обратитесь к нему, если вы зашли в тупик, пытаясь сформулировать задачу в виде конической программы.
-
Остальные руководства менее подробны и оформлены в виде коротких примеров кода. В них меньше пояснений, но они могут содержать полезные фрагменты кода, особенно если вы пытаетесь решить похожую задачу.