В этом фрагменте кода:
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?
@bstellato, вообще-то проблема, с которой я имею дело, намного сложнее. Я хочу сначала запустить решающую программу, потому что настоящая оптимизация занимает много времени, но я могу найти хорошую отправную точку, используя другой алгоритм, который я предпочитаю использовать в качестве первоначального предположения.
Вы можете вручную назначить значения с помощью x.value = 1/2
, а затем передать параметр warm_start=True
в доступных решателях. Имейте в виду, что не все решатели позволяют это сделать, например, SCS.
Более подробная информация доступна на: https://www.cvxpy.org/tutorial/advanced/index.html
Это верно только для cp.Parameter
- как показано на странице, на которую вы ссылаетесь.
Читателям 2021 года: сегодня невозможно (в cvxpy) помочь решателю с первоначальным предположением. Теплый старт прямо сейчас работает только тогда, когда вы решаете ту же проблему с другими значениями параметров, инициализируя предыдущее решение (см. https://github.com/cvxpy/cvxpy/issues/1355).
Есть ли веская причина для горячего запуска решателя? Поскольку задача выпуклая, оптимальное значение стоимости не должно измениться. Если вы решаете аналогичные проблемы с изменением параметров, вы можете использовать функцию
warm_start
, описанную здесь.