Python.CVXPY学习指南一

前言

cvxpy是解决凸优化问题的,在使用之前要确保目标函数是一个凸优化问题(包括其中的变量范围设置,参数设置等)

CVXPY是什么?

CVXPY是一种可以内置于Python中的模型编程语言,解决凸优化问题。它可以自动转化问题为标准形式,调用解法器,解包结果集

如下代码是使用CVXPY解决一个简单的优化问题:

from cvxpy import *
# Create two scalar optimization variables.
# 在CVXPY中变量有标量(只有数值大小),向量,矩阵。
# 在CVXPY中有常量(见下文的Parameter)
x = Variable() //定义变量x,定义变量y。两个都是标量
y = Variable()
# Create two constraints.
//定义两个约束式
constraints = [x + y == 1,
              x - y >= 1]
//优化的目标函数
obj = Minimize(square(x - y))
//把目标函数与约束传进Problem函数中
prob = Problem(obj, constraints)
prob.solve()  # Returns the optimal value.
print "status:", prob.status
print "optimal value", prob.value //最优值
print "optimal var", x.value, y.value //x与y的解
status: optimal
optimal value 0.999999999761
optimal var 1.00000000001 -1.19961841702e-11
//状态域被赋予'optimal',说明这个问题被成功解决。
//最优值是针对所有满足约束条件的变量x,y中目标函数的最小值
//prob.solve()返回最优值,同时更新prob.status,prob.value,和所有变量的值。

改变已经创建的问题

Problems是不可改变的,意味着在问题被创建之后它不可被改变。为了改变已有问题的目标或者约束,应该创建一个新的问题

# Replace the objective.//不同的目标函数,相同的约束
prob2 = cvx.Problem(cvx.Maximize(x + y), prob.constraints)
print("optimal value", prob2.solve())

# Replace the constraint (x + y == 1).//不同的约束,相同的目标函数
constraints = [x + y <= 3] + prob.constraints[1:] //注意:此处是列表相加,prob.constraints[1:]取prob的约束集中
//从第二个开始的所有约束。
prob2 = cvx.Problem(prob.objective, constraints)
print("optimal value", prob2.solve())
optimal value 1.0
optimal value 3.00000000006

不可行问题与无边界问题

如果一个问题是不可行问题,这个prob.status将会被设置为’infeasible’,如果问题是无边界的,prob.status=unbounded,变量的值域将不会被更新。

import cvxpy as cvx
x &
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值