我正在使用Matlab和Whale Optimization Algorithm来优化我的维度11的系统。我需要保留一些相等的约束(即x(2)-x(1)-90,x(4)-x(3) = 60 ...)。我知道,对于这些类型的优化算法,必须使用惩罚函数来解决约束问题(根据同一链接中的论文)。
我的目标函数叫做House_cost,我在成本函数中添加了一个惩罚条件。
if((x(2)-x(1))~= 90)
C=inf;
end
其中C是我的成本,我也尝试将其设置为一个非常大的值。其余的边界和参数设置如下:
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在我的最后一次尝试中。这个问题可能是什么原因?
这些类型的随机搜索算法在处理等式约束方面不是很好。有时您可以替换变量:
X2-X1 = 90
手段
x2 = 90 + x1
所以你可以从模型中删除变量x2
和约束x2-x1=90
。
否则使用其他可以更好地处理联立方程的技术,例如整数规划(分段线性),非线性规划等。