Кусочно-нелинейная функция стоимости в cplex

Можно ли смоделировать нелинейную кусочную функцию стоимости в Cplex?

Например что-то вроде цифр, которые я выложил здесь:

введите описание изображения здесь

нелинейная поштучная функция стоимости (черная линия)

Я знаю, что одним из способов является линеаризация квадратичной части к линейной, но я хочу использовать квадратичную часть такой, какая она есть.

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

если x ≲ x0, то стоимость является квадратичной частью;

иначе стоимость является линейной частью.

Заранее спасибо:)

1 ответ

Один из способов - выбрать самую дешевую кривую в точке x:

 min cost
 cost ≥ f(x) − Mδ
 cost ≥ g(x) − M(1−δ)
 δ ϵ {0,1}

М является константой: наибольшая разница между двумя кривыми (т.е. M=|f(xmax)−g(xmax)|). δ - бинарная переменная. Я предположил, что мы минимизируем стоимость и что квадратичная функция является выпуклой.

Эта конструкция реализует

 min cost
 cost ≥ f(x)  or  cost ≥ g(x)

Решатель всегда отбросит самую дорогую функцию и сохранит самую дешевую. На вашей картинке это именно то, что мы хотим: слева от x0 квадратичная функция является самой дешевой, и справа от x0, линейная функция дешевле. Эта формулировка автоматически выберет более дешевый вариант.

Другие вопросы по тегам