Matlab 尽管受到惩罚,但鲸鱼优化算法中未满足等式约束
我正在使用Matlab和鲸鱼优化来优化我的11维系统。我需要保留一些等式约束(即x(2)-x(1)-90,x(4)-x(3)=60…)。我知道,对于这些类型的优化算法,必须使用惩罚函数来解决约束问题(根据同一链接中的文章) 我的目标函数叫做House_cost,我在成本函数中添加了一个惩罚条件Matlab 尽管受到惩罚,但鲸鱼优化算法中未满足等式约束,matlab,optimization,Matlab,Optimization,我正在使用Matlab和鲸鱼优化来优化我的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_iterati
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
否则,请使用其他能够更好地处理联立方程组的技术,例如整数规划(分段线性)、非线性规划等。我也尝试过这种方法,但没有成功,我的输出被困在inf,没有达到最佳值。该算法的论文提到使用该算法来解决多个约束问题,他们也使用了惩罚,所以我不知道出了什么问题。另外,你对约束优化的好算法有什么建议吗?看起来事情搞砸了。从逻辑上讲,从模型中移除的变量很难导致问题。通常,在试图解决问题之前,首先建立一个合适的数学模型是有帮助的(这就像在建造汽车之前设计一辆汽车)。根据模型,可以选择合适的算法或技术来解决它。我经常看到用户首先选择算法,这几乎毫无意义。好吧,我不明白你在删除变量时的意思。我以前在同一个系统中尝试过两种算法,并且满足了约束条件。我试过从Matlab的全局优化工具箱中进行GA和直接搜索,现在我想探索其他选项,这就是我为什么发布我的问题的原因。“我没有理解你的观点”和“我也试过,但它不起作用”这两种说法真的很矛盾:它们不可能都是真的。