Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 尽管受到惩罚,但鲸鱼优化算法中未满足等式约束_Matlab_Optimization - Fatal编程技术网

Matlab 尽管受到惩罚,但鲸鱼优化算法中未满足等式约束

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

我正在使用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_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和直接搜索,现在我想探索其他选项,这就是我为什么发布我的问题的原因。“我没有理解你的观点”和“我也试过,但它不起作用”这两种说法真的很矛盾:它们不可能都是真的。