Начальная догадка / теплый старт в CVXPY: подскажите решение

В этом фрагменте кода:

import cvxpy as cvx

# Examples: linear programming
# Create two scalar optimization variables.
x = cvx.Variable()
y = cvx.Variable()

# Create 4 constraints.
constraints = [x >= 0,
               y >= 0,
               x + y >= 1,
              2*x + y >= 1]

# Form objective.
obj = cvx.Minimize(x+y)

# Form and solve problem.
prob = cvx.Problem(obj, constraints)
prob.solve(warm_start= True)  # Returns the optimal value.
print ("status:", prob.status)
print ("optimal value", prob.value)
print ("optimal var", x.value, y.value)

Я ищу способ выбрать значение горячего старта себя (например: x = 1/2 и y = 1/2), а не предыдущий результат решателя.

Есть ли способ дать решателю этот ввод? А если нет, то есть ли некоммерческая альтернатива cvxpy?

Есть ли веская причина для горячего запуска решателя? Поскольку задача выпуклая, оптимальное значение стоимости не должно измениться. Если вы решаете аналогичные проблемы с изменением параметров, вы можете использовать функцию warm_start, описанную здесь.

bstellato 13.09.2018 20:41

@bstellato, вообще-то проблема, с которой я имею дело, намного сложнее. Я хочу сначала запустить решающую программу, потому что настоящая оптимизация занимает много времени, но я могу найти хорошую отправную точку, используя другой алгоритм, который я предпочитаю использовать в качестве первоначального предположения.

Riley 14.09.2018 08:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
2
3 001
2

Ответы 2

Вы можете вручную назначить значения с помощью x.value = 1/2, а затем передать параметр warm_start=True в доступных решателях. Имейте в виду, что не все решатели позволяют это сделать, например, SCS.

Более подробная информация доступна на: https://www.cvxpy.org/tutorial/advanced/index.html

Это верно только для cp.Parameter - как показано на странице, на которую вы ссылаетесь.

Adi Shavit 24.06.2021 09:55

Читателям 2021 года: сегодня невозможно (в cvxpy) помочь решателю с первоначальным предположением. Теплый старт прямо сейчас работает только тогда, когда вы решаете ту же проблему с другими значениями параметров, инициализируя предыдущее решение (см. https://github.com/cvxpy/cvxpy/issues/1355).

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