找回密码
 注册
Simdroid-非首页
查看: 221|回复: 12

MATLAB黑箱优化问题

[复制链接]
发表于 2010-10-28 10:02:40 | 显示全部楼层 |阅读模式 来自 湖北武汉
各位高人,现在准备对一个问题进行优化,但是没有具体的优化目标函数,而是通过仿真得到的数据经过处理作为目标,但matlab中那些优化函数都是要求优化目标是有具体表达式的,所以不知如何继续。网上貌似也有用遗传算法编写的遗传算法优化神经网络黑箱函数通用MATLAB源码,但是这个自己也不是太懂。不知道有没有人做过相关问题,拿来分享一下啊。
发表于 2010-10-28 10:34:06 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
没有具体的目标函数,进行优化,这个真是个新鲜的事情,要好好学学了
回复 不支持

使用道具 举报

发表于 2010-10-28 10:48:40 | 显示全部楼层 来自 北京
不知道你这个仿真使用什么软件做的,matlab是否可以调用该程序?
目标函数的作用就是通过输入变量然后能够返回需要的目标值,至于是否是个黑箱问题对于很多算法比如说遗传算法来说并不重要。使用遗传算法进行优化时,算法本身对目标函数是个什么样子根本不在意的,只不过有些目标函数可能需要更长的时间更多的群体个数才能得到最优值。只要你能够把变量输入进去然后给出确定的目标值就可以了。
这样一来问题的关键不在于你的问题是否是黑箱,而在于你的仿真程序是否能够被matlab或者其他编程语言调用,然后进行多次的迭代进化循环,只要能够调用,那么就存在使用遗传算法优化的可能性了。不过在目标函数的编写过程中可能会有点问题,就是怎么调用你的仿真程序的问题,如果不能够写成满足matlab自带ga函数要求的形式,那么可能就需要你自己来编写遗传算法程序了。

以上是以遗传算法为例,我相信其他智能优化算法也类似,梯度类的优化算法可能不好用。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-28 10:58:52 | 显示全部楼层 来自 河北廊坊
那也要有输入 输出 只要这个满足就可以
回复 不支持

使用道具 举报

发表于 2010-10-28 11:05:10 | 显示全部楼层 来自 北京
本帖最后由 rocwoods 于 2010-10-28 11:09 编辑

赞同feynmand 版主的方法。其实利用随机行走法,只要你能得到目标函数值,就可以优化参数,而不管具体函数形式。给你举个我实际项目中遇到的例子:
以前我曾经需要根据一些查询条件来从oracle数据库中选取我要的数据,这些数据经过一些处理后得到一个指标值,这个指标值我是希望优化的。问题就是如何优化查询条件,查询条件含有一些参数值,这些值通过num2str转化成字符串嵌入到SQL语句中,然后MATLAB和oracle连接根据这些参数值从oracle数据库中返回我要的数据,我再进一步处理得到我要的指标值。整个过程封装成一个m函数,输入是参数值,返回是我的指标值。函数内部实现了从数值到字符转化以及和oracle连接并返回数据进一步计算。这个函数和具有特定表达式的数学函数差别很大,一般的利用目标函数解析性质的优化方法不奏效,但是随机行走法完全可以处理。
关于随机行走法可以参考我的书,或者搜索本版。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-28 11:14:22 | 显示全部楼层 来自 湖北武汉
3# feynmand 我用的ADMAS,可以被MATLAB调用,感觉版主说的挺有道理,还得看下遗传算法的东西。你说的智能能优化算法,MATLAB中除了遗传算法外,还有其他的吗?谢谢
回复 不支持

使用道具 举报

发表于 2010-10-28 13:27:56 | 显示全部楼层 来自 北京
智能优化算法有粒子群、蚁群、模拟退火等等,个人认为这些算法中遗传算法最不容易陷入局部最优,推荐。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-29 11:17:12 | 显示全部楼层 来自 湖北武汉
谢谢版主,GA好像只输出最终的变量值,我看了GA的M文件,也不太看懂。我现在要求将每次运算后(即每次迭代后的,不知道遗传算法中是不是这样叫的)的变量值读出来,版主可否指点一二,谢谢。 7# feynmand
回复 不支持

使用道具 举报

发表于 2010-10-29 13:20:07 | 显示全部楼层 来自 北京
本帖最后由 feynmand 于 2010-10-29 13:21 编辑

matlab自带的GA函数还是非常复杂的,如果想要弄懂它需要花一些时间的。首先ga这个主程序只是对输入变量个数、有哪些约束条件的判断,ga函数本身并没有实际的计算程序。最主要的部分在最后一个循环中,ga根据约束条件的不同调用了其它专门针对这种约束条件的遗传算法函数,这些函数应该是private函数(如果我没记错的话),如果你要想了解ga内部的计算过程就得打开这些private函数进行研究了,这些private函数编写的也比较复杂的(最复杂的是有非线性不等式约束的那个),你得找到主要进行计算的关键部分来看,前面关于变量判断之类的可以用来学习如何写标准程序。
我认为看明白ga程序的关键在于把程序编写人员的函数调用关系搞清楚。

如果要读出每次迭代后的变量值理论上肯定可以的,至于怎么增加哪个参数你自己看看help文档吧,没时间帮你查了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-29 13:53:56 | 显示全部楼层 来自 湖北武汉
好的,感谢版主! 9# feynmand
回复 不支持

使用道具 举报

发表于 2010-11-1 10:49:38 | 显示全部楼层 来自 甘肃兰州
路过路过路过路过路过

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-20 21:46:50 | 显示全部楼层 来自 江苏无锡
有同等需求,楼主的问题解决了吗?我也需要同样的调用和优化
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-28 16:00:34 | 显示全部楼层 来自 湖北武汉
我最后使用ISIGHT进行优化,如果用matlab的话好像要构造响应面去近似代替目标函数。 12# hero1224

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 05:18 , Processed in 0.057499 second(s), 21 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表