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

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

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

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

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

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

function Q=myminf(x)

%。。。此处略去一万行

%g1、g2、g3、g4、g5自定义的不等式约束条件,如果小于零,自定义函数为xxx,如果大于零(不符合),就加入惩罚值

if g1<0 && g2<0 && g3<0 && g4<0 && g5<0

Q=9602.4*x(1)-884.36*x(2)+480.12*x(3)+16200*x(1)*x(2)+87735.04;

else

Q=9602.4*x(1)-884.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值