motivation:

1.要实现“符号几何规划”的功能,使用MATLAB自带的fmincon函数来实现

2.工程的代码是通过Python来完成的,需要Python调用MATLAB实现

思路:

1.使用Python直接生成约束条件,目标函数,初始值等函数

2.使用Python来调取MATLAB接口,执行MATLAB的.m文件

3.MATLAB的.m文件中,将输出结果写入txt文档

4.Python读取txt文档结果

1.MATLAB部分

首先,简要介绍下MATLAB中自带的fmincon函数。fmincon函数是用来解决“非线性约束规划”,本文需要用到的是它解决“符合几何规划”的能力。【几何规划】的定义是,目标函数和约束条件均为系数为正的多项式,而【符号几何规划】在此基础上拓展,允许符号为负。

fmincon函数的约束形式如下:

其中,c(x)表示非线性多项式的不等式约束部分,注意,不等式需要严格按照“小于等于0”的格式(可以进行一些简单的不等式变换,写成右边为0的形式),ceq(x)表示非线性多项式的等式约束部分,形式同上。(b和beq是线性约束部分的参数,写成向量形式,A 和 Aeq 是线性约束部分的参数,写成矩阵形式,本文的问题场景不涉及“线性约束”条件)。lb和ub分别为x变量的上下限。在MATLAB中使用fmincon,传入参数如下:x=fmincon( objfunction, x0, A, b, Aeq, beq, lb, ub, st)

在本文的问题背景下,目标函数的.m文件代码如下

newobj.m

约束函数的.m文件的代码如下(这里简单设置了约束函数,当需要多个约束,只需要再添加即可,形式为c = [(),(),...,()]):

equationset.m

fmincon函数还需要传入初始值(因为寻找的是局部最优解),根据具体情况来判断是否需要规定变量的上下边界。初始值传参的.m文件如下:

initialValue.m

完成了三个函数.m文件,下面需要写脚本.m文件。其具体代码如下:

main.m

首先,newobj.m和equationset.m需要和main.m在同一个目录下,“initial”方法是获取初始值x0,以及变量x的上下限。fmincon函数在输出时,不仅可以返回规划结果x,还能返回其他参数。此处本文用到exitflag参数,用来确定规划是否成功执行。exitflag的参数及含义如下:1(简单来说就是,规划成功)

First-order optimality measure was less thanoptions.OptimalityTolerance, and maximum constraint violation was less thanoptions.ConstraintTolerance.

-2(未找到最优解,规划失败)

No feasible point was found.

其他参数含义详见http://cn.mathworks.com/help/optim/ug/fmincon.html 中的 output arguments 部分。

由于,我们需要将输出的结果保存到本地,所以在main.m的脚本文件中,加入写入txt的代码:

写入txt的代码

将四个.m文件放在同一个目录下,在matlab中点击运行即可获得结果。下面,本文要做的工作是通过Python来运行main.m

2.Python部分

在Python端口,只需要使用MATLAB提供的Python API,即可实现Python运行MATLAB的脚本。

首先,在使用之前,需要安装MATLAB的API。安装过程非常简单(本文以在window 7环境下安装为例):用管理员模式打开cmd:

cd “MATLAB安装路径\extern\engines\python”

python setup.py install

安装完成之后,即可在Python代码中:import matlab.engine

之后,将main.m文件以及其他三个.m文件放置在.py文件的通过目录下,接下来只需要两行代码就能完成对于main.m脚本的调用#首先初始化engine

eng= matlab.engine.start_matlab()

#之后直接访问脚本文件名

eng.main(nargout=0)

#最后,释放engine

eng.quit()

现在,到main.m中指定的生成txt文档的路径下,就能找到生成的两个txt文件,只需要使用Python来读取这两个txt中的数据即可。

2017.7.29更新

问题:

由于每次调用,MATLAB都会重新初始化,初始化的时间会消耗一些时间。eng= matlab.engine.start_matlab()

由于实验场景要反复调用,执行MATLAB的脚本。所以尝试在for循环之外初始化,在for循环内执行MATLAB脚本,最后在for循环外退出eng。但是发现,MATLAB的脚本(脚本中有一个写入文件操作)只在第一次for循环的时候执行。只有在for循环中,执行开启eng,执行脚本和结束eng才能正常运行。

MATLAB脚本中的“写入文件”操作是自动执行的,相当于python中的f.flush(),但是仍然只在eng退出之后,才能重新开始一个脚本运行。查找官方文档未果...

参考文献:

http://cn.mathworks.com/help/optim/ug/fmincon.html(fmincon函数官方文档)

http://cn.mathworks.com/help/matlab/matlab-engine-for-python.html(Python调用MATLAB接口官方文档)

python调用matlab 性能_Python调用MATLAB实现fmincon函数相关推荐

  1. python调用matlab程序_Python调用MATLAB实现fmincon函数

    motivation: 1.要实现"符号几何规划"的功能,使用MATLAB自带的fmincon函数来实现 2.工程的代码是通过Python来完成的,需要Python调用MATLAB ...

  2. python 方法的实例_python调用自定义函数的实例操作

    在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...

  3. python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

    原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...

  4. python 3.9性能_Python 3.9来了!这十个新特性值得关注

    选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...

  5. python def return 文件_python基础-文件处理与函数

    1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...

  6. python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区

    2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...

  7. python安装matlabb库_Python调用MATLAB的方法(mlab接口库)(未总结)-Go语言中文社区...

    一.安装 安装mlab库 pip install mlab 显示错误 No module named 'docutils'  (不知道这是什么库) pip install docutils   (安装 ...

  8. python调用c优缺点_Python调用C模块以及性能分析

    一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wch ...

  9. python什么模块动态调用链接库_Python调用C/C++动态链接库的方法详解

    本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: 1 2 3 4 5 6 7 8 9 ...

最新文章

  1. Linux环境源码编译安装SVN
  2. map初始化_您可曾这样初始化一个map呢?
  3. 【Java7】练习:选角色,挑苹果,员工类,换心脏,斗地主,发工资,客户信息管理软件,开发团队调度系统
  4. 1.5.2 在IIS上配置ASP.NET(转)
  5. 软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?
  6. 用js实现改变随意改变div属性style的名称和值的结果
  7. IOS开发(63)之GCD执行延迟操作
  8. 递增子序列 Increasing Subsequences
  9. [渝粤教育] 山东大学 日本历史与文化 参考 资料
  10. php curl 12306,pany
  11. oracle 快速入门之第一章 数据库基础
  12. python控制、监听鼠标键盘
  13. 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
  14. 互联网发展阶段的三阶段是什么?从门户到搜索,到移动互联网
  15. Cesium中获取坐标点地形高程的方法
  16. 2010 27寸 imac 升级固态_2017 款 iMac,27 寸升级换 SSD 固态硬盘拆机详解
  17. 汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)?
  18. 配置有误:由于权限不足而无法读取配置文件
  19. 高效率的免费发布信息平台,助力企业高质量采购
  20. PS色彩算法理解记录 4 Screen

热门文章

  1. windows配置php环境变量
  2. JAVA实现十进制数转二进制数,八进制数,十六进制数
  3. 搭建实验室3d slam 移动小车 2.3镭神32线激光雷达ROS-RVIZ上方向确定
  4. 知识付费如何再次起飞?
  5. 全国首个三高移动健康管理云平台在武汉启动
  6. java 获取请求url地址
  7. 彻底禁用DeliveryOptimization
  8. Failure to create temporary file Permission denied
  9. 做SEO时百度API资源提交PHP推送操作方法
  10. Linux在远程X Server上显示图形界面