如何在遗传算法中设置变量约束条件

1、如何设置变量的线性与非线性约束条件。
2、在matlab上,每次运行遗传算法得到的最优解不同,是否因为不收敛或者约束条件设置不妥所致?
3、运用matlab自带工具箱时,为何无法找到初始点。

请哪位高手不吝赐教,最好基于matlab自带遗传算法工具箱给予解释,谢谢!

1、首先打开matlab软件,在“APP(应用)”选项卡中选择“Optimization(优化)”工具箱。

2、在优化工具箱中选择遗传算法,图中标出的选项。

3、遗传算法界面有一部分是输入约束条件的,根据题目输入对应的参数即可。

4、在命令行窗口将以上矩阵用变量代替,则在工具箱中直接输入变量即可。

5、最后将已经定义好的参数,直接输入在对应的位置即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-17
首先回答你第一个问题:怎么加入变量的约束条件?
打开遗传算法工具箱的窗体中会有下图所示的选项,即是约束条件的编辑
至于添加的方式,这里要重点的提一下,首先将问题抽象成规划问题的标准形式(如果你不懂什么是标准形式的话,建议你去翻阅运筹学那本书,上告诉你什么是标准形式),然后用矩阵语言写出来,最后将矩阵的系数填写到线性不等约束和线性相等约束中,同时定义所求变量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嘛
我也木有用过,其实你也可以不用管的。
懂了木有呢,亲?
第2个回答  推荐于2018-03-14
1、一般有两种方法,一种是在生成初始种群时只生成满足约束的个体;另一种是随机产生个体,并且在随后的操作中判断个体是否满足约束条件。
2、这是遗传算法的特点决定的;遗传算法是一种随机搜索算法,每次都因种群规模的不同、参数的不同而得到不同的结果。即便参数都相同,每次运算得到的近似最优解也不一定相同。一般取n次运算中的最好结果来作为最终的最优解。当然,如果你的约束条件设置不妥,或者参数设置不适当,那么也会造成每次运算的近似最优解相差过大,且质量不高。这些都要注意。
3、我用MATLAB自己编写遗传算法来解决问题,因为其自带的工具箱比较固定,只能解决简单、典型的问题。但你的问题稍加复杂时,工具箱的作用就发挥不出来。本回答被提问者和网友采纳
第3个回答  2017-04-30
简单介绍一下思路:
最重要的是确定适应度函数,只要确定这个函数就很容易了,就用你不会编程,直接调用matlab的工具箱就行了。

1st.设置种群规模,并初始化种群p,并计算各个个体的适应度。
例如,20个个体,每个个体包含5个变量,x1,x2,x3,x4,x5.
如果你用matlab来编程的话,这个可以很容易实现,会用到random('unif',a,b)这个函数吧。
例如x1的取值范围是[0,1],那么x1=random('unif',0,1).