⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16-多目标优化问题的理想有效解.m

📁 MATLAb 机械源码文件好东西啊
💻 M
字号:
% 圆柱螺旋弹簧的多目标优化设计
% 设计变量:簧丝直径x(1)=d,中径x(2)=D2,圈数x(3)=n
% 1----主程序(极小极大值函数fminimax)
% 设计变量的初始值
x0=[6.2;39;5];
% 设计变量的下限与上限
lb=[2.5;27.5;3];
ub=[9;51;6];
% 线性不等式约束(g6(x)-g11(x))中设计变量的系数矩阵(非零元素)
a=zeros(6,3);
a(1,1)=-1;
a(2,1)= 1;
a(3,1)=-1;a(3,2)=-1;
a(4,1)= 1;a(4,2)= 1;
                    a(5,3)=-1;
                    a(6,3)= 1;
% 线性不等式约束(g6(x)-g11(x))中的常数项列阵
b=[-2.5;9;-30;60;-3;6]';
% 没有等式约束,参数Aeq和beq定义为空矩阵符号“[ ]”
L=[0.9434 42.5514 1.709e-3];
% 多目标优化函数fminimax(调目标函数TH_dmbyh_fTS和非线性约束函数TH_dmbyh_gTS)
for i=1:4
    H=[11*L(1)-i*L(1) 11.5*L(2)-i*L(2) 13.5*L(3)-i*L(3)];
    [x,fn]=fminimax('TH_dmbyh_fTS',x0,a,b,[],[],lb,ub,'TH_dmbyh_gTS',[],L,H);
    for j=1:3
        ff(j)=fn(j)*(H(j)-L(j))+L(j);         % 将各分目标函数还原成实际值
    end
    f1(i)=ff(1);f2(i)=ff(2);f3(i)=1./ff(3);   % 将各分目标最优值赋给各数组
end
disp '      ********  圆柱螺旋弹簧多目标优化设计最优解  ********'  
fprintf (1,'               簧丝直径 x(1)*       d = %3.4f mm \n',x(1))
fprintf (1,'               弹簧中径 x(2)*      D2 = %3.4f mm \n',x(2))
fprintf (1,'               弹簧圈数 x(3)*       n = %3.4f 圈 \n',x(3))
fprintf (1,'               弹簧结构重量 f1*     W = %3.4f N  \n',ff(1))
fprintf (1,'               弹簧自由高度 f2*    H0 = %3.4f mm \n',ff(2))
fprintf (1,'               弹簧自振频率 f3*    fr = %3.4f Hz \n',1/ff(3))
% 调用多维约束优化非线性约束函数(TH_dmbyh_gTS)计算最优点x*的性能约束函数值
g=TH_dmbyh_gTS(x,L,H);
disp '         ########    最优点的性能约束函数值    ########'
fprintf (1,'              弹簧强度约束函数值     g1* = %3.4f \n',g(1))
fprintf (1,'              弹簧指数约束函数值     g2* = %3.4f \n',g(2))
fprintf (1,'              弹簧稳定性约束函数值   g3* = %3.4f \n',g(3))
fprintf (1,'              弹簧无共振约束函数值   g4* = %3.4f \n',g(4))
fprintf (1,'              弹簧刚度约束函数值     g5* = %3.4f \n',g(5))
disp '         ========    最优点的边界约束函数值    ========'
fprintf (1,'            簧丝直径下限约束函数值   g6* = %3.4f \n',-b(1)-x(1))
fprintf (1,'                    上限约束函数值   g7* = %3.4f \n',x(1)-b(2))
fprintf (1,'            弹簧外径下限约束函数值   g8* = %3.4f \n',-b(3)-x(2))
fprintf (1,'                    上限约束函数值   g9* = %3.4f \n',x(2)-b(4))
fprintf (1,'            工作圈数下限约束函数值  g10* = %3.4f \n',-b(5)-x(3))
fprintf (1,'                    上限约束函数值  g11* = %3.4f \n',x(3)-b(6))
% 描述多目标优化决策的极小极大值和理想平面
[fsort]=sort([f1;f2;f3]);             % 对数组f1,f2,f3元素按升序进行排序
disp ' &&&&&&&&  多目标的极小极大值矩阵  &&&&&&&&'
disp (fsort)
subplot(1,2,1);
plot3([fsort(1,1)],[fsort(2,1)],[fsort(3,1)],'go');
hold on;
plot3([fsort(1,2)],[fsort(2,2)],[fsort(3,2)],'ro');
plot3([fsort(1,3)],[fsort(2,3)],[fsort(3,3)],'co');
plot3([fsort(1,4)],[fsort(2,4)],[fsort(3,4)],'b*');
grid;
title('多目标函数的极小极大值');
xlabel('结构重量 f1 (N)');
ylabel('自由高度 f2 (mm)');
zlabel('自振频率 f3 (Hz)');
rotate3d; 
subplot(1,2,2);
plot3([ff(1),0,0],[0,ff(2),0],[0,0,1/ff(3)],'r*-');
grid;
title('多目标函数的理想平面')
xlabel('结构重量 f1 (N)');
ylabel('自由高度 f2 (mm)');
zlabel('自振频率 f3 (Hz)');
rotate3d;                             % 鼠标控制三维视角变化的函数 

% 2----圆柱螺旋弹簧的多目标优化设计的目标函数(TH_dmbyh_fTS)
function [f]=TH_dmbyh_fTS(x,L,H);
% 钢的密度7.5e-6kg/mm^3;重力加速度9.80665m/s^2
p=7.5e-6;gl=9.80665;
% 对各分目标函数进行相同数量级的变换 ff=(f-L)/(H-L)
f1=p*gl*pi^2*x(1)^2*x(2)*(x(3)+1.8)/4;    % 弹簧重量
f(1)=(f1-L(1))/(H(1)-L(1));
f2=x(1)*(x(3)+1.3)+18.25;                 % 弹簧自由高度
f(2)=(f2-L(2))/(H(2)-L(2));
f3=2.809e-6*x(2)^2*x(3)/x(1);             % 弹簧自振频率的倒数
f(3)=(f3-L(3))/(H(3)-L(3));

% 3----圆柱螺旋弹簧的多目标优化设计的非线性不等式约束函数(TH_dmbyh_gTS)
function [g,ceq]=TH_dmbyh_gTS(x,L,H);
% 载荷F=680N;许用应力t=405MPa;工作频率fr=25;工作行程h=16.59
% 弹簧曲度系数K=1.6/C^0.14(当工作循环次数N>1e3时);稳定临界高径比HD=5.3
F=680;t=405;K=1.6;HD=5.3;fr=25;h=16.59;G=8e4;
g(1)=8*K*F/pi*x(2)^0.86/x(1)^2.86-t;
g(2)=6-x(2)/x(1);
g(3)=(x(3)+1.3)*x(1)+18.25-HD*x(2);
g(4)=10*fr-3.56e5*x(1)/x(2)^2/x(3);
g(5)=F-h*G/8*x(1)^4/x(2)^3/x(3);
ceq=[];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -