📄 restrain.m
字号:
function [res_gx,res_hx]=restrain(x,gk,hk)
global f1 kexample kg
if kg==2, global gk hk;end
res_gx=zeros(gk,1);%不等式约束条件初始化
res_hx=zeros(hk,1);%等式约束条件初始化
% 计算约束函数值程序,含等式约束hj(x)==0
% 和不等式约束gi(x)<=0,注意输入格式为"<="。
% res_gx为不等式约束函数值,res_hx为等式约束值。
% 用us,ux数组表示的设计变量范围可不列入约束条件。
% 等式、不等式约束采用列向量形式,用分号隔开。
% 等式约束输入格式与不等式约束相同。
% 以下提供一范例,实际应用时可按此格式输入。
%-------------------原例题gi(x)>=0---------------------------------------------------------------
% res_gx=[85.334407+0.0056858*x(2)*x(5)+0.00026*x(1)*x(4)-0.0022053*x(3)*x(5);....% 玄光男p45例2.2
% 92-(85.334407+0.0056858*x(2)*x(5)+0.00026*x(1)*x(4)-0.0022053*x(3)*x(5));...
% 80.51249+0.0071317*x(2)*x(5)+0.0029955*x(1)*x(2)+0.0021813*x(3)^2-90; .....
% 110-(80.51249+0.0071317*x(2)*x(5)+0.0029955*x(1)*x(2)+0.0021813*x(3)^2);.....
% 9.300961+0.0047026*x(3)*x(5)+0.0012547*x(1)*x(3)+0.0019085*x(3)*x(4)-20;...
% 25-(9.300961+0.0047026*x(3)*x(5)+0.0012547*x(1)*x(3)+0.0019085*x(3)*x(4))];
% res_hx=[];
%----------------------------------------------------------------------------------
%%%%%%%%%%%%%%%%the first example %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if kexample==1
x1=x(1);x2=x(2);x3=x(3);x4=x(4);x5=x(5);
c1=85.334407+0.0056858*x2*x5+0.00026*x1*x4-0.0022053*x3*x5;
c2=80.51249+0.0071317*x2*x5+0.0029955*x1*x2+0.0021813*x3^2;
c3=9.300961+0.0047026*x3*x5+0.0012547*x1*x3+0.0019085*x3*x4;
c=[c1-92;-c1;c2-110;-c2+90;c3-25;-c3+20;-(x1-78);x1-102;-(x2-33);x2-45;-(x3-27);x3-45;-(x4-27);x4-45;-(x5-27);x5-45];
ceq=[];
% 2007.8.6
%%%%%%%%%%%%%%%%%%%%% the second example %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif kexample==2
x1=x(1);x2=x(2);x3=x(3);x4=x(4);x5=x(5);x6=x(6);
g1=17-x2;
g2=x2*x3-30;
g3=0.2-x3;
g4=16-x1/x3;
g5=x1/x3-35;
g6=10-x5;
g7=x5-15;
g8=x6-20;
g9=13-x6;
g10=x1+0.5*x6-x4+4;
g11=43854/(x2*x3*x1^0.5)-855;
g12=7098/(x1*x2*x3^2*(0.169+0.006666*x2-0.0000854*x2^2))-261;
g13=7098/(x1*x2*x3^2*(0.2824+0.00177*x2-0.0000394*x2^2))-213;
g14=0.01233*x4^3/(x1*x3*x5^4)-0.003*x4-261;
g15=29050*x4/(x2*x3*x5^3)*(1+0.29709*x2^2*x3^2/x4^2)^0.5-55;
g16=29050*x4/(x2*x3*x6^3)*(1+7.42727*x2^2*x3^2/x4^2)^0.5-55;
c=[g1;g2;g3;g4;g5;g6;g7;g8;g9;g10;g11;g12;g13;g14;g15;g16];
ceq=[];
elseif kexample==3
x1=x(1);x2=x(2);x3=x(3);x4=x(4);x5=x(5);x6=x(6);x7=x(7);
c1=27/(x1*x2^2*x3)-1;
c2=397.5/(x1*x2^2*x3^2)-1;
c3=1.93*x4^3/(x2*x3*x6^4)-1;
c4=((745*x4/(x2*x3))^2+16.9*10^6)^0.5/(0.1*x6^3)-1100;
c5=((745*x5/(x2*x3))^2+157.5*10^6)^0.5/(0.1*x7^3)-850;
c6=x2*x3-40;
c7=x1/x2-12;
c8=-x1/x2+5;
c9=(1.5*x6+1.9)/x4-1;
c10=(1.1*x7+1.9)/x5-1;
c=[c1;c2;c3;c4;c5;c6;c7;c8;c9;c10];ceq=[];
elseif kexample==4
x1=x(1);x2=x(2);x3=x(3);
c=[6-x2/x1;x2/x1-8;0.5*x3+1.5*x1/x2-5.3;200-3.56*10^5*x1/(x3*x2^2);-400*x3*x2^2.16+520997*x1^1.16];ceq=[];%
temp= (4900/(4900*x3^2*x2^(108/25)+5666153991557420062000843027225/18889465931478580854784*x1^(58/25))^(1/2)/(400*x3*x2^(54/25)-520997*x1^(29/25))*x3*x2^(108/25)-400*(4900*x3^2*x2^(108/25)+5666153991557420062000843027225/18889465931478580854784*x1^(58/25))^(1/2)/(400*x3*x2^(54/25)-520997*x1^(29/25))^2*x2^(54/25));
c=[c;abs(temp)-0.08];%temp 为增加一个求导项,用于调试一种新功能!
% c=[6-x2/x1;x2/x1-8;0.5*x3+1.5*x1/x2-5.3;200-3.56*10^6*x1/(x3*x2^2);-400*x3*x2^2.16+520997*x1^1.16];ceq=[];%10^5
elseif kexample==5
x1=x(1);x2=x(2);x3=x(3);x4=x(4);%180000*x1/(x3*(x1-2*x4)^3+2*x2*x4*(4*x4^2+3*x1*(x1-2*x4)))+15000*x2/((x1-2*x4)*x3^2+2*x2^3*x4)-14
c=[-80+x1;10-x1];ceq=[];
elseif kexample==6
x1=x(1);x2=x(2);x3=x(3);x4=x(4);x5=x(5);
c=[0.6-x1;0.6-x2;0.6-x3;0.6-x4;0.6-x5;x1-2.4;x2-2.4;x3-2.4;x4-2.4;x5-2.4;
37.6901+4.9527*x1-5.8503*x2+2.5132*x3+1.445*x4+0.2898*x5+5.5793*x2^2-4.281*x1*x2-46;
74.833+60.202*x1+52.4*x2-16.168*x3-40.298*x4+23.824*x5-17.158*x1^2-6.262*x2^2+8.263*x3^2+8.144*x4^2-11.34*x5^2-10.435*x2*x3+10.234*x3*x4-150;
57-(49.498+1.785*x1+1.28*x2+1.779*x3+0.483*x4+1.609*x5-0.342*x1^2-0.138*x2^2-0.216*x3^2-0.269*x5^2-0.131*x1*x2-0.1*x2*x3-0.142*x3*x4-0.129*x3*x5);
4.022-1.849*x1-1.0061*x2+0.234*x3+0.079*x4-1.128*x5+0.708*x1^2+0.34*x2^2+0.601*x5^2-0.368*x1*x5-0.296*x2*x5-0.2];
ceq=[];
else
x1=x(1);x2=x(2);x3=x(3);
c=[abs(x2/x1-9.5)-6.5;abs(10000*x1^4/(47*x2^3*x3)-1)-0.01;2771*x2^0.86/x1^2.86-450;((x3+1.3)*x1+18.25)/x2-3.74286;250-3.56*10^5*x1/(x2^2*x3);3-x1;30-x2;x2-60;2.5-x1;x1-9.5];
ceq=[];
end
[kgn,kgn1]=size(c);
if kg==2
res_gx=c;res_hx=[];%不等式约束gi(x)<=0形式
else
res_gx=-c;res_hx=[];%用于将不等式约束gi(x)<=0化为gi(x)>=0形式。
end
%%%%%%%%%%%%%%%%%%%%%%%%%%2007.8.12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -