我正在使用Matlab和鲸鱼优化Algorithm来优化我的11维系统。我需要保持一些等式约束(即x(2)-x(1)-90,x(4)-x(3)=60...)。我知道对于这些类型的优化算法,必须使用惩罚函数来解决约束问题(根据同一链接中的论文)。
我的目标函数名为House_cost,我在成本函数中添加了一个惩罚条件。
if((x(2)-x(1))~= 90)
C=inf;
end其中C是我的成本,我也尝试将其设置为一个非常大的value.The,其余的界限和参数设置如下:
dim = 11;
Max_iteration =1000;
SearchAgents_no = 30;
lb = [1 1 1 1 2 1 50 3 19 1 1];
ub = [1440 1440 1440 1440 5 3 80 10 24 3 200];
fobj=@House_cost;
Function_name='House_cost';
tic;
[Best_score,xbest,WOA_cg_curve]=WOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
toc;当我运行我的程序时,约束并不满足,实际上在我的最后一次尝试中x(2)-x(1)=-73。此问题的原因可能是什么?
发布于 2018-09-25 19:47:47
这些类型的随机搜索算法在处理等式约束方面不是很好。有时,您可以替换掉一个变量:
x2-x1=90
手段
x2 = 90+x1
因此,您可以从模型中删除变量x2和约束x2-x1=90。
否则,请使用其他可以更好地处理联立方程的技术,例如整数规划(分段线性)、非线性规划等。
https://stackoverflow.com/questions/52496778
复制相似问题