CVXPY是斯坦福大学凸优化组开发的一个Python软件包,方便用户以数学形式定义凸优化模型。它是一种可以内置于Python中的模型编程语言,可以自动转化问题为标准形式,调用 solver,解包结果集。
win10 + Anaconda python3.7
准备工作,这一步可有可无(如果后面安装使用出问题,那就需要回过头来做这一步骤)
Visual Studio C++ compiler
不过也有看到说可以不装这个,直接有现成的轮子https://www.lfd.uci.edu/~gohlke/pythonlibs/#ecos。这里选择的版本是根据后面得到的版本信息来选择的。安装方法和后面的cvxopt一样
我试了试,的确有用hhh。
Step 1: 点击进入 Anaconda Prompt
Step 2: 输入命令 pip install cvxpy
可以选择想要用的镜像源
1 2 3 4 | https://pypi.tuna.tsinghua.edu.cn/simple https://mirrors.aliyun.com/pypi/simple/ https://pypi.douban.com/simple https://mirrors.ustc.edu.cn/pypi/web/simple |
1 | pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cvxpy |
Step 3: 输入命令 pip install cvxopt
1.点击进入 Anaconda Prompt
2.输入 python,按 Enter 键,进入python界面
3.输入两行命令(每行命令按 Enter 结束)
32 位系统
1 2 | >>> import pip >>> print(pip.pep425tags.get_supported()) |
64 位系统
1 2 | >>> import pip._internal.pep425tags >>> print(pip._internal.pep425tags.get_supported()) |
4.根据版本信息下载两个 .whl 文件:Numpy+mkl 和 CVXOPT
Numpy+mkl :https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
CVXOPT:https://www.lfd.uci.edu/~gohlke/pythonlibs/#cvxopt
这个下载有点慢,我下载了一个打包合集,合适的话可以直接下载——在这。
听说numpy+mkl1.16.6版本兼容性好一些。
假设两个.whl文件都存在D盘
5.点击进入 Anaconda Prompt
6.卸载 numpy:pip uninstall numpy
7.进入两个 .whl 文件所在的文件夹
输入命令
之前都保存在D盘,所以直接跳转D就行了。
8. 输入命令 “pip install 文件名.whl”,按 Enter 键
比如:
Step 4: 输入命令 pip install cvxopt
进入 Anaconda Prompt,再入python环境,
Step 5: 试一个小例子
Mins.t.?2x1?+3x2?x1?+2x2?>=22x1?+x2?>=3x1?,x2?≥0?
1 2 3 4 5 6 7 8 9 10 | x1 = cvx.Variable(nonneg=True) x2 = cvx.Variable(nonneg=True) obj = cvx.Minimize(2*x1 + 3*x2) constrains = [x1 + 2*x2 >= 2, 2*x1 + x2 >= 3] prob = cvx.Problem(obj, constrains) prob.solve() print('求解状态:%s,用时:%s' %(prob.status, prob.solver_stats.solve_time)) print("The optimal value is", prob.value) print("A solution x is", x1.value, x2.value) print("Dual value is", constrains[0].dual_value, constrains[1].dual_value) |
1 2 3 4 | 求解状态:optimal,用时:2.4e-05 The optimal value is 3.6666666664998697 A solution x is 1.333333333418318 0.333333333221078 Dual value is 1.3333333332844253 0.33333333331070386 |