怎样在一个matlab粒子群优化算法中添加一个等式约束条件?
PSO工具箱中,如何添加等式约束条件
1条回答
首先回答你第一个问题:怎么加入变量的约束条件?
打开遗传算法工具箱的窗体中会有下图所示的选项,即是约束条件的编辑
至于添加的方式,这里要重点的提一下,首先将问题抽象成规划问题的标准形式(如果你不懂什么是标准形式的话,建议你去翻阅运筹学那本书,上告诉你什么是标准形式),然后用矩阵语言写出来,最后将矩阵的系数填写到线性不等约束和线性相等约束中,同时定义所求变量x的上界和下界(记住有多少个变量就有多少列,如果你发现有些条件中没有出现某些变量,那么就应该用0补足,这个是matlab解决规划问题与lingo想比较麻烦的一个地方,)。
然后回答你第二个问题:可否在M文件中添加约束条件?
当然可以,界面的东西是为了方便不熟悉matlab编程的人而设计出来的,但是其底层的算法和接口肯定是有的。
碰到不懂的函数,请记得:help 函数名
help ga 之后会得到一下一些函数
ga
Find minimum of function using genetic algorithm //这个是定义
Syntax // 这个是语法也即是调用的规则
x = ga(fitnessfcn,nvars)
x = ga(fitnessfcn,nvars,A,b)
x = ga(fitnessfcn,nvars,A,b,Aeq,beq)
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
x = ga(problem)
[x,fval] = ga(...)
[x,fval,exitflag] = ga(...)
直接给你将最长的那个吧
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
X是返回所求的解
fitnessfcn是适应度函数
nvars是适应度函数中所含变量的维数
A是不等式约束中变量的系数矩阵,b是不等式约束中不含变量的值矩阵
Aeq是等式约束中变量的系数矩阵,beq是等式约束中不含变量的值矩阵
LB是下界,UB是上界
nonlcon 是非线性约束条件
至于options嘛 我也木有用过,其实你也可以不用管的。
懂了木有呢,亲?
求带约束条件的粒子群算法的MATLAB编程
恩 这个比较简单,可以很容易的做出来
Matlab中提供了两种方法,数值和解析
1.数值解法使用filter函数
对于递推公式
a(1)*y(n)+a(2)*y(n-1) + ... + a(na+1)*y(n-na) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
我们可以变成如下
filter(b,a,x,zi)其中a和b就是上面的系数,x是需要计算的n,zi是初值
由于使用filter函数需要信号基础 我们这里不详细说明
2.解析解法就是Z变换
%首先我们要改变递推公式如下,否则没法的到正确结果
%y(n+1)=2y(n),y(0)=-2
L=ztrans(sym('y(n+1)'));%等式左边的Z变换
R=ztrans(sym('2*y(n)'));%等式右边的Z变换
S=L-R
%将初值y(0)带入,我们可以根据y(-1)推出y(0)=-2
%令Y=ztrans(y(n),n,z),y0=y(0),求解出S中的y(n)的Z变换结果
y0=-2;
s=subs(S,{'ztrans(y(n),n,z)','y(0)'},{'Y',y0});
%求解出y(n)的Z变换结果
Y=solve(s,'Y')
%对Y进行反Z变化
iztrans(Y)
S =
z*ztrans(y(n),n,z)-y(0)*z-2*ztrans(y(n),n,z)
Y =
-2*z/(z-2)
ans =
-2*2^n
matlab求最优解的的优化算法怎么加约束条件?
试下附件中的fminsearchbnd函数,请把fminsearchbnd.m文件放在你的工作路径中。
fminsearchbnd(@(x)f(x(1),x(2),x(3)), [0;0;0], [0;0;0], [30;30;2])
ans =
15.0848
20.5081
0.5452此文件下载自File exchange,作者:John D'Errico
粒子群算法求解一个带约束的优化问题
可以使用matlab的优化工具箱进行求解,参考fmincon等优化求解函数。