过去很久了,之前写论文的经验分享一下。
写毕业论文的时候需要用到遗传算法,网上查了很多资料,由于没时间认真去学算法的内部结构,最后还是选择了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.