第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嘛
我也木有用过,其实你也可以不用管的。
懂了木有呢,亲?
第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).