1. 约束优化问题
Minimizef(Y)=(y3+2)y2y21s.t.⎧⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎩g1(Y)=1−y32y371785y41≤0g2(Y)=4y22−y1y212566(y2y31−y41)+15108y21−1≤0g3(Y)=1−140.45y1y22y3≤0g4(Y)=1−y1+y21.5−1≤0
0.05≤y1≤2;0.25≤y2≤1.3;2≤y3≤15
2. 樽海鞘算法解决约束优化问题
function [fitness_set, best_Solves] = SSA()
ub = [2, 1.3, 15];
lb = [0.05, 0.25, 2];
Max_iter = 300;
n = 50;
dim = 3;
Convergence_curve = zeros(1,Max_iter);
run_times = 30;
fitness_set = zeros(run_times,1);
best_Solves = zeros(run_times,dim);
for run = 1:run_times
FoodPosition = zeros(1,dim);
FoodFitness = inf;
SalpPositions = zeros(n,dim);
SalpFitness = zeros(n,1);
for i=1:n
for j=1:dim
SalpPositions(i,j) = z(i,j)*(ub(j) - lb(j)) + lb(j);
end
SalpFitness(i) = fobj(SalpPositions(i,:));
if SalpFitness(i)<FoodFitness
FoodPosition = SalpPositions(i,:);
FoodFitness = SalpFitness(i);
end
end
l = 0;
while (l<=Max_iter)
c1 = 2*exp(-(4*l/Max_iter)^2);
for i=1:n
SalpPositions = SalpPositions';
if i<=n/2
for j=1:dim
c2 = rand;
c3 = rand;
if c3<0.5
SalpPositions(j,i) = FoodPosition(j)+c1*((ub(j)-lb(j))*c2+lb(j));
else
SalpPositions(j,i) = FoodPosition(j)-c1*((ub(j)-lb(j))*c2+lb(j));
end
end
elseif i>n/2 && i<n+1
point1 = SalpPositions(:,i-1);
point2 = SalpPositions(:,i);
SalpPositions(:,i)=(point2+point1)/2;
end
SalpPositions = SalpPositions';
end
for i=1:n
Tp = SalpPositions(i,:)>ub;
Tm = SalpPositions(i,:)<lb;
SalpPositions(i,:) = (SalpPositions(i,:).*(~(Tp+Tm))) + ub.*Tp + lb.*Tm;
SalpFitness(i) = fobj(SalpPositions(i,:));
if SalpFitness(i)<FoodFitness
FoodPosition = SalpPositions(i,:);
FoodFitness = SalpFitness(i);
end
end
l = l + 1;
Convergence_curve(l) = FoodFitness;
end
best_Solves(run,:) = FoodPosition;
fitness_set(run) = FoodFitness;
end
end
function out = fobj(X)
y1 = X(:,1);
y2 = X(:,2);
y3 = X(:,3);
fx = (y3+2).*y2.*y1.^2;
g(:,1) = 1-(y2.^3.*y3)./(71785.*y1.^4);
g(:,2) = (4.*y2^2-y1.*y2)./(12566.*(y2.*y1.^3-y1.^4))+(1./(5108.*y1.^2)) -1;
g(:,3) = 1-(140.45.*y1./(y2.^2.*y3));
g(:,4) = (y1+y2)./1.5-1;
pp=10^9;
penalty =[];
for i=1:size(g,1)
for j=1:size(g,2)
if g(i,j)>0
penalty(i,j) = pp.*g(i,j);
else
penalty(i,j) = 0;
end
end
end
out = fx + sum(penalty,2);
end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端