关于MATLAB遗传算法工具箱不等式约束

 

过去很久了,之前写论文的经验分享一下。

写毕业论文的时候需要用到遗传算法,网上查了很多资料,由于没时间认真去学算法的内部结构,最后还是选择了MATLAB自带的遗传算法工具箱(MATLAB2017-GA),看着前辈们写的教程很快熟悉了那个操作界面,功能很强大,我先尝试输了简单的函数,很快就把准确的结果求了出来,但是当我把我想要求的自定义函数输好,然后再求解的时候简直快要崩溃,由于自定义函数的每个自变量的系数都是变量,所以每一个个体都需要进行大量计算,再加上复杂的线性非线性约束,每次都是等二十分钟之后算出来一个错误的结果。

这是我遇到的问题,网上查了很久,也没找到解决方式,大概有三四个礼拜都在被这个问题困扰,结果算不出来,论文根本没法进行下去,尝试了各种方法,甚至把每一个m文件点开尝试去看程序的整个计算过程,然而并没有什么卵用,记得好像还有几天就快过年了,那天晚上灵光闪现,我不可能去更改人家已经设计好的m文件,那为什么不把不等式约束加到自定义函数里呢?对于超过不等式约束范围的解在往自定义函数中带的时候,给自定义函数加入一定的惩罚函数,使它在遗传过程中被淘汰掉。

思考过程很漫长,解决方法很简单,以下是我当时写的函数(年代久远,大概参考一下):

------------------------------自定义函数----------------------------------

function Q=myminf(x)

    %。。。此处略去一万行

    %g1、g2、g3、g4、g5自定义的不等式约束条件

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在MATLAB遗传算法工具箱中,可以使用非线性约束函数来对遗传算法中的变量进行约束。非线性约束函数需要将变量作为输入,并返回一个值,该值表示约束是否满足。 下面是一个简单的示例,演示如何使用非线性约束函数来对遗传算法中的变量进行约束: 假设我们要优化一个函数 f(x),其中 x 是一个向量,其取值范围为 [0, 1]。我们希望将 x 的取值限制在一个特定的区间内,例如 [0.2, 0.8]。我们可以定义一个非线性约束函数,如下所示: ```matlab function [c, ceq] = mycon(x) % Nonlinear inequality constraints c = [x(1) - 0.2; 0.8 - x(1)]; % Nonlinear equality constraints ceq = []; end ``` 在这个例子中,我们定义了一个名为 mycon 的函数,它有一个输入参数 x,它的输出是两个向量,分别表示不等式约束和等式约束。在这个函数中,我们将 x(1) 与 0.2 和 0.8 进行比较,从而限制了 x(1) 的取值范围。 然后,在使用遗传算法求解 f(x) 的时候,我们可以将 mycon 函数作为一个参数传递给 ga 函数,如下所示: ```matlab options = gaoptimset('NonlinConFcn', @mycon); [x, fval] = ga(@myfun, nvars, A, b, Aeq, beq, lb, ub, [], options); ``` 在这个例子中,我们使用 gaoptimset 函数创建了一个选项结构体 options,将 mycon 函数作为 NonlinConFcn 参数传递给它。然后,我们使用 ga 函数来求解 f(x),并将 options 结构体作为其最后一个参数传递给它。 这样,在遗传算法求解 f(x) 的过程中,将会考虑到非线性约束函数 mycon 对变量 x 的限制,从而得到满足约束条件的优化结果。 ### 回答2: 在Matlab遗传算法工具箱中,可以通过指定函数的定义域来给函数定值约束。具体步骤如下: 1. 创建适应度函数:首先,需要创建一个适应度函数,用来评估每个个体的适应度值。在该函数中,可以根据问题的具体要求,对需要进行约束的变量进行限制。 2. 设置变量的上下限:对于需要进行约束的变量,可以使用Matlab提供的函数来设置其取值的上下限。例如,可以使用`gaoptimset`函数中的`lb`和`ub`参数来分别指定变量的下限和上限。 3. 自定义约束函数:如果简单的上下限约束不足以满足需求,也可以自定义约束函数。在该函数中,可以使用限制条件对变量进行进一步的限制。例如,可以在该函数中添加等式或不等式约束条件,并根据具体情况返回适当的约束值。 4. 设置约束函数:利用`gaoptimset`函数中的`nonlcon`参数,将自定义的约束函数指定为约束条件。 通过以上步骤,可以在Matlab遗传算法工具箱中给函数定义约束条件。算法将遵循这些约束条件,在搜索解空间时将避免生成不满足约束条件的解。这样可以保证所得的最优解满足问题的约束限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值